拒绝QMdiArea中的子窗口更改



我有一个QMdiArea和几个QMdiSubWindows。在构造时,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;
}

您应该在Cancel块中使用:

activatePreviousSubWindow ();

相关内容

  • 没有找到相关文章

最新更新