資源簡介
在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
評論
共有 條評論