C++ 在与非Qt应用程序相同的过程中加载Qt应用程序会中断非Qt应用程序的工具提示
我有一个封装在DLL中的Qt应用程序,用于插入第三方应用程序。当这些第三方应用程序启动Qt应用程序时,第三方应用程序中的工具栏工具提示停止工作。一旦我关闭Qt应用程序,它们就会再次工作 我在VisualStudio中重新创建了这个问题,创建了一个非Qt可执行文件(在本例中是带有开箱即用设置的MFC MDI应用程序)和一个Qt应用程序(我将其更改为DLL)。我在非Qt可执行文件中添加了一个菜单项,并按如下方式处理该事件:C++ 在与非Qt应用程序相同的过程中加载Qt应用程序会中断非Qt应用程序的工具提示,c++,qt,qt4,C++,Qt,Qt4,我有一个封装在DLL中的Qt应用程序,用于插入第三方应用程序。当这些第三方应用程序启动Qt应用程序时,第三方应用程序中的工具栏工具提示停止工作。一旦我关闭Qt应用程序,它们就会再次工作 我在VisualStudio中重新创建了这个问题,创建了一个非Qt可执行文件(在本例中是带有开箱即用设置的MFC MDI应用程序)和一个Qt应用程序(我将其更改为DLL)。我在非Qt可执行文件中添加了一个菜单项,并按如下方式处理该事件: void MFCApp::OnFileLaunch() { QtApp
void MFCApp::OnFileLaunch()
{
QtApp qtApp;
qtApp.Launch();
}
int QtApp::Launch()
{
int argc = 0;
char *argv = 0;
QApplication a(argc, &argv);
MyMainWindow w;
w.show();
return a.exec();
}
QtApp类根本不公开Qt API,启动实现如下:
void MFCApp::OnFileLaunch()
{
QtApp qtApp;
qtApp.Launch();
}
int QtApp::Launch()
{
int argc = 0;
char *argv = 0;
QApplication a(argc, &argv);
MyMainWindow w;
w.show();
return a.exec();
}
显示Qt应用程序时,非Qt应用程序将保持完全响应,除了工具栏工具提示和键盘快捷键(如Ctrl A)外,还可用于全选
我怀疑这可能是一个Qt错误,但我只是想检查一下,以防我的启动代码出错
顺便说一下,我正在使用Qt4.5.2
谢谢,别那么做。QApplication必须是流程中唯一的事件循环才能正常工作 我认为答案在于QAbstractEventDispatcher类,它的文档说明: QAbstractEventDispatcher还允许将外部事件循环与Qt事件循环集成。例如,Motif Extension Qt解决方案包括重新实现QAbstractEventDispatcher,它将Qt和Motif事件合并在一起
我会调查的。谢谢。不管它值多少钱,我最终不得不将Qt-DLL放在它自己单独的事件循环中。Qt DLL有一个小API,宿主应用程序可以调用该API来传输数据,我只是在条目上切换了线程,这样只有拥有Qt事件循环的线程才能在Qt DLL内工作。感谢您的回复。除了单独的过程,我不确定我有多少选择,是吗?我无法更改第三方应用程序,Qt DLL只需要1个QApplication对象。我同意这是一堆蠕虫,但它似乎对第三方应用程序中的所有其他事件都有效。谢谢