Qt ActiveX 避坑(必坑)指南(二)

接着说写Qt ActiveX,哎说不尽的心酸,流不尽的泪啊。。说真的千万别用Ocx,用Ocx会掉进何种坑,不解释,自己来看下面的问题和方解决方法,还有一些问题无法解决,知道的大神给留个言。非常感谢。

一、 Qt ActiveX 设计坑

  1. Ocx需要单独弹窗问题:
    Ocx需要单独弹窗需要的几个基本接口:显示,关闭,移动,窗口大小重新设置。其他接口自己添加。
  2. 使用日志问题:
    一个程序中多个Ocx使用Qt日志重定向到文件qInstallMessageHandler,多次使用qInstallMessageHandler时会出现意料之外的错误,日志混乱,一个应用程序只使用一个Qt的日志,只会对最后一个qInstallMessageHandler生效。
    暂时无法解决,需要只能自己自己重新写个日之类,写文件,不用Qt的日志功能。

二、 Qt ActiveX 使用技术坑

  1. Qt创建OCX编译报错:

    1> LINK : fatal error LNK1117: 选项“VERSION:1.0.0”中的语法错误

    解决办法:右键选择项目->属性->链接器->常规,将页面中的版本1.0.0选择从父 级或项目默认设置继承。重新编译通过。
    Qt ActiveX 避坑(必坑)指南(二)_第1张图片

  2. Ocx创建包含使用另外的Ocx,使用VS2015创建同时使用AxContainer和AxServer,只会加载一个模块问题:
    VS2015创建Qt ActiveX工程,选择ActiveQt Server输入名称和路径,下一步选择对应模块,并添加ActiveQt container选择创建之后。
    Qt ActiveX 避坑(必坑)指南(二)_第2张图片
    会存在问题,右键项目Qt Project Setting,选择Qt Modules查看ActiveQt和
    ActiveQt server都是勾选上的。
    Qt ActiveX 避坑(必坑)指南(二)_第3张图片
    再查看All Qt Libs页面,AxContainer和AxServer模块只勾选上了AxContainer,AxServer并没有勾选上。查看依赖项,确实Qt5AxServer.lib没有添加上。
    Qt ActiveX 避坑(必坑)指南(二)_第4张图片
    解决办法:多次在Qt Project Setting中,重新勾选上ActiveQt和ActiveQt server点击确定再查看All Qt Libs,如果还是没有加入,就多次重复之前的操作,多次后可以加载两个模块。

  3. Qt 生成Ocx后,供MFC调用:
    插入Ocx生成接口文件时,编译出现QRect错误。错误定位在QRect GetnormalGeometry()中QRect未声明,这个是QRect转换CRect失败。
    Qt ActiveX 避坑(必坑)指南(二)_第5张图片
    解决方法:直接改代码,将QRect改为CRect后编译通过。

  4. Qt 生成Ocx中,界面同时存在Combobox和另外的Ocx,下拉表位置出现bug
    在Qt 生成Ocx中,界面同时存在Combobox和另外的Ocx,使用时Combobox的下拉列表位置会出现问题,下拉列表出现在屏幕左上角位置。
    Qt内部机制问题暂时无法解决。规避下。

  5. Qt生成Ocx使用后,接口未变,但资源文件发生改变,OCX需要重新加载到程序中,否则资源文件样式表加载不上。

  6. Qt生成Ocx时编译报错idl文件生成失败:
    原因MIDL Compiler路径找不到,路径错误问题,造成原因可能是挪动工程文件目录,造成缓存的路径可能失效,
    解决办法:删除所有文件,重新下载代码后成功编译。或者删除VS自动生成的.db文件进行尝试。

  7. Qt生成Ocx内嵌另外一个FoxitOcx控件,MFC调用,特定情况下,在关闭销毁窗体时崩溃,崩溃到Qt5Core中,
    暂时未找到问题原因。

    欢迎各位大神交流讨论

Qt OCX问题解决:

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

你可能感兴趣的:(Qt,Qt,ActiveX,COM,OCx)