我正在使用 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();
}
有人可以向我解释这种行为吗?这对我来说似乎是错误。
谢谢