【Qt】主窗口

news/2025/1/8 17:47:14/

目录

Qt主窗口的构成

菜单栏

 创建菜单栏

 向菜单栏中添加菜单

向菜单中添加菜单项

工具栏

创建工具栏

工具栏的停靠位置

工具栏的浮动属性

工具栏的移动属性

状态栏

创建状态栏

向状态栏中添加的信息

浮动窗口

浮动窗口的停靠位置

向浮动窗口中添加控件


Qt主窗口的构成

Qt主窗口是通过QMainWindow类的实现的。QMainWindow是为用户提供主窗口程序的类,继承自QWidget,QMainWindow包括菜单栏(只能有一个)、工具栏(可以有多个)、浮动窗口(可以有多个)、一个状态栏(只能有一个)、中心部件。如下图所示:

可以看到,菜单栏在窗口标题(红色区域)的下方。工具栏(粉色区域)上下左右四个方向都可以有,浮动窗口(绿色区域)上下左右四个方向都可以有,中心部件(橙色区域)在中间区域,状态栏(红色区域)在最下方。

菜单栏:QMenuBar

工具栏:QToolBar

浮动窗口:QDockWidget

中心控件:各种控件

状态栏:QStatusBar

菜单栏

Qt中的菜单栏是由QMenuBar这个类实现的。一个主窗口只能有一个菜单栏,位于主窗口的标题下方。

菜单栏中包含了菜单,菜单中包含了菜单项。

菜单栏:QMenuBar

菜单:QMenu

菜单项:QAction

Qt Creator中的界面为例:

 创建菜单栏

直接在堆上创建:

通过QMainWindow提供的QMenuBar* menuBar() const函数:

对于方法2的menuBar()函数:如果主窗口中已存在菜单栏,则该函数返回已存在的菜单栏;如果主窗口不存在菜单栏,创建一个菜单栏并返回创建的菜单栏。

注意:推荐方法2来创建菜单栏,因为如果主窗口已存在菜单栏,则直接在堆上生成菜单栏,那么就会导致原有的菜单栏无法释放,导致内存泄露。

 向菜单栏中添加菜单

可以为菜单栏中的菜单设置快捷键、菜单之间的分隔符

注意:菜单栏中的菜单如果设置了Icon则该菜单的文本会被Icon覆盖,工具栏也是如此。

向菜单中添加菜单项

向菜单中添加菜单项之间的分割符:

注意:也可以在菜单中创建子菜单。

工具栏

工具栏是可以移动的,也可以悬停在主窗口的任何地方。

创建工具栏

注意:菜单和工具栏中可以添加同一个菜单项点击触发同一个菜单项/快捷项,对应的菜单项/快捷项会发出QAction::triggered信号。

工具栏的停靠位置

1.在向主窗口中添加工具栏的时设置停靠位置(设置的这个停靠位置是指程序启动时,工具栏默认的停靠位置)

Qt::ToolBarArea是一个枚举类型,area有下面取值:

2.通过QToolBar提供的setAllowedAreas方法(该方法设置的停靠区域是工具栏只允许停靠的区域)

可以使用按位或|来设置多个允许工具栏停靠的位置。

工具栏的浮动属性

QToolBar中提供了setFloatable方法来设置工具栏是否可以浮动。

工具栏的移动属性

QToolBar中提供了setMovable方法,设置工具栏是否可被移动。

状态栏

状态栏是应用程序中输出简要信息的区域,一个窗口中最多只能有一个状态栏。

状态栏中显示的信息类型有这几种:

实时信息:如当前程序状态。

永久信息:如程序版本号,机构名称。

进度信息:如进度条信息。

创建状态栏

和创建菜单栏有一样的情况就是直接在堆上创建可能会出现内存泄露,因此使用QMainWindow提供的创建状态栏的方法:

向状态栏中添加的信息

1.实时信息

参数timeout的单位是ms,使用该函数在在状态栏种显示的信息会经过一段时间后消失。

2.永久信息

参数stretch是拉伸系数。

