QMdiAreaQMdiAreaQMdiAreaQMdiArea

Qt之容器控件(QMdiArea)-CSDN博客

https://blog.csdn.net/YinShiJiaW/article/details/105027258

Qt之容器控件(QMdiArea)

Shijia Yin

于 2020-03-22 14:08:59 发布

阅读量1.7w
 收藏 89

点赞数 20
分类专栏: Qt基础
版权

GitCode 开源社区
文章已被社区收录
加入社区

Qt基础
专栏收录该内容
61 篇文章79 订阅
订阅专栏
简述
QMdiArea(Multiple Document Interface Area)提供了一个可以同时显示多个文档窗口的区域。

本质上来说,QMdiArea就像是多文档窗口的窗口管理器。例如,它将它所管理的窗口绘制在它上面,并且以级联或者平铺的方式放置这些窗口。通常情况下,QMdiArea用作QMainWindow的中心控件,以此来创建一个MDI应用程序。但是,它也可以被放置在任何布局类中。

QMdiArea支持所有的窗口标志,只要这些窗口标志被当前控件样式支持。

功能详述
QMdiArea中的子窗口是QMdiSubWindow的实例化对象。通过调用addSubWindow来将他们加入MDI区域。通常情况下是传递一个QWidget作为内部控件给这个函数。但是直接传递QMdiSubWindow也是可以的。

当一个子窗口获得键盘焦点或者setFocus被调用,这个子窗口便被激活。当激活窗口改变时,subWindowActivated信号会被触发。activeSubWindow函数会返回当前激活的窗口。

subWindowList是一个十分方便的函数,可以用来返回所有子窗口列表。这个信息可以被用在包含窗口列表的弹出菜单上面。

WindowOrder用来指定子窗口的排列规则。子窗口的排列规则直接影响到subWindowList()、activateNextSubWindow()以及activatePreviousSubWindow()。而且,当窗口使用级联或者平铺时,这个信息也很有用。

QMdiArea为子窗口提供了两个内建的布局策略:cascadeSubWindows()和tileSubWindows()。这两个策略都是槽函数而且很容易与菜单条目连接。

注意 QMdiArea的默认滚动条属性是Qt::ScrolBarAlwaysOff。

使用

上面是Qt Designer的设计窗口,这种多窗口效果多半就是用QMdiArea实现的。


上面是Qt自带的example,用于实现多文本窗口同时编辑。


这是我自己写的小例子,源码如下

    QGroupBox *groupBox_0 = new QGroupBox("互斥单选按钮组");
    QRadioButton *radioBtn_0 = new QRadioButton("&Radio Button 1");
    QRadioButton *radioBtn_1 = new QRadioButton("R&adio Button 2");
    QRadioButton *radioBtn_2 = new QRadioButton("Ra&dio Button 3");
    QVBoxLayout *vLayout_0 = new QVBoxLayout;
    vLayout_0->addWidget(radioBtn_0);
    vLayout_0->addWidget(radioBtn_1);
    vLayout_0->addWidget(radioBtn_2);
    groupBox_0->setLayout(vLayout_0);

    QGroupBox *groupBox_1 = new QGroupBox("非互斥多选按钮组");
    QCheckBox *checkBox_0 = new QCheckBox("&Checkbox 1");
    QCheckBox *checkBox_1 = new QCheckBox("C&heckbox 2");
    QCheckBox *checkBox_2 = new QCheckBox("&Tri-state Button");
    checkBox_2->setTristate(true);
    QVBoxLayout *vLayout_1 = new QVBoxLayout;
    vLayout_1->addWidget(checkBox_0);
    vLayout_1->addWidget(checkBox_1);
    vLayout_1->addWidget(checkBox_2);
    groupBox_1->setLayout(vLayout_1);

    QMdiArea *mdiArea = new QMdiArea;
    mdiArea->tileSubWindows();
    mdiArea->cascadeSubWindows();
    mdiArea->setDocumentMode(true);

    mdiArea->addSubWindow(groupBox_0);
    mdiArea->addSubWindow(groupBox_1);

    QMainWindow *mainWindow = new QMainWindow;

    mainWindow->setCentralWidget(mdiArea);

    QGridLayout *gridLayout = new QGridLayout;
    gridLayout->addWidget(mainWindow);

    this->setLayout(gridLayout);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
