资源简介
在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
- 上一篇:BMS.zip
- 下一篇:新版交易猫源码.zip
相关资源
- 酒店管理系统基于Qt Creator5)
- vtk QT做的三维地质可视化系统2of2
- Qt局域网聊天软件
- Qt Creator opengl实现四元数鼠标控制轨迹
- QT局域网聊天系统(基于QT5.修改过)
- qt-电子点菜系统
- C 餐厅叫号系统(QT平)
- QT 实现文件下载
- qt图像处理
- QT,JPEG解码源代码(已完成)
- Qt 播放音频文件
- Qt 读取16进制的data文件
- MQTT+串口(usart)透传
- 易语言QQTEA算法源码
- VC工程转Qt工程文件的工具
- MQTT推送Demo
- 基于Linux、QT的视频监控系统的设计与
- Qt 百度地图 定位
- QT酷炫界面开发指南《QmlBook》
- Ubuntu下操作Excel,qt代码
- Qt图片浏览器 --基于Qt的Graphics View f
- qtnribbon2破解
- Qt软件开发 完整项目代码
- MQTT_3.1protocol_Specific中文版
- 在QT中使用RTP进行视频的采集和传输
- Mini6410 Qt4和Qtopia编程开发指南
- Qt实现Code39条形码
- qt_ffmpeg_mp4_export_and_import.zip
- QT5.5入门与项目实战
- Huffman Compress 霍夫曼编码 压缩 解压缩
评论
共有 条评论