使用Qt ActiveX生成Ocx 避坑指南(一)

最近做项目用Qt生成Ocx供MFC调用,经历坎坷,问题不断。。这下面详细给出Qt生成ocx的避坑指南,

一、Qt生成OCX

本人使用的是Qt5.9 + VS2015 ,用VS生成比较简单,VS上装上Qt的插件,然后新建项目->选择Qt5 Projects 选择最后一个ActiveQt Server,然后就可以生成如下图:在这里插入图片描述编译就会生成Ocx.

二、Qt使用OCX

Qt使用ocx有两种方法:
一是使用QAxWidget,当然使用时先注册Ocx, 直接在designed中拖入双击选择Ocx控件,AxWidget就会加载Ocx,在代码dynamicCall()传入函数原型和参数调用使用接口,如果不用Designed在代码中直接写,使用setControl设置OCX 的uuid,具体查看uuic,可以参考https://blog.csdn.net/fxbjye/article/details/85102083的博客,这里不赘述,我也是参考各位大神的方法解决问题的.代码如下所示:

QAxWidget *flash = new QAxWidget(0,0);
flash->setControl(QStringLiteral("{f53b7748-643c-4a78-8dbc-01a4855d1a10}"));
flash->dynamicCall("openFile(QString, QString)", "../abc.pdf", "");

第二种方法比较好用,再使用较多接口使用dynamicCall调用不太方便,使用Qt提供了dumpcpp.exe,用来对指定的COM接口生成.h和.cpp文件,命令也很简单传入COM组件的UUID即可,形如"dumpcpp.exe {00000000-0000-0000-0000-000000000000}" ,然后在当前目录下就会生成对应的.h和.cpp文件了。dumpcpp.exe一般在Qt安装目录bin下,之后就可以正常使用接口了。

三、MFC使用Qt OCX的坑

MFC使用Qt的OCX会出现坐标位置不对的情况,在MFC中使用Qt生成的ocx时,生成接口文件生成.h和.cpp文件时,会报错QRect错误,这里貌似时由于MFC中坐标转换不正确导致的,将QRect改为CRect,即可编译通过。在Qt的Ocx中使用QComboBox时会出问题,MFC中由于坐标转换不正确导致QCombobox的下拉框弹出位置一直不正确。在使用QWebEngineView时多次置空网址,可能会导致崩溃,需要加以处理,并清理缓存。

综上所述,使用Qt的Ocx是个大坑,能避开则避开,非要使用也请注意这些问题。

Qt OCX问题解决:

1.使用Qt ActiveX生成Ocx 避坑指南(一)
2.Qt ActiveX 避坑(必坑)指南(二)

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值