常用设置
添加与移除子窗口
添加子窗口使用addSubWindow,移除窗口使用removeSubWindow

mdiArea->addSubWindow(groupBox_0);
mdiArea->removeSubWindow(groupBox_0);
1
2
设置背景色
工作空间背景色默认为灰色,可以使用setBackground来设置

mdiArea->setBackground(QBrush(Qt::green));
1
效果


设置最大化模式
当活动子窗口最大化时,默认行为是最大化下一个激活的子窗口。如果不希望出现这种情况,可以通过下面的方法来设置

mdiArea->setOption(QMdiArea::DontMaximizeSubWindowOnActivation);
1
默认情况


设置之后


设置视图模式
有两种视图模式,可以通过setViewMode来设置。

常量    值    描述
QMdiArea::SubWindowView    0    显示带有窗口框架的子窗口(默认)。
QMdiArea::TabbedView    1    在选项卡栏中显示带有选项卡的子窗口。
效果


在该模式下,setTabPositon、setTabShape、setTabClosable、setTabsMovable灯标签栏相关函数可用,具体效果见Qt之容器空间(QTabWidget)。

设置激活顺序
指定用于对由subWindowList()返回的子窗口列表进行排序的条件。排列窗口时,函数cascadeSubWindows()和tileSubWindows()遵循此顺序。

常量    值    描述
QMdiArea::CreationOrder    0    窗口按其创建顺序返回。
QMdiArea::StackingOrder    1    窗口按其堆叠顺序返回,最上面的窗口在列表的最后。
QMdiArea::ActivationHistoryOrder    2    窗口将按照它们被激活的顺序返回。
信号槽

名称    描述
activateNextSubWindow()    激活下一个窗口
activatePreviousSubWindow()    激活上一个窗口
cascadeSubWindows()    级联排布子窗口
closeActiveSubWindow()    关闭活动窗口
closeAllSubWindows()    关闭所有窗口
setActiveSubWindow(QMdiSubWindow *window)    设置特定窗口为活动窗口
testOption(QMdiArea::AreaOption option) const    平铺排布子窗口
信号
名称    描述
subWindowActivated(QMdiSubWindow *window)    特定子窗口被激活时触发,参数为当前激活的QMdiSubWindow指针
引用
[1] Qt助手
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/YinShiJiaW/article/details/105027258

相关推荐

  1. QMdiAreaQMdiAreaQMdiAreaQMdiArea

    2024-07-10 00:34:05       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 00:34:05       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 00:34:05       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 00:34:05       57 阅读
  4. Python语言-面向对象

    2024-07-10 00:34:05       68 阅读

热门阅读

  1. Jacoco的覆盖率原理

    2024-07-10 00:34:05       21 阅读
  2. 中英双语介绍美国的州:阿肯色州(Arkansas)

    2024-07-10 00:34:05       28 阅读
  3. Socket网络通信流程

    2024-07-10 00:34:05       27 阅读
  4. 《妃梦千年》第二十九章:朝中波澜

    2024-07-10 00:34:05       22 阅读
  5. FineReport报表开发步骤

    2024-07-10 00:34:05       28 阅读
  6. py每日spider案例之magnet篇

    2024-07-10 00:34:05       19 阅读
  7. Gridea + SFTP +Docker + Nginx 配置博客-CSDN

    2024-07-10 00:34:05       24 阅读
  8. 工具推荐:滴答清单

    2024-07-10 00:34:05       22 阅读
  9. 怎么样调整分类的阈值

    2024-07-10 00:34:05       25 阅读
  10. 数据分表和分库原理

    2024-07-10 00:34:05       19 阅读
  11. sklearn中的Pipeline:构建无缝机器学习工作流

    2024-07-10 00:34:05       23 阅读