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