若該文爲原創文章,轉載請註明原文出處
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/113789693微信
長期持續帶來更多項目與技術分享,諮詢請加QQ:2149793六、微信:yangsir198808佈局
上一篇:《Qt開發Activex筆記(一):環境搭建、基礎開發流程和演示Demo》
下一篇:敬請期待…指針
開發Activex控件,以供其餘應用程序調用,本篇章講解Qt調用Activex控件,不限於Qt開發的Activex控件。code
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子類的成員。server
運行以前先要註冊,使用Qt下自帶的idc註冊一下。對象
idc -regserver activeHelloWorldDemo.dll
查看一下,打開註冊表並搜索一下,確認clsid,以下圖:
blog
"2F12BFB8-137D-4DC2-9A93-634EFE5A6DFC"
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》
下一篇:敬請期待…繼承