2012-12-12 2 views
2

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; 
} 

답변

0

당신은에서 취소 사용해야하는 몇 가지 코드 조각입니다 블록 :

activatePreviousSubWindow(); 
관련 문제