我正在使用QtWinMigrate解決方案來顯示我的插件dll中加載第三方Mfc應用程序的對話框。問題如下:使用打開的Qt對話框最小化Mfc應用程序
當我最小化我的Mfc應用程序的主窗口,並且當我恢復它時,我所有打開的Qt對話框都會丟失。我發現實際上我的Qt對話框被銷燬,即析構函數被調用。
我做了一些調試,發現了以下內容:
當我關我的MFC主窗口中我的Qt對話框得到WM_SHOWWINDOW消息SW_PARENTCLOSING WPARAM parametar。然後QtWndProc被調用,這對於SW_PARENTCLOSING情況下的問題發送QHideEvent:在文件qapplication_win.cpp線
在QtWndProc()函數2160
case WM_SHOWWINDOW :
if(lparam==SW_PARENTCLOSING) {
QHideEvent e;
qt_sendSpontaneousEvent(widget,e);
widget->hideChildren(true); ////////////////////
和QWinWidget的eventFilter發送DefferedDelete誰刪除我的對話框:
在QWinWidget.cpp在管線280
QWinWidget::eventFilter(OObject* o, QEvent* e){
case QEvent::Hide:
if(w->testAtrribute(Qt::WA_DeleteOnClose)
deleteLater();
}
有人可以向我解釋這種行爲嗎?這對我來說似乎是個bug。
感謝
我正在嘗試使用QtWinMigrate插件DLL也。雖然我可以得到一個Qt窗口出現窗口是完全沒有響應,就好像它沒有得到任何事件(而MFC應用程序保持響應)。你有沒有遇到過這個問題,或者有關於如何解決問題的建議? – User 2011-03-10 21:52:11
我只從我的插件DLL中顯示QDialog窗口。我不確定你是否可以顯示QMainWindow。不過,請檢查是否正確設置了消息掛鉤。在qmFcapp.cpp中的QtFilterProc中設置斷點並查看它是否被命中。該函數將窗口消息發送給Qt進行處理。 – user152508 2011-03-11 11:24:11
另外,在創建qt對話框時,將其父窗口設置爲主機MFC應用程序的主窗口。 – user152508 2011-03-11 11:31:34