问题简述
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);
}
}