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

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


http://www.kler.cn/a/466727.html

相关文章:

  • 使用Anaconda管理R语言环境,并使用Jupyter Notebook编写R语言
  • 一款基于大语言模型和 RAG 的开源知识库问答系统
  • java 搭建一个springboot3.4.1项目 JDK21
  • Linux(Ubuntu24.04)源码编译安装VTK7.1.1记录
  • IDEA工具使用介绍、IDEA常用设置以及如何集成Git版本控制工具
  • matlab simulink电池充放电模型
  • SSH多秘钥管理
  • ThinkPHP 8高效构建Web应用-控制器
  • df.groupby()方法使用在查询中用到的筛选条件函数对 数据进行分组
  • Python基于Gradio可视化部署机器学习应用
  • Redis--内存管理(过期删除和内存淘汰策略)
  • 机器学习笔记 - 单幅图像深度估计的最新技术
  • python对mongodb的增删查改
  • 半导体材料-制造材料
  • 分布式锁常见实现方案总结
  • 数据库进阶教程之DDL语句(万字详解)
  • 使用 Docker 查看 Elasticsearch 错误日志
  • OpenCV相机标定与3D重建(41)从 3D 物点和它们对应的 2D 图像点估算初始相机内参矩阵函数initCameraMatrix2D()的使用
  • MySQL8安装与卸载
  • 跳转至系统设置下某个子模块 - 鸿蒙 Harmony