0%

在Qt中调用ActiveX控件

最近有一个项目需要在Qt工程中调用一个ActiveX控件,之前有在Qt的文档中看到过ActiveQt相关的文档,于是就开始仔细看了起来,刚开始看的时候有点两眼一抹黑感觉Qt的文档说得有点模糊,自己摸索了一下发现还是非常简单、非常方便的。

通过Qt提供的工具对COM生成头文件和实现文件

如果安装了VS的话,先用其提供的OleView.exe(在VS安装目录下,需要用全局搜索工具如everything搜索一下)来找一下你想使用的COM组件,双击查看后找到它的UUID。 然后Qt提供了一个dumpcpp.exe,用来对指定的COM接口生成.h和.cpp文件,命令也很简单传入COM组件的UUID即可,形如"dumpcpp {00000000-0000-0000-0000-000000000000}",然后在当前目录下就会生成对应的.h和.cpp文件了。

而且生成的类都是基于Qt的类型,使用起来相当的方便。

在工程中引入生成的文件,直接实例化并调用即可。

这里不详述了,使用起来很方便。

关于COM组件的事件(Event)与Qt的槽的绑定

某些COM组件是提供了事件(Event)的,但查看前面生成的源代码甚至可以发现dumpcpp跳过了对Event的代码生成,那么在Qt中要如何获取到事件呢? 其实在QAxBase中的signal方法已经实现了将Event转换为Qt中的signal,我们只需要像绑定Qt的signal和slot那样来绑定Event就可以了。 如COM组件中有个Printed(count As Integer)的事件,那么这样绑定即可:"connect(&axObj, SIGNAL(Printed(int)), this, SLOT(onPrinted(int)))",是不是很简单呢?