若该文为原创文章,转载请注明原文出处
本文章博客地址: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》
下一篇:敬请期待...