2012-12-12 32 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();