• 大小: 6KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: 其他
  • 标签: QT  QMdiSubWindo  

资源简介

在Qt多文档窗口应用中,有时会出现这样一个应用场景:在这个全局应用中,只new了一次,其后操作就是隐藏和现实。 即:通过界面的工具栏或菜单,触发显示一个子窗口,当这个窗口存在时候,显示在最前面,点击窗口关闭的时候,只是隐藏这个窗口,而不是销毁。 父窗口中主要代码如下: pW1 = new myWidget(ui.mdiArea) ; //new一个子部件 QMdiSubWindow pMdiSubwin1 = ui.mdiArea->addSubWindow(pW1) ;//将子部件 装入QMdiSubWindow,同时获取该QMdiSubWindow指针 pMdiSubwin1->hide(); //设置子窗口隐藏 pW1->installEventFilter(this); //在父窗口中注册子部件消息过滤事件 在子部件发生QCloseEvent事件时候,直接忽略该事件: void myWidget::closeEvent(QCloseEvent *e) { e->ignore(); } 尽管在子窗口中忽略了该窗口的关闭动作,实际并未关闭,但是该消息通过注册在父窗口的消息过滤器传到父窗口中,在父窗口中的过滤事件处理时,通过QMdiSubWindow隐藏操作,实现隐藏子窗口: if( (target == pW1 ) && (event->type() == QEvent::Close) ) pMdiSubwin1->hide() ; 小结: 本例程在VS2010+QT。8.5下实现,方法及思路 在该应用中只能通过获取子窗口的指针进行隐藏/小时操作,而不是使用被装入子窗口的部件窗口指针进行操作。 另:直接通过子部件隐藏操作,会出现子部件中的部件消失,只剩下僵尸窗口的现象,不能实现隐藏子窗口。 例程源码链接:https://download.csdn.net/download/weixin_46079613/12517109

资源截图

代码片段和文件信息

#include “demo038.h“

demo038::demo038(QWidget *parent Qt::WFlags flags)
: QMainWindow(parent flags)
{
ui.setupUi(this);

initSystem() ;
}

demo038::~demo038()
{
delete pW1 ;pW1 =NULL ;
delete pW2 ;pW2 =NULL ;
delete pW3 ;pW3 =NULL ;
}

void demo038::initSystem() 
{  
pW1 = new myWidget(ui.mdiArea) ;  
pW1->setWindowtitle(“the 1st window“); 
pMdiSubwin1 = ui.mdiArea->addSubWindow(pW1) ;

pW1->setLabelText(“the 1st window“);

pMdiSubwin1->hide(); 
pW1->installEventFilter(this); 
 
pW2 = new myWidget (ui.mdiArea) ; 
pW2->setWindowtitle(“the 2nd window“);  
pMdiSubwin2 = ui.mdiArea->addSubWindow(pW2) ; 
pMdiSubwin2->hide();
pW2->installEventFilter(this); 
pW2->setLabelText(“the 2nd window“);
 
pW3 = new myWidget (ui.mdiArea) ; 
pW3->setWindowtitle(“the 3th window“); 
pMdiSubwin3 = ui.mdiArea->addSubWindow(pW3) ;
pMdiSubwin3->hide(); 
pW3->installEventFilter(this); 
pW3->setLabelText(“the 3th window“);
 

ui.mdiArea->tileSubWindows();
}

void demo038::on_action1_triggered() 

pMdiSubwin1->showMaximized() ; 
//pW1->activateWindow() ; 
}

void demo038::on_action2_triggered()  
{  
pMdiSubwin2->showMaximized() ; 
//pMdiSubwin2->activateWindow() ;  
}

void demo038::on_action3_triggered()  

pMdiSubwin3->showMaximized() ;  
//pMdiSubwin3->activateWindow() ; 
}

void demo038::on_actionTile_triggered() 

ui.mdiArea->tileSubWindows() ;
}

void demo038::on_actionCascade_triggered() 
{  
ui.mdiArea->cascadeSubWindows();
}

bool demo038::eventFilter(Qobject *target QEvent *event)
{
if( (target == pW1 ) && (event->type() == QEvent::Close) )
pMdiSubwin1->hide()  ;
if( (target == pW2 ) && (event->type() == QEvent::Close) )
pMdiSubwin2->hide()  ; 
if( (target == pW3 ) && (event->type() == QEvent::Close) )
pMdiSubwin3->hide()  ;

return QWidget::eventFilter(target event);
}
 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1928  2020-06-12 10:04  demo038.cpp

     文件        764  2020-06-12 10:06  demo038.h

     文件         67  2020-06-11 15:10  demo038.qrc

     文件       1954  2020-06-12 10:07  demo038.ui

     文件      13952  2020-06-12 10:06  demo038.vcxproj

     文件       3339  2020-06-12 10:06  demo038.vcxproj.filters

     文件        591  2020-06-11 15:10  demo038.vcxproj.user

     文件        434  2020-06-11 16:32  demo038.vcxproj.vspscc

     文件        169  2020-06-11 15:10  main.cpp

     文件        353  2020-06-12 10:09  mywidget.cpp

     文件        415  2020-06-12 10:03  mywidget.h

     文件       1151  2020-06-12 01:23  mywidget.ui

----------- ---------  ---------- -----  ----

                25117                    12


评论

共有 条评论