【发布时间】:2023-03-21 10:51:01
【问题描述】:
我有一个带有多个 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;
}
【问题讨论】: