我正在扩展在Windows上运行的商业应用程序。它可以通过插件进行扩展,对于这个应用程序是普通的DLL。从插件DLL导出的免费函数可以挂接到形成命令的主机应用程序UI,并且可以基于用户与主机应用程序UI的交互来使用这些命令。此外,它看起来像插件运行在与主机应用程序相同的线程中,或者至少所有插件运行在同一线程中。在主机应用程序中使用Qt用户界面
也可以为这些插件编写用户界面。由于主机应用程序是从另一个平台移植的,因此用户界面将窗口用作主窗口和对话框的主要容器,但窗口内容及其控件是由所有者绘制的。它们有一个标准的资源文件,标准的窗口过程,标准的对话框过程,使用GetMessage()的标准事件循环,TranslateMessage(),TranslateMessage (),DispatchMessage()。
这些示例插件中的Windows是在其中一个插件DLL函数中创建的。事件循环也在那里运行。
在这些示例中,可以创建模态窗口和非模态窗口,并且集成似乎工作正常。只是视觉风格有点混杂。
甚至有可能,或更好的,因为简单的例子,设计它是不是不允许调用命令多次,这将打开同类多个窗口,仍然看起来一切正常。
我想用我的插件的用户界面的Qt。但是,当我这样做时,主机用户界面只是停止反应。它甚至没有重新粉刷。
最初我使用QApplication.exec(),它阻止了一切,但很快我学会了不要调用它。相反,我保留了示例应用程序的原始消息循环,并在其中调用QApplication.processEvent()。但它仍然不起作用。
我在想,当Qt应用程序表现如此不同时发生了什么? Qt阻止了一些消息或者发生了什么?
我也尝试整合QWinWidget,但它有类似的效果。
我会说更有可能的东西是吃东西的消息。 – user1095108 2013-04-08 22:03:43