【Qt控件之QMdiArea】介绍及使用
描述
QMdiArea小部件提供了一个区域,用于显示MDI窗口。QMdiArea的功能类似于MDI窗口的窗口管理器。例如,它在自身上绘制和排列管理的窗口,可以按级联或平铺模式排列它们。通常,QMdiArea被用作QMainWindow的中心小部件,用于创建MDI应用程序,但也可以放置在任何布局中。下面的代码向主窗口添加了一个MDI区域:
QMainWindow *mainWindow = new QMainWindow;
mainWindow->setCentralWidget(mdiArea);
与顶级窗口的窗口管理器不同,QMdiArea支持所有窗口标志(Qt::WindowFlags),只要这些标志被当前小部件样式支持。如果某个特定的标志在样式中不受支持(如WindowShadeButtonHint),您仍然可以使用showShaded()来收起窗口。
以上这段话理解就是:
QMdiArea(一个Qt库中的类,用于创建多文档界面(MDI)应用程序的主窗口区域)支持所有的窗口标志(Qt::WindowFlags),但是这些标志是否能被正确使用还取决于当前窗口部件(Widget)的样式是否支持这些标志。有些窗口标志可能在某些样式中不被支持,比如“WindowShadeButtonHint”。“WindowShadeButtonHint”这个窗口标志是用来表示窗口是否有一个按钮可以用来控制窗口的阴影效果的。但是,如果这个标志在当前使用的样式中不被支持,也就是说,即使你设置了这个标志,你可能也看不到相应的阴影按钮。
然而,尽管这个标志在样式中不受支持,你仍然可以使用showShaded()函数来收起(或展开)窗口。也就是说,尽管你可能看不到阴影按钮,但是你仍然可以通过代码来控制窗口的阴影效果。
总的来说,这句话是在说明QMdiArea的窗口标志支持和样式的关系,以及当某些标志不被样式支持时的处理方式。
在QMdiArea中,子窗口是QMdiSubWindow的实例。可以使用addSubWindow()将它们添加到MDI区域中。通常,会将一个QWidget作为内部小部件传递给此函数,但也可以直接传递一个QMdiSubWindow。此类继承自QWidget,您可以像处理普通顶级窗口一样使用相同的API进行编程。QMdiSubWindow还具有特定于MDI窗口的行为。有关更多详细信息,请参阅QMdiSubWindow类描述。
当子窗口获得键盘焦点或调用setFocus()时,它将变为活动窗口。用户可以通过通常的方法来激活窗口。当活动窗口更改时,MDI区域会发出subWindowActivated()信号,activeSubWindow()函数返回活动子窗口。
方便的函数subWindowList()返回所有子窗口的列表。例如,这些信息可以用于弹出菜单中包含窗口列表的情况。
子窗口按当前的窗口顺序进行排序。这用于subWindowList()以及activateNextSubWindow()和activatePreviousSubWindow(),也用于使用cascadeSubWindows()和tileSubWindows()级联或平铺窗口的情况。
QMdiArea提供了两种内置的子窗口布局策略:cascadeSubWindows()和tileSubWindows()。它们都是槽函数,并且可以轻松地连接到菜单项。

常用函数
以下是QMdiArea的常用函数、信号和槽的介绍:
成员函数
addSubWindow(QWidget *widget, Qt::WindowFlags flags = Qt::EmptyFlag):将一个QWidget添加为子窗口,并返回对应的QMdiSubWindow实例。removeSubWindow(QWidget *widget):从MDI区域中移除指定的子窗口。setActiveSubWindow(QMdiSubWindow *window):将指定的QMdiSubWindow设置为活动窗口。cascadeSubWindows():级联排列所有子窗口。tileSubWindows():平铺排列所有子窗口。subWindowList():返回包含所有子窗口的列表。activeSubWindow():返回当前活动的子窗口。
信号
subWindowActivated(QMdiSubWindow *window):当活动窗口发生变化时触发该信号,参数为当前活动的子窗口。subWindowActivated(QWidget *window):重载版本的subWindowActivated信号,参数为当前活动的子窗口的内部小部件。subWindowAboutToActivate(QMdiSubWindow *window):在即将激活子窗口之前触发该信号,参数为即将激活的子窗口。subWindowAboutToActivate(QWidget *window):重载版本的subWindowAboutToActivate信号,参数为即将激活的子窗口的内部小部件。
槽
cascadeSubWindows():槽函数,用于级联排列所有子窗口。tileSubWindows():槽函数,用于平铺排列所有子窗口。activateNextSubWindow():槽函数,激活下一个子窗口。activatePreviousSubWindow():槽函数,激活上一个子窗口。
除了上述函数、信号和槽之外,QMdiArea还具有一些其他函数用于设置和查询MDI区域的属性,例如设置背景颜色、设置视图模式、获取焦点子窗口等。可以参考Qt官方文档中的QMdiArea类文档以获取更详细的信息和完整的函数、信号和槽列表。
示例
以下示例,实现使用QMdiArea实现添加子窗口、删除子窗口、设置背景样式和平铺子窗口等功能:
#include <QtWidgets>int main(int argc, char *argv[])
{QApplication app(argc, argv);QMainWindow mainWindow;QMdiArea mdiArea;mainWindow.setCentralWidget(&mdiArea);// 设置背景样式mdiArea.setStyleSheet("background-color: #e9e9e9;");// 添加子窗口QWidget *subWindow1 = new QWidget;subWindow1->setWindowTitle("SubWindow 1");QLabel *label1 = new QLabel("This is SubWindow 1");label1->setAlignment(Qt::AlignCenter);QVBoxLayout *layout1 = new QVBoxLayout(subWindow1);layout1->addWidget(label1);mdiArea.addSubWindow(subWindow1);QWidget *subWindow2 = new QWidget;subWindow2->setWindowTitle("SubWindow 2");QLabel *label2 = new QLabel("This is SubWindow 2");label2->setAlignment(Qt::AlignCenter);QVBoxLayout *layout2 = new QVBoxLayout(subWindow2);layout2->addWidget(label2);mdiArea.addSubWindow(subWindow2);// 显示主窗口和子窗口mainWindow.show();// 平铺子窗口mdiArea.tileSubWindows();// 删除子窗口mdiArea.removeSubWindow(subWindow1);return app.exec();
}

