-
大小: 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
- 上一篇:BMS.zip
- 下一篇:新版交易猫源码.zip
相关资源
- QT写的计算器源码
- 501222zw_mqtt_fc.zip
- thingsboard之MQTT接入TB说明0531.docx
- 拖动旋转缩放椭圆和矩形.rar
- QTreeView实现节点拖动.zip
- 基于qt的简易计算器
- QT小游戏《2048》源码含大量注释
- QT数据库操作
- 基于QT简单客户端与服务器
- Qt实现smtp发送邮件
- Qt 二维码打印
- 线段绘制,并且可以拖动线段绘制
- QT5实现简单的TCP通信例程
- 变电站机器人监控系统界面
- MainWindow.rar
- qt QPainter 绘制跑马灯
- qt activemq mqtt 动态库
- Windows下基于Opencv+Qt的视频聊天客户端
- PyQt5:简单视频播放器
- Qt 使用sendemailapi实现邮件发送
- 关于QT多线程子线程使用信号和槽
- QT 窗口切换
- qt操作office文件的程序
- QTP10破解文件mgn-mqt82
- QT5日历源码
- Linux系统下基于Qt的局域网即时通信系
- QT TableView自定义委托
- 基于QT的简单视频播放器
- UR优傲机器人说明书
- tcpNum.zip
评论
共有 条评论