2009-09-26 72 views
0

我正在使用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。

感謝

+0

我正在嘗試使用QtWinMigrate插件DLL也。雖然我可以得到一個Qt窗口出現窗口是完全沒有響應,就好像它沒有得到任何事件(而MFC應用程序保持響應)。你有沒有遇到過這個問題,或者有關於如何解決問題的建議? – User 2011-03-10 21:52:11

+0

我只從我的插件DLL中顯示QDialog窗口。我不確定你是否可以顯示QMainWindow。不過,請檢查是否正確設置了消息掛鉤。在qmFcapp.cpp中的QtFilterProc中設置斷點並查看它是否被命中。該函數將窗口消息發送給Qt進行處理。 – user152508 2011-03-11 11:24:11

+0

另外,在創建qt對話框時,將其父窗口設置爲主機MFC應用程序的主窗口。 – user152508 2011-03-11 11:31:34

回答