Qt应用开发(基础篇)——MDI窗口 QMdiArea QMdiSubWindow

一、前言

QMdiArea类继承于QAbstractScrollArea,QAbstractScrollArea继承于QFrame,是Qt用来显示MDI窗口的部件。

滚屏区域基类 QAbstractScrollAreahttps://blog.csdn.net/u014491932/article/details/132245486

框架类 QFramehttps://blog.csdn.net/u014491932/article/details/132188655

QMdiArea 部件提供了一个显示MDI(Multiple Document Interface) 多文档窗口。子窗口使用QMdiSubWindow管理,QMdiSubWindow继承于QWidget,所以它除了拥有顶级窗口的属性,还拥有自身的行为,比如按键移动窗口等。

二、QMdiArea类

1、activationOrder

该属性保存子窗口列表的排序标准。默认情况下,它是窗口创建顺序。使用subWindowList()返回的子窗口列表的排序。

cpp 复制代码
QMdiArea::WindowOrder activationOrder() const
void setActivationOrder(QMdiArea::WindowOrder order)
定义 描述
QMdiArea::CreationOrder 窗口按照创建的顺序返回。
QMdiArea::StackingOrder 窗口按照它们的堆叠顺序返回,最上面的窗口是列表中的最后一个
QMdiArea::ActivationHistoryOrder 窗口按照它们被激活的顺序返回

2、background

该属性保存工作区的背景刷子,默认情况下,它是灰色,但可以是任何刷子(例如,颜色,渐变或像素图)。

cpp 复制代码
QBrush background() const
void setBackground(const QBrush &background)

3、viewMode

该属性表示二级界面的显示方式,默认为QMdiArea::SubWindowView。

cpp 复制代码
QMdiArea::ViewMode viewMode() const
void setViewMode(QMdiArea::ViewMode mode)
定义 描述
QMdiArea::SubWindowView 显示带有窗口框架的子窗口
QMdiArea::TabbedView 带有选项卡的窗口

选项卡窗口QTabWidgethttps://blog.csdn.net/u014491932/article/details/132311737

4、documentMode

该属性用于在选项卡视图模式下选项卡栏是否设置为文档模式,默认禁用。这与macOS上的文档模式相同。启用时,不会呈现选项卡部件框架,即选项卡页面和其后的窗口等页面无框架区分看起来是一个整体。此模式对于页面需要显示文档类型的情况非常有用,因为节省了选项卡部件框架占用的部分空间。

cpp 复制代码
bool documentMode() const
void setDocumentMode(bool enabled)

5、tabPosition

该属性表示选项卡视图模式中选项卡的位置。

cpp 复制代码
QTabWidget::TabPosition tabPosition() const
void setTabPosition(QTabWidget::TabPosition position)

6、tabShape

该属性表示选项卡视图模式中选项卡的形状。

cpp 复制代码
QTabWidget::TabShape tabShape() const
void setTabShape(QTabWidget::TabShape shape)

7、tabsClosable

该属性表示选项卡视图模式中选项卡栏是否应该在每个选项卡上放置关闭按钮。

cpp 复制代码
bool tabsClosable() const
void setTabsClosable(bool closable)

8、tabsMovable

该属性表示选项卡视图模式中用户是否可以移动选项卡区域内的选项卡,默认选项卡是不可移动的。

cpp 复制代码
bool tabsMovable() const
void setTabsMovable(bool movable)

9、公共方法

1)addSubWindow

使用addSubWindow添加小部件到MDI区域,如果希望在MDI区域关闭窗口时删除窗口,则必须设置Qt::WA_DeleteOnClose小部件属性,否则隐藏。

cpp 复制代码
QMdiSubWindow *addSubWindow(QWidget *widget, Qt::WindowFlags windowFlags = Qt::WindowFlags())

示例:

cpp 复制代码
QMdiArea mdiArea;
QMdiSubWindow *subWindow1 = new QMdiSubWindow;
subWindow1->setWidget(internalWidget1);
subWindow1->setAttribute(Qt::WA_DeleteOnClose);
mdiArea.addSubWindow(subWindow1);

2)activeSubWindow

返回当前活动的子窗口,没有则返回nullptr。

cpp 复制代码
QMdiSubWindow *activeSubWindow() const

3)currentSubWindow

返回指向当前子窗口的指针,如果没有则返回nullptr。如果包含QMdiArea的QApplication是活动的,这个函数将返回与activeSubWindow()相同的结果。

cpp 复制代码
QMdiSubWindow *currentSubWindow() const

4)removeSubWindow

移除MdiSubWindows或者内部小部件。

cpp 复制代码
void removeSubWindow(QWidget *widget)

5)setOption/testOption

