Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在与非Qt应用程序相同的过程中加载Qt应用程序会中断非Qt应用程序的工具提示_C++_Qt_Qt4 - Fatal编程技术网

C++ 在与非Qt应用程序相同的过程中加载Qt应用程序会中断非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

我有一个封装在DLL中的Qt应用程序,用于插入第三方应用程序。当这些第三方应用程序启动Qt应用程序时,第三方应用程序中的工具栏工具提示停止工作。一旦我关闭Qt应用程序,它们就会再次工作

我在VisualStudio中重新创建了这个问题,创建了一个非Qt可执行文件(在本例中是带有开箱即用设置的MFC MDI应用程序)和一个Qt应用程序(我将其更改为DLL)。我在非Qt可执行文件中添加了一个菜单项,并按如下方式处理该事件:

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对象。我同意这是一堆蠕虫,但它似乎对第三方应用程序中的所有其他事件都有效。谢谢