QtWinMigrate ソリューションを使用して、サード パーティの Mfc アプリケーションに読み込まれたプラグイン dll からダイアログを表示しています。問題は次のとおりです。
Mfc アプリケーションのメイン ウィンドウを最小化し、再度元に戻すと、開いている Qt ダイアログがすべて失われます。実際に Qt ダイアログが破棄されていることがわかりました。つまり、デストラクタが呼び出されています。
デバッグを行ったところ、次のことがわかりました。
Mfc メイン ウィンドウを閉じると、Qt ダイアログに SW_PARENTCLOSING wparam パラメータを含む WM_SHOWWINDOW メッセージが表示されます。次に、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();
}
誰かが私にこの振る舞いを説明してもらえますか? これは私にはバグのようです。
ありがとう