详解Qt 之QMdiArea 和 QMdiSubWindow

文章目录

  • 前言
    • QMdiArea
      • 概念
      • 作用
      • 为什么需要 QMdiArea
      • QMdiArea 的主要函数和成员
        • 函数列表
    • QMdiSubWindow
      • 概念
      • 作用
      • 为什么需要 QMdiSubWindow
      • QMdiSubWindow 的主要函数和成员
        • 函数列表
      • 示例代码
    • 更多用法...
  • 总结


前言

在复杂的应用程序中,尤其是那些需要同时管理多个子窗口的应用程序中,使用多文档界面(MDI)是一个非常有效的解决方案。Qt 提供了 QMdiAreaQMdiSubWindow 类来实现这种多文档界面。本文将详细介绍这两个类的概念、作用及其主要函数,并提供一个示例代码来帮助理解其使用方法。


QMdiArea

概念

QMdiArea 是一个容器小部件,用于管理多个子窗口(即 QMdiSubWindow)。它提供了一个工作区,允许用户在其中打开、关闭、移动和调整子窗口的大小。QMdiArea 支持多种布局模式,例如平铺和层叠。

作用

QMdiArea 的主要作用包括:

  1. 管理子窗口:提供一个容器来管理多个子窗口。
  2. 布局模式:支持平铺和层叠等布局模式,方便用户组织子窗口。
  3. 窗口管理功能:提供窗口关闭、最大化、最小化等功能。

为什么需要 QMdiArea

在需要同时管理和操作多个子窗口的应用程序中(例如图像编辑器、文本编辑器等),QMdiArea 提供了一种有效的方式来组织和管理这些子窗口,提升了用户体验和应用程序的可用性。

QMdiArea 的主要函数和成员

函数列表
  • *QMdiArea(QWidget parent = nullptr)

    作用:构造一个新的 QMdiArea 对象。

    参数

    • parent:父小部件(默认为 nullptr)。

    返回值:无。

  • *void addSubWindow(QWidget widget, Qt::WindowFlags flags = 0)

    作用:向 QMdiArea 中添加一个子窗口。

    参数

    • widget:要添加的子窗口。
    • flags:窗口标志(默认为 0)。

    返回值:无。

  • void tileSubWindows()

    作用:平铺所有子窗口。

    参数:无。

    返回值:无。

  • void cascadeSubWindows()

    作用:层叠所有子窗口。

    参数:无。

    返回值:无。

  • QMdiSubWindow activeSubWindow() const*

    作用:返回当前活动的子窗口。

    参数:无。

    返回值:当前活动的子窗口。

  • QList<QMdiSubWindow> subWindowList(QMdiArea::WindowOrder order = CreationOrder) const*

    作用:返回所有子窗口的列表。

    参数

    • order:子窗口的排列顺序(默认为 CreationOrder)。

    返回值:子窗口列表。

QMdiSubWindow

概念

QMdiSubWindowQMdiArea 中的子窗口,它是一个特殊类型的窗口,设计用于在 QMdiArea 中管理。QMdiSubWindow 提供了标准窗口的所有功能,同时允许在 QMdiArea 中进行管理和操作。

作用

QMdiSubWindow 的主要作用包括:

  1. 窗口管理:作为 QMdiArea 的子窗口,提供标准窗口的所有功能。
  2. 布局管理:允许用户在 QMdiArea 中移动、调整大小和关闭窗口。

为什么需要 QMdiSubWindow

在多文档界面中,需要一种特殊的窗口类型来与 QMdiArea 协同工作,QMdiSubWindow 正是这种窗口类型。它提供了标准窗口的功能,同时允许在 QMdiArea 中进行布局和管理。

QMdiSubWindow 的主要函数和成员

函数列表
  • *QMdiSubWindow(QWidget parent = nullptr, Qt::WindowFlags flags = 0)

    作用:构造一个新的 QMdiSubWindow 对象。

    参数

    • parent:父小部件(默认为 nullptr)。
    • flags:窗口标志(默认为 0)。

    返回值:无。

  • *void setWidget(QWidget widget)

    作用:设置子窗口的主小部件。

    参数

    • widget:要设置为主小部件的小部件。

    返回值:无。

  • QWidget widget() const*

    作用:返回子窗口的主小部件。

    参数:无。

    返回值:主小部件。

  • void setWindowState(Qt::WindowStates state)

    作用:设置子窗口的状态(例如最大化、最小化)。

    参数

    • state:窗口状态。

    返回值:无。

  • Qt::WindowStates windowState() const

    作用:返回子窗口的当前状态。

    参数:无。

    返回值:当前窗口状态。

