当前位置: 首页 > 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.…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...