QMdiSubWindows가있는 QMdiArea가 있습니다. 구성하는 동안 QMdiArea는 TabbedView 및 DocumentMode로 초기화되므로 기본적으로 QTabWidget처럼 보입니다.QMdiArea에서 서브 윈도우 변경 거부
사용자가 탭을 클릭하여 하위 창을 전환 할 때 확인을 추가하고 사용자가 취소를 선택하면 활성 탭이 변경되지 않습니다.
내 해결 방법은 "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;
}