当前位置: 首页 > news >正文

【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小部件提供了一个区域&#xff0c;用于显示MDI窗口。QMdiArea的功能类似于MDI窗口的窗口管理器。例如&#xff0c;它在自身上绘制和排列管理的窗口&#xff0c;可以按级联或平铺模式排列它们。通常&#xff0c;QMdiArea被用作QMainWindow的中心小部件&#xff0c…...

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.创建数据库表&#xff1a; 首先&#xff0c;您需要创建一个用于存储异常信息的数据库表。可以使用SQL脚本或者使用Hibernate实体类来创建表。以下是一个用于存储异常信息的表的示例SQL&#xff1a; CREATE TABLE erro…...

CNN记录】pytorch中flatten函数

pytorch原型 torch.flatten(input, start_dim0, end_dim- 1) 作用&#xff1a;将连续的维度范围展平维张量&#xff0c;一般写再某个nn后用于对输出处理&#xff0c; 参数&#xff1a; start_dim&#xff1a;开始的维度 end_dim&#xff1a;终止的维度&#xff0c;-1为最后…...

科普长文--网络安全拟态防御技术概念及应用

网络安全拟态防御技术概念 什么是网络安全拟态防御? 网络安全拟态防御技术是一种基于生物拟态原理,利用动态异构冗余构造、拟态伪装机制、测不准效应等手段,实现网络空间的主动防御和内生安全的技术。它是由中国工程院院士邬江兴首创的,旨在应对网络空间中的各种未知威胁…...

框架篇

一、Spring中的单例Bean是线程安全的吗 二、AOP相关面试题 三、Spring中的事务 四、Spring中事务失效的场景有 五、Spring bean的生命周期 六、Spring的循环依赖 七、SpringMVC的执行流程 八、自动配置原理 九、Spring框架常见的注解 十、Mybatis的执行流程 十一、MyBatis延迟加…...

Spring MVC(中)

1、Spring MVC视图&#xff1a; SpringMVC中的视图是View接口&#xff0c;视图的作用渲染数据&#xff0c;将模型Model中的数据展示给用户 SpringMVC视图的种类很多&#xff0c;默认有转发视图和重定向视图 当工程引入jstl的依赖&#xff0c;转发视图会自动转换为JstlView …...

10月19日,每日信息差

今天是2023年10月19日&#xff0c;以下是为您准备的17条信息差 第一、中国海洋石油遭南向资金净卖出2.38亿港元 第二、阅文集团侯晓楠&#xff1a;网文已经成为中国文化的一张全球名片。据了解&#xff0c;2022年以来&#xff0c;阅文已经在海外上线了自制的300多部动漫影视作…...

【VSCode】解决Open in browser无效

问题描述&#xff1a; 在VSCode中无论是点击右键&#xff0c;选择在默认浏览器中打开&#xff0c;还是按快捷键alt b都没有反应。 解决办法&#xff1a; 右击文件 --> 在文件资源管理器中显示 右击文件&#xff0c;选择属性 点击更改 选择用默认浏览器打开 最后 此时…...

测试饱和了? 大数据测试就业薪资和前景究竟怎么样?

随着不断有转行人员及毕业的大学生进入IT行业&#xff0c;在很多外界人眼里&#xff0c;这个行业的“缺口”已满&#xff0c;人员趋于饱和&#xff0c;但事实真的这样吗&#xff1f;还真没有。只是最基础的岗位需求在慢慢变少了&#xff0c;但行业中比较深的细分岗位&#xff0…...

DDR3笔记 频率配置

可参考 基于FPGA的DDR3设计&#xff08;2&#xff09;DDR3各时钟频率及带宽分析 - 知乎 (zhihu.com) DDR3的时钟频率配置要看两个手册&#xff1a; 1.DDR3器件的手册。 2.开发板芯片的手册 器件 器件名称&#xff1a;MT41J128M16JT-125:K tCK 1.25ns&#xff0c;就可以算出…...

数据结构与算法-(10)---列表(List)

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…...

Node-Web模块的用法

题记 node.js中web模块的用法&#xff0c;以下是具体操作过程和代码。 Web服务器一般指网站服务器&#xff0c;是指驻留于因特网上某种类型计算机的程序&#xff0c;Web服务器的基本功能就是提供Web信息浏览服务。它只需支持HTTP协议、HTML文档格式及URL&#xff0c;与客户端的…...

基于TCP的RPC服务

TCP服务器上的RPC&#xff0c;通过创建一个服务器进程监听传入的tcp连接&#xff0c;并允许用户 通过此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 目录下&#xff0c;并且在该目录下有一个 jenkins-0.0.1-SNAPSHOT.jar。 我在 /home/ubuntu/app 目录下执行了 docker 容器运行命令&#xff1a; # 映射 8859 端口 # 容器名为 jenkins-demo #…...

Day 09 python学习笔记

函数 装饰器 回顾内容&#xff1a; 函数可以作为参数进行传递函数可以作为返回值函数名称可以像变量一样进行赋值操作 装饰器&#xff1a;要求记住结论 引入&#xff1a; def play_dnf():print("你好啊&#xff0c;我是赛利亚&#xff0c;今天又是美好的一天")def p…...

力扣labuladong——一刷day02

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣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 注意&#xff1a; 1.要下载Thread Safe&#xff0c;否则没有php8apache2_4.dll这个文件&#xff1b;如果使用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.…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...