addPermanentWidget方法是按从右往左的添加控件。

addWifget方法是从左往右添加控件。

向状态栏中添加一个标签和一个进度条:

浮动窗口

qt中浮动窗口也叫做铆接部件,通过QDockWidget类实现浮动功能。

浮动窗口的停靠位置

和设置工具栏的停靠位置思路一样。

1.在将浮动窗口添加到主窗口中设置该浮动窗口默认的位置

 

2.通过setAllowedAreas方法设置浮动窗口允许停靠的位置

和工具栏的使用一样。

向浮动窗口中添加控件

注意:向浮动窗口中添加控件必须要先创建一个QWidget,然后把要添加到浮动窗口中的控件添加到该QWidget中,在将该类设置到浮动窗口中。

向浮动窗口中添加一个水平布局管理控件,该布局控件中有一个按钮控件和一个标签控件。

注意:setWidget方法是向浮动窗口中添加QWidget,而addWidget方法是向布局管理控件中添加控件,set表示只能设置一个,add表示可以添加多个。


http://www.ppmy.cn/news/1561608.html

相关文章

unity学习14:unity里的C#脚本的几个基本生命周期方法, 脚本次序order等

目录 1 初始的C# 脚本 1.1 初始的C# 脚本 1.2 创建时2个默认的方法 2 常用的几个生命周期方法 2.1 脚本的生命周期 2.1.1 其中FixedUpdate 方法 的时间间隔,是在这设置的 2.2 c#的基本语法别搞混 2.2.1 基本的语法 2.2.2 内置的方法名,要求更严…

今日头条ip属地根据什么显示?不准确怎么办

在今日头条这样的社交媒体平台上,用户的IP属地信息对于维护网络环境的健康与秩序至关重要。然而,不少用户发现自己的IP属地显示与实际位置不符,这引发了广泛的关注和讨论。本文将深入探讨今日头条IP属地的显示依据,并提供解决IP属…

Java后端常用的4种请求方式(通俗易懂)

文章目录 前言通用接口类(ControllerDemo)通用实体类(UserEntity)通用响应类(HttpClientResult)成功截图(先启动项目,然后右键执行main方法) HttpClientHttpClient 的主要类代码案例导入依赖工具类(HttpClientUtil)测试类 HttpURLConnection简介调用步骤代码案例导入依赖工具类…

Python多分类Logistic回归详解与实践

在机器学习中,Logistic回归是一种基本但非常有效的分类算法。它不仅可以用于二分类问题,还可以扩展应用于多分类问题。本文将详细介绍如何使用Python实现一个多分类的Logistic回归模型,并给出详细的代码示例。 一、Logistic回归简介 Logist…

亚矩阵云手机:跨境出海直播的全方位利器

在跨境出海直播领域,亚矩阵云手机扮演着举足轻重的角色,为跨境业务中面临的诸多挑战提供了行之有效的解决方案。以下将对其作用与解决方案展开详细阐述。 一、亚矩阵云手机在跨境出海直播中的关键作用 (一)突破地域限制&#xff0…

英伟达 RTX 5090 显卡赋能医疗大模型:变革、挑战与展望

一、英伟达 RTX 5090 与 RTX 4090 技术参数对比 1.1 核心架构与制程工艺 在探讨英伟达 RTX 4090 与 RTX 5090 的差异时,核心架构与制程工艺无疑是最为关键的基础要素,它们从根本上决定了两款显卡的性能上限与应用潜力。 1.1.1 核心架构差异 RTX 4090…

望获实时Linux系统与大语言模型深度融合,开创实时智能无限可能!

大语言模型的崛起为智能化应用开辟了新的可能性。借助深度学习技术,这些模型能够理解和生成自然语言,处理复杂的文本和语义信息。这使得它们在诸如人机问答、内容生成和数据分析等领域展现出巨大的潜力。在实时控制领域,大语言模型能够显著提…

conda快速安装并配置pycharm

1、镜像下载地址 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/2、安装完成后配置环境变量 安装记得all users 配置环境 3、配置镜像 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https…