使用打开的Qt对话框最小化Mfc应用程序

时间:2009-09-26 19:40:45

标签: qt qt4 qt-mfc-migration

我正在使用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(); 

}

有人可以向我解释一下这种行为吗?这对我来说似乎是个错误。

由于

1 个答案:

答案 0 :(得分:0)

你的问题有答案。请参阅WA_DeleteOnClose上的文档。您需要在隐藏隐藏时不想删除的对话框上调用setAttribute(WA_DeleteOnClose, false)