2

複数の 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;
}
4

1 に答える 1

0

Cancel ブロッ​​クで使用する必要があります。

activatePreviousSubWindow ();
于 2013-09-12T10:23:12.343 に答える