在示例中,使用QMdiArea来创建一个MDI区域,并将其设置为主窗口的中心小部件。通过设置QMdiArea的样式表来定制背景样式。然后,使用QWidget来创建两个子窗口,并将它们添加到MDI区域中使用addSubWindow()函数。最后,调用tileSubWindows()函数来平铺子窗口,并在需要时使用removeSubWindow()函数来删除子窗口。
相关文章:
【Qt控件之QMdiArea】介绍及使用
描述 QMdiArea小部件提供了一个区域,用于显示MDI窗口。QMdiArea的功能类似于MDI窗口的窗口管理器。例如,它在自身上绘制和排列管理的窗口,可以按级联或平铺模式排列它们。通常,QMdiArea被用作QMainWindow的中心小部件,…...
Linux网络编程-极简HTTPUDP服务器
HTTP服务器 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <arpa/inet.h>#define PORT 8080 #define BUFFER_SIZE 2048void handle_client(int client_socket) {char buffer[BUFFER_SIZE];recv(cl…...
虚拟化、容器与Docker基本介绍以及安装部署(Docker 基本管理)
目录 1 Docker 概述 1.1 Docker与虚拟机的区别 1.2 容器在内核中支持2种重要技术 1.3 Docker核心概念 2 安装 Docker 2 Docker 镜像操作 2.1 搜索镜像 2.2 获取镜像 2.3 镜像加速下载 2.4 查看镜像信息 2.4.1 查看下载的镜像文件信息 2.4.2 查看下载到本地的所有镜像…...
Spring Boot中捕获异常错误信息并将其保存到数据库中
Spring Boot中捕获异常错误信息并将其保存到数据库中: 1.创建数据库表: 首先,您需要创建一个用于存储异常信息的数据库表。可以使用SQL脚本或者使用Hibernate实体类来创建表。以下是一个用于存储异常信息的表的示例SQL: CREATE TABLE erro…...
CNN记录】pytorch中flatten函数
pytorch原型 torch.flatten(input, start_dim0, end_dim- 1) 作用:将连续的维度范围展平维张量,一般写再某个nn后用于对输出处理, 参数: start_dim:开始的维度 end_dim:终止的维度,-1为最后…...
科普长文--网络安全拟态防御技术概念及应用
网络安全拟态防御技术概念 什么是网络安全拟态防御? 网络安全拟态防御技术是一种基于生物拟态原理,利用动态异构冗余构造、拟态伪装机制、测不准效应等手段,实现网络空间的主动防御和内生安全的技术。它是由中国工程院院士邬江兴首创的,旨在应对网络空间中的各种未知威胁…...
框架篇
一、Spring中的单例Bean是线程安全的吗 二、AOP相关面试题 三、Spring中的事务 四、Spring中事务失效的场景有 五、Spring bean的生命周期 六、Spring的循环依赖 七、SpringMVC的执行流程 八、自动配置原理 九、Spring框架常见的注解 十、Mybatis的执行流程 十一、MyBatis延迟加…...
Spring MVC(中)
1、Spring MVC视图: SpringMVC中的视图是View接口,视图的作用渲染数据,将模型Model中的数据展示给用户 SpringMVC视图的种类很多,默认有转发视图和重定向视图 当工程引入jstl的依赖,转发视图会自动转换为JstlView …...
10月19日,每日信息差
今天是2023年10月19日,以下是为您准备的17条信息差 第一、中国海洋石油遭南向资金净卖出2.38亿港元 第二、阅文集团侯晓楠:网文已经成为中国文化的一张全球名片。据了解,2022年以来,阅文已经在海外上线了自制的300多部动漫影视作…...
【VSCode】解决Open in browser无效
问题描述: 在VSCode中无论是点击右键,选择在默认浏览器中打开,还是按快捷键alt b都没有反应。 解决办法: 右击文件 --> 在文件资源管理器中显示 右击文件,选择属性 点击更改 选择用默认浏览器打开 最后 此时…...
测试饱和了? 大数据测试就业薪资和前景究竟怎么样?
随着不断有转行人员及毕业的大学生进入IT行业,在很多外界人眼里,这个行业的“缺口”已满,人员趋于饱和,但事实真的这样吗?还真没有。只是最基础的岗位需求在慢慢变少了,但行业中比较深的细分岗位࿰…...
DDR3笔记 频率配置
可参考 基于FPGA的DDR3设计(2)DDR3各时钟频率及带宽分析 - 知乎 (zhihu.com) DDR3的时钟频率配置要看两个手册: 1.DDR3器件的手册。 2.开发板芯片的手册 器件 器件名称:MT41J128M16JT-125:K tCK 1.25ns,就可以算出…...
数据结构与算法-(10)---列表(List)
🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…...
Node-Web模块的用法
题记 node.js中web模块的用法,以下是具体操作过程和代码。 Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,Web服务器的基本功能就是提供Web信息浏览服务。它只需支持HTTP协议、HTML文档格式及URL,与客户端的…...
基于TCP的RPC服务
TCP服务器上的RPC,通过创建一个服务器进程监听传入的tcp连接,并允许用户 通过此TCP流执行RPC命令 -module(tr_server). -author("chen"). -behaviour(gen_server).%% API -export([start_link/1,start_link/0,get_count/0,stop/0 ]).-export(…...
docker报错问题解决:Error Invalid or corrupt jarfile app.jar
文章目录 1.问题描述2.问题分析3.问题解决 1.问题描述 此时处在 /home/ubuntu/app 目录下,并且在该目录下有一个 jenkins-0.0.1-SNAPSHOT.jar。 我在 /home/ubuntu/app 目录下执行了 docker 容器运行命令: # 映射 8859 端口 # 容器名为 jenkins-demo #…...
Day 09 python学习笔记
函数 装饰器 回顾内容: 函数可以作为参数进行传递函数可以作为返回值函数名称可以像变量一样进行赋值操作 装饰器:要求记住结论 引入: def play_dnf():print("你好啊,我是赛利亚,今天又是美好的一天")def p…...
力扣labuladong——一刷day02
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、力扣876. 链表的中间结点二、力扣142. 环形链表 II三、力扣160. 相交链表四、力扣141. 环形链表 前言 一、力扣876. 链表的中间结点 /*** Definition for …...
【小白专用23.10.22 已验证】windows 11 安装PHP8.2 +Apache2.4
环境说明 windows:windows 11 x64apache: Apache/2.4.43php :php-8.2.11 一.php 1、PHP下载 PHP For Windows: Binaries and sources Releases 注意: 1.要下载Thread Safe,否则没有php8apache2_4.dll这个文件;如果使用Apache作为服务器…...
Nmap端口服务 之 CentOS7 关于启动Apache(httpd)服务、telnet服务、smtp服务、ftp服务、sftp服务
Nmap端口服务 之 CentOS7 关于启动Apache(httpd)服务、telnet服务、smtp服务、ftp服务、sftp服务 一. CentOS7 安装配置SFTP服务器详解一、SFTP简介二、关闭防火墙三、安装SSH服务在CentOS7中,sftp只是ssh的一部分,所以采用yum来安装ssh服务即可1. 查看是否已经安装了ssh2.…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...
车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...
【前端实战】如何让用户回到上次阅读的位置?
目录 【前端实战】如何让用户回到上次阅读的位置? 一、总体思路 1、核心目标 2、涉及到的技术 二、实现方案详解 1、基础方法:监听滚动,记录 scrollTop(不推荐) 2、Intersection Observer 插入探针元素 3、基…...
第21节 Node.js 多进程
Node.js本身是以单线程的模式运行的,但它使用的是事件驱动来处理并发,这样有助于我们在多核 cpu 的系统上创建多个子进程,从而提高性能。 每个子进程总是带有三个流对象:child.stdin, child.stdout和child.stderr。他们可能会共享…...
【Ragflow】26.RagflowPlus(v0.4.0):完善解析逻辑/文档撰写模式全新升级
概述 在历经半个月的间歇性开发后,RagflowPlus再次迎来一轮升级,正式发布v0.4.0。 开源地址:https://github.com/zstar1003/ragflow-plus 更新方法 下载仓库最新代码: git clone https://github.com/zstar1003/ragflow-plus.…...