示例代码

以下是一个简单的示例代码,展示如何使用 QMdiAreaQMdiSubWindow

#include <QApplication>
#include <QMainWindow>
#include <QMdiArea>
#include <QMdiSubWindow>
#include <QTextEdit>int main(int argc, char *argv[]) {QApplication app(argc, argv);QMainWindow mainWindow;QMdiArea *mdiArea = new QMdiArea;mainWindow.setCentralWidget(mdiArea);QTextEdit *textEdit1 = new QTextEdit;QMdiSubWindow *subWindow1 = mdiArea->addSubWindow(textEdit1);subWindow1->setWindowTitle("Document 1");subWindow1->show();QTextEdit *textEdit2 = new QTextEdit;QMdiSubWindow *subWindow2 = mdiArea->addSubWindow(textEdit2);subWindow2->setWindowTitle("Document 2");subWindow2->show();mainWindow.setWindowTitle("QMdiArea Example");mainWindow.resize(800, 600);mainWindow.show();return app.exec();
}

在这个示例中,我们创建了一个包含两个 QMdiSubWindowQMdiArea,并将其设置为 QMainWindow 的中央部件。用户可以在运行时移动、调整和管理这些子窗口。

更多用法…

在这里插入图片描述


总结

QMdiAreaQMdiSubWindow 是 Qt 提供的用于实现多文档界面的关键类。QMdiArea 作为容器管理多个子窗口,QMdiSubWindow 作为子窗口提供标准窗口的所有功能。这些类提供了灵活的布局管理功能,适用于需要同时管理多个子窗口的应用程序。理解和掌握 QMdiAreaQMdiSubWindow 的使用方法,可以显著提升用户界面的灵活性和用户体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3280862.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

RabbitMQ快速入门(MQ的概念、安装RabbitMQ、在 SpringBoot 项目中集成 RabbitMQ )

文章目录 1. 补充知识&#xff1a;同步通讯和异步通讯1.1 同步通讯1.2 异步通讯 2. 同步调用的缺点2.1 业务耦合2.2 性能较差2.3 级联失败 3. 什么情况下使用同步调用4. 异步调用5. 异步调用的优点和缺点5.1 异步调用的优点5.1.1 解除耦合&#xff0c;拓展性强5.1.2 无需等待&a…

SQL必知必会

SQL必知必会 一些SQL知识&#xff0c;出自极客时间陈旸老师《SQL必知必会》 https://time.geekbang.org/column/intro/100029501 基础 视图 视图作为一张虚拟表&#xff0c;帮我们封装了底层与数据表的接口。它相当于是一张表或多张表的数据结果集。视图的这一特点&#x…

DMB,DSB,ISB三个指令区别

此部分说明三个指令的具体区别&#xff08;在指令流水线上说明&#xff09;&#xff0c;这三个指令主要目的在于确保程序在多处理器环境下的稳定性和一致性&#xff0c;避免由于指令乱序和内存操作重排引起的不可预测行为 一个简化的流水线&#xff0c;包含以下阶段&#xff1…

【git】git常用命令提交规范

Git 是程序员工作中不可或缺的版本控制工具&#xff0c;以下是一些优化后的常用 Git 命令列表&#xff0c;旨在帮助你更高效地使用 Git 进行版本控制。 基础操作 拉取代码 git clone xxx.git创建分支 git branch dev切换分支 git checkout dev # 或者 git switch dev创建并切换…

Mirror学习笔记(一) 简介

文章目录 一、常规学习&#xff1a;Mirror核心功能有服务器和主机 二、时间戳批处理时间戳 三、TCP和UDP四、CCU(同时在线人数)五、SyncDirection(同步方向)六、RTT&#xff08;往返时间&#xff09;七、Connection Quality&#xff08;连接质量&#xff09;八、Lag Compensati…

Android mLruProcesses的分布结构

AMS中的进程管理 final ArrayList<ProcessRecord> mLruProcesses new ArrayList<ProcessRecord>(); 在AMS的内部属性中使用mLruProcesses集合保存所有的进程信息&#xff0c;AMS将所有进程按照优先级从低到高的顺序保存着对应的ProcessRecord信息&#xff0c;即排…

25、Python之面向对象:私有属性是掩耳盗铃还是恰到好处

引言 声明&#xff0c;今天的文章中没有一行Python代码&#xff0c;更多的是对编程语言设计理念的思考。 上一篇文章中介绍了关于Python面向对象封装特性的私有属性的相关内容&#xff0c;提到了Python中关于私有属性的实现是通过“名称混淆”的方式来实现的&#xff0c;我们…

