複数の QMdiSubWindows を持つ QMdiArea があります。構築中、QMdiArea は TabbedView および DocumentMode として初期化されるため、デフォルトでは QTabWidget のように見えます。
ユーザーがサブウィンドウを切り替えるためにタブをクリックしたときに、確認を追加したいのですが、ユーザーがキャンセルを選択した場合、アクティブなタブは変更されません。
私の解決策は、シグナル「subWindowActivated」を処理し、確認が失敗した場合に「setActiveSubWindow」を元のサブウィンドウに呼び出すことです。
問題は、setActiveSubWindow 呼び出しが期待どおりに機能しなかったことです。アクティブなウィンドウは元のウィンドウに戻りますが、サブ ウィンドウは最大化されず、重なっています。元のサブウィンドウは、ユーザーがクリックしたものの後ろに表示されます。setWindowState を呼び出してサブ ウィンドウを最大化し、それにフォーカスを設定することはできますが、サブ ウィンドウはユーザーがクリックしたウィンドウの背後にあります。
ユーザーが新しいサブ ウィンドウをクリックした後、元のサブ ウィンドウに戻る適切な方法があるかどうかを知りたいです。
以下はいくつかのコードです
MyClass::MyClass()
{
m_pMdiArea = new QMdiArea;
m_pMdiArea->setViewMode(QMdiArea::TabbedView);
m_pMdiArea->setDocumentMode(true);
connect (m_pMdiArea, SIGNAL(subWindowActivated(QMdiSubWindow *)), this, SLOT(subWindowActivate(QMdiSubWindow *)));
}
void MyClass::subWindowActivate(QMdiSubWindow * window)
{
if (!window || window == m_pCurrentWindow)
{
return;
}
if (ConfirmationRejected)
{
m_pMdiArea->setActiveSubWindow(m_pCurrentWindow);
return;
}
m_pCurrentWindow = window;
}