拒绝 QMdiArea 中的子窗口更改

Posted

技术标签:

【中文标题】拒绝 QMdiArea 中的子窗口更改【英文标题】:Denying subwindow change in QMdiArea 【发布时间】:2012-12-12 06:43:43 【问题描述】:

我有一个带有多个 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】:

您应该使用 at Cancel 块:

activatePreviousSubWindow ();

【讨论】:

以上是关于拒绝 QMdiArea 中的子窗口更改的主要内容,如果未能解决你的问题,请参考以下文章

pyqt中QMdiArea子窗口关闭的问题

如何在不从当前活动选项卡中获取焦点的情况下将子窗口添加到 QMdiArea(设置为 TAB 模式)?

【求助】关于Qt的QMdiArea的问题

子窗口访问父页面iframe中的iframe,top打开的子窗口访问父页面中的iframe中的iframe

QMdiArea及QMdiSubWindow实现父子窗口及布局方法

在新窗口中打开 Access 中的子表单