【Python体验】第五天:目录搜索、数据爬虫(评论区里写作业)

文章目录 目录搜索 os、shutil库数据爬虫 request、re作业&#xff1a;爬取案例的top250电影的关键信息&#xff08;名称、类型、日期&#xff09;&#xff0c;并保存在表格中 目录搜索 os、shutil库 os 模块提供了非常丰富的方法用来处理文件和目录。 os.listdir(path)&#x…

连环画:80、90后的童年记忆与副业项目的AI新玩法

在那个纯真的年代&#xff0c;当80、90后的孩子们还在为学业忙碌之余&#xff0c;一种名为连环画的读物成为了他们心中难以磨灭的记忆。 这些由一幅幅精美插图串联起来的故事&#xff0c;不仅满足了他们对知识的渴望&#xff0c;更在无形中丰富了他们的想象力和审美能力。在那…

智云-一个抓取web流量的轻量级蜜罐

智云-一个抓取web流量的轻量级蜜罐 安装环境要求 apache php7.4 mysql8 github地址 https://github.com/xiaoxiaoranxxx/POT-ZHIYUN 系统演示

Xilinx FPGA:vivado SPI实现FLASH通信

一、实验要求 要求使用SPI协议实现对flash芯片的页编程、读操作、页擦除等功能。 二、模块划分 大概的时序图&#xff1a; 三、程序设计 &#xff08;1&#xff09;接收端模块 timescale 1ns / 1ps module uart_rx(input sys_clk ,input …

ShardingSphere实战(2)- 水平分表

项目环境&#xff1a; JDK11 MySQL 8.0.30 Springboot 2.7.4 Mybatis ShardingSphere HikariCP 连接池 一、Maven 依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><versi…

C++ | string

前言 本篇博客讲解c中的string类的使用(常用接口) &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;C_普通young man的博客-CSDN博客 ⏩ 本人giee:普通小青年 (pu-tong-young-man) - Gitee.com 若有问题 评论区见&#x1f4dd; &#x1f389…

Redis持久化之RDB和AOF详解

持久化是确保 Redis 数据在服务器重启或崩溃时不丢失的关键功能。由于 Redis 是基于内存的数据库&#xff0c;如果不进行持久化&#xff0c;所有数据都存在于内存中&#xff0c;一旦服务器进程退出&#xff0c;内存中的数据就会丢失。持久化机制可以将 Redis 的数据库状态保存到…

C# Unity 面向对象补全计划 之 访问修饰符

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 本系列旨在通过补全学习之后&#xff0c;给出任意类图都能实现并做到逻辑上严丝合缝

vue3项目结构梳理:

总览 1.vscode文件&#xff1a; 通常用于存放Visual Studio Code编辑器的插件的配置 2.node_moudles文件夹&#xff1a; 这个文件夹包含了项目所需的所有npm依赖包。&#xff08;需要在根目录下执行npm i命令安装这个文件夹&#xff09; 或者在项目根目录&#xff08;packa…

postgresql密码复杂度验证和有效期

前言 为了数据库安全以及应对等保测评等要求&#xff0c;我们需要设置密码复杂度。我们通过passwordcheck模块实现复杂度检测功能。 启用密码复杂度验证 找到自己安装pg库的配置文件目录&#xff0c;修改postgresql.conf vim postgresql.conf修改如下内容 shared_preload_…

中国十大顶级哲学家,全球公认的伟大思想家颜廷利:人类为何拥有臀部

人类为何拥有臀部&#xff1f;若众生皆无此部位&#xff0c;又如何能寻得一处真正属于自己的“座位”&#xff1f;在博大精深的中国传统文化中&#xff0c;汉字“座”与“坐”均蕴含“土”字元素。在易经的智慧里&#xff0c;作为五行之一的“土”&#xff0c;象征着人类社会的…

MySQL8--用户与权限管理

原文网址&#xff1a;MySQL8--用户与权限管理_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍MySQL8的用户与权限的管理&#xff0c;包括&#xff1a;用户的创建与删除、授权与撤销权限等。 为什么要管理用户与权限&#xff1f; 目的是保证数据库的安全性&#xff0c;只授…

Unity Shader unity文档学习笔记(十八):unity雾效原理

看很多文章用近平面远平面组成矩阵后转到裁剪空间下通过Z值来解&#xff0c;实际更简单的方式可以直接通过判断距离来实现 FogMgr控制远近面 public class TestFog : MonoBehaviour {public int startDis 0;public int endDis 50;public Vector4 fogParam;public void Awak…