我正在使用QtWinMigrate解决方案来显示我在第三方Mfc应用程序中加载的插件dll的对话框。问题如下:
当我最小化我的Mfc应用程序的主窗口时,当我再次恢复它时,我的所有打开的Qt对话框都会丢失。我发现实际上我的Qt对话框被破坏了,即析构函数被调用。
我做了一些调试并发现了以下内容:
当我关闭我的Mfc主窗口时,我的Qt对话框获得带有SW_PARENTCLOSING wparam parametar的WM_SHOWWINDOW消息。然后调用QtWndProc,对于SW_PARENTCLOSING案例问题发送QHideEvent:
在文件qapplication_win.cpp第2160行的QtWndProc()函数中
case WM_SHOWWINDOW :
if(lparam==SW_PARENTCLOSING) {
QHideEvent e;
qt_sendSpontaneousEvent(widget,e);
widget->hideChildren(true); ////////////////////
并且QWinWidget的eventFilter发送删除我的对话框的DefferedDelete:
在第280行的QWinWidget.cpp中
QWinWidget::eventFilter(OObject* o, QEvent* e){
case QEvent::Hide:
if(w->testAtrribute(Qt::WA_DeleteOnClose)
deleteLater();
}
有人可以向我解释一下这种行为吗?这对我来说似乎是个错误。
由于
答案 0 :(得分:0)
你的问题有答案。请参阅WA_DeleteOnClose上的文档。您需要在隐藏隐藏时不想删除的对话框上调用setAttribute(WA_DeleteOnClose, false)。