若該文為原創文章,轉載請注明原文出處
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/113789693
長期持續帶來更多專案與技術分享,咨詢請加QQ:21497936、微信:yangsir198808
紅胖子(紅模仿)的博文大全:開發技術集合(包含Qt實用技術、樹莓派、三維、OpenCV、OpenGL、ffmpeg、OSG、單片機、軟硬結合等等)持續更新中…(點擊傳送門)
Qt開發專欄:開發技術
上一篇:《Qt開發Activex筆記(一):環境搭建、基礎開發流程和演示Demo》
下一篇:敬請期待…
前言
??開發Activex控制元件,以供其他應用程式呼叫,本篇章講解Qt呼叫Activex控制元件,不限于Qt開發的Activex控制元件,
Demo
??
QAxWidget
概述
??QAxWidget類是包裝ActiveX控制元件的QWidget,
??QAxWidget可以實體化為空物件,帶有它應該包裝的ActiveX控制元件的名稱,或者帶有指向ActiveX控制元件的現有介面指標,ActiveX控制元件的屬性、方法和事件僅使用QAxBase支持的資料型別,可以作為Qt屬性、插槽和信號使用,基類QAxBase提供了一個API,可以通過IUnknown指標直接訪問ActiveX,
??QAxWidget是一個QWidget,通常可以這樣使用,例如,它可以組織在一個widget層次結構和布局中,或者充當一個事件過濾器,支持標準小部件屬性,例如enabled,但它依賴于ActiveX控制元件來實作對環境屬性(例如palete或font)的支持,QAxWidget試圖提供必要的提示,
??但是,不能重新實作特定于Qt的事件處理程式,如mousePressEvent或keyPressEvent,并期望可靠地呼叫它們,嵌入式控制元件完全覆寫QAxWidget,通常處理用戶界面本身,使用特定于控制元件的API(即偵聽控制元件的信號),或使用標準COM技術,如window程序子類化,
??QAxWidget還從QAxBase繼承了大部分與ActiveX相關的功能,特別是dynamicCall()和querySubObject(),
??警告:可以將QAxWidget子類化,但不能在子類中使用Q_OBJECT宏(生成的moc檔案將不會編譯),因此無法添加更多信號、插槽或屬性,這種限制是由于運行時生成的元物件資訊造成的,要解決此問題,請將QAxWidget聚合為QObject子類的成員,
Qt呼叫Activex方法
步驟一:注冊activex控制元件
??運行之前先要注冊,使用Qt下自帶的idc注冊一下,
idc -regserver activeHelloWorldDemo.dll
??
步驟二:確認activeQt控制元件的clsid
??查看一下,打開注冊表并搜索一下,確認clsid,如下圖:
??
"2F12BFB8-137D-4DC2-9A93-634EFE5A6DFC"
步驟三:使用QAxWidget呼叫
QAxWidget *pAxWidget = new QAxWidget();
pAxWidget->resize(400, 320);
pAxWidget->setControl("2F12BFB8-137D-4DC2-9A93-634EFE5A6DFC");
pAxWidget->show();
原始碼
#include <QApplication>
#include <QAxWidget>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QAxWidget *pAxWidget = new QAxWidget();
pAxWidget->resize(400, 320);
pAxWidget->setControl("2F12BFB8-137D-4DC2-9A93-634EFE5A6DFC");
pAxWidget->show();
return a.exec();
}
上一篇:《Qt開發Activex筆記(一):環境搭建、基礎開發流程和演示Demo》
下一篇:敬請期待…
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/259815.html
標籤:其他
