【Qt】主窗口

目录

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**表示可以添加多个。

相关推荐
非凡自我_成功31 分钟前
关于C语言初步的一些基础知识整理(2)
c语言·开发语言
莲动渔舟37 分钟前
Python自学 - 解析入门(一种特殊循环)
开发语言·python
码农小菲43 分钟前
vue3-dom-diff算法
开发语言·javascript·算法
仰望星空的尘埃1 小时前
线上go内存泄漏分析实战
开发语言·后端·golang·web服务·内存泄漏分析
摸鱼也很难1 小时前
php反序列化进阶 && CVE (__wakeup的绕过)&&属性类型特征 && 字符串的逃逸
开发语言·php·buuctf·php反序列化
神的孩子都在歌唱1 小时前
你已经分清JAVA中JVM、JDK与JRE的作用和关系了吗?
java·开发语言·jvm
xing.yu.CTF2 小时前
PHP零基础入门笔记
开发语言·php
恸流失3 小时前
12.异常处理
开发语言·python
jie188945758663 小时前
c++ ---STL介绍
开发语言·c++
lly2024063 小时前
Bootstrap4 徽章(Badges)
开发语言