前阵子需要为一个软件(基于MFC框架或WinAPI开发)开发一个插件, 由于个人一直都是用的Qt框架写程序, 所以也理所当然的沿用了Qt。但是在调试时, Qt的信号/槽机制,以及一些定时器事件都无法执行和触发. 经过了学习文档, google学习等一番折腾之后, 搞清楚了原委: 原来Qt中的信号/槽响应机制, 以及定时器等这些功能都是需要通过QApplication的实例来进行消息分配, 如果没有QApplication的实例, 也就没有这些功能了.
而我们只是开发第三方软件的一个插件, 做成动态库形式, 也没有创建QApplication的实例, 而主程序里也不会有QApplication的实例, 所有就会有上述的问题.
对于这个问题, 网上搜索到一个解决方案: 就是Qt solutions里的QtWinMigrate. 但是我下载来, 试用了一下, 没有成功. 因为时间问题也没有仔细研究,最后的方案是: 在该插件中涉及到Socket通讯的部分(前面提到的信号/槽机制和定时器时间等都是为了执行Socket通讯)改用Windows SOCKET API来编写.
本文探讨了在使用Qt框架开发第三方软件插件时遇到的问题,即插件无法正常触发Qt的信号/槽机制及定时器事件。通过分析原因发现,这是由于插件作为动态库形式,未创建QApplication实例导致的功能缺失。为了解决此问题,提出了使用Qtsolutions里的QtWinMigrate方案,并提供了最终采用的替代方案——将涉及Socket通讯的部分改用WindowsSOCKETAPI编写。
1万+

被折叠的 条评论
为什么被折叠?



