拒绝QMdiArea中的子窗口更改

时间:2012-12-12 06:43:44

标签: qt qmdiarea

我有一个带有几个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;
}

1 个答案:

答案 0 :(得分:0)

您应该使用取消阻止:

activatePreviousSubWindow ();