0

我正在使用 QtWinMigrate 解决方案来显示来自第三方 Mfc 应用程序中加载的插件 dll 的对话框。问题如下:

当我最小化我的 Mfc 应用程序的主窗口并再次恢复它时,我所有打开的 Qt 对话框都丢失了。我发现实际上我的 Qt 对话框被破坏了,即调用了析构函数。

我做了一些调试,发现了以下内容:

当我关闭我的 Mfc 主窗口时,我的 Qt 对话框收到带有 SW_PARENTCLOSING wparam 参数的 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 发送 DeferedDelete 删除我的对话框:

在第 280 行的 QWinWidget.cpp

QWinWidget::eventFilter(OObject* o, QEvent* e){

    case QEvent::Hide: 

    if(w->testAtrribute(Qt::WA_DeleteOnClose)

    deleteLater(); 

}

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

谢谢

4

1 回答 1

0

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

于 2010-03-06T12:57:03.403 回答