设置返回一些MDI行为的使能。

cpp 复制代码
bool testOption(QMdiArea::AreaOption option) const
void setOption(QMdiArea::AreaOption option, bool on = true)
定义 描述
QMdiArea::DontMaximizeSubWindowOnActivation 当活动子窗口最大化时,默认行为是最大化下一个激活的子窗口

6)subWindowList

返回MDI区域中所有子窗口的列表,activationOrder属性决定返回的顺序。

cpp 复制代码
QList<QMdiSubWindow *> subWindowList(QMdiArea::WindowOrder order = CreationOrder) const

10、信号

1)subWindowActivated

窗口被激活后时触发。

cpp 复制代码
void subWindowActivated(QMdiSubWindow *window)

三、QMdiSubWindow类

1、keyboardPageStep

设置使用键盘页面键时小部件应该移动距离。默认的键盘页步长值是20像素。

cpp 复制代码
int keyboardPageStep() const
void setKeyboardPageStep(int step)

2、keyboardSingleStep

设置使用键盘箭头键时小部件应该移动距离。默认的键盘单步值是5像素。

cpp 复制代码
int keyboardSingleStep() const
void setKeyboardSingleStep(int step)

3、公共方法

1)isShaded

获取窗口是否为阴影,如果窗口被折叠,只有标题栏可见,则显示为阴影。

cpp 复制代码
bool isShaded() const

2)showShaded

调用此函数使子窗口进入阴影模式。

cpp 复制代码
void showShaded()

3)mdiArea

返回持有mdiSbuWindow的mdiArea指针。

cpp 复制代码
QMdiArea *mdiArea() const

4)setOption

设置子窗口行为的使能。

cpp 复制代码
void setOption(QMdiSubWindow::SubWindowOption option, bool on = true)

5)testOption

返回子窗口行为的使能。

cpp 复制代码
bool testOption(QMdiSubWindow::SubWindowOption option) const
定义
QMdiSubWindow::RubberBandResize 启用后,用户可调整子窗口大小,QResizeEvent事件触发,默认该选项是禁用的。
QMdiSubWindow::RubberBandMove 启用后,用户可移动子窗口位置,QMoveEvent事件触发,默认该选项是禁用的。

6)systemMenu

获取子窗口的当前系统菜单。

cpp 复制代码
QMenu *systemMenu() const

7)setSystemMenu

设置子窗口的当前系统菜单。

cpp 复制代码
void setSystemMenu(QMenu *systemMenu)

8)showSystemMenu

显示子窗口的当前系统菜单。

cpp 复制代码
void showSystemMenu()

9)setWidget

获取子窗口的内部小部件。

cpp 复制代码
QWidget *widget() const

10)setWidget

设置子窗口的内部小部件。内部小部件显示在标题栏下方的子窗口中央。

cpp 复制代码
void setWidget(QWidget *widget)

4、信号

1)aboutToActivate

子窗口被激活发出此信号,QMdiArea也将发出subWindowActivated()信号。

cpp 复制代码
void aboutToActivate()

2)windowStateChanged

QMdiSubWindow在窗口状态改变后发出这个信号。

cpp 复制代码
void windowStateChanged(Qt::WindowStates oldState, Qt::WindowStates newState)
相关推荐
别动我齐刘海1 小时前
机器人运动控制学习2——基础进阶
c++·人工智能·神经网络·学习·目标检测·机器学习·机器人
小庞在加油1 小时前
WinDbg实战:QT/跨平台项目死锁与无响应问题排查指南
开发语言·qt·windbg·工具
傻啦嘿哟2 小时前
英雄联盟皮肤爬虫:爬取全皮肤价格与特效,做比价工具
java·c++·爬虫
码匠许师傅3 小时前
【C++ 面试真题】24. 聊聊 C++ 的时间日期处理
java·c++·面试
闻道且行之3 小时前
图片处理助手|泊松融合原理 + C++ 工程实现,seamlessClone 三模式一次讲透
数据库·c++·人工智能·opencv
hy.z_7773 小时前
【QT】1.QT初识(背景介绍、搭建开发环境、Qt Creator、程序、项目文件解析、编程注意事项)
qt
莫浅子4 小时前
day01-USB架构与枚举
c++·单片机·嵌入式驱动
不会代码的小猴4 小时前
7. JSON
开发语言·c++·笔记·qt·算法·json
沫璃染墨4 小时前
《Qt从零入门系列(六):信号与槽进阶——从多种连接方式到Lambda表达式》
开发语言·c++·qt·代码规范·设计规范·qt5
小小龙学IT6 小时前
ZeroMQ(libzmq)开源消息库深度解析:brokerless 时代的轻量消息内核
c++·开源