QMdiArea之QMdiSubWindow子窗口隐藏系统标题栏

关于QMdiSubWindow去掉系统边框最小化的问题

  • 问题简述
    • 解决方案
    • 具体代码示例

问题简述

QMdiSubWindow去掉系统边框然后使用自定义实现菜单栏,进行最小化操作,第一个窗口的位置坐标在mdiarea显示范围之外。所以造成消失的问题。应该是自定义菜单栏没有重写对应的系统事件和最小化窗口的size。

解决方案

将最小化之前,显示系统标题栏,然后最小化,然后在隐藏系统标题栏,setvisible(true)。就解决这个问题。之前比较困扰,懒得去理他,最近才想到这个解决方案。

具体代码示例

void MdiSubTitleBar::slot_Clicked()
{
    QPushButton *pButton = qobject_cast<QPushButton *>(sender());
    QWidget *pWindow =m_pMdiSub;
    if (pButton == m_pMinimizeButton)
    {
    	//设置窗口系统属性,恢复标题栏。
        m_pMdiSub->parentWidget()->setWindowFlags(Qt::Widget);
        //恢复标题栏之后进行最小化
        m_pMdiSub->parentWidget()->showMinimized();
		//最小化之后隐藏系统标题栏。
        m_pMdiSub->parentWidget()->setWindowFlags(Qt::FramelessWindowHint);
        m_pMdiSub->show();  //这里必须要show或者setvisible(true),不然有问题。
        emit sig_updateSubWindowState(Min);
    }
}

你可能感兴趣的:(笔记,qt5,qtcreator)