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

QT窗口相关控件及其属性

widget,PushButton,lineEdit等都是基于QWidget延展出来的

并不是完整的窗口,而是作为窗口的一部分

真正的窗口是QMainWindow

菜单栏

Qt中的菜单栏是通过QMenuBar这个类来实现的,一个主窗口最多只有一个菜单栏,位于主窗口顶部,主窗口标题栏下面。

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

如:

例:

创建QMainWindow文件

QMainWindow的ui文件中的对象树和QWidget文件对象树不同

自带中央控件,菜单栏,状态栏

在左上角输入是创建新的菜单QMenu

在已经创建号的菜单进行输入是创建菜单项QAction

但是发现在创建菜单项时无法输入中文,可以在其它位置输入中文后粘贴到此处进行创建,可以在对象树进行菜单,菜单项的移除

使用代码创建菜单结构

实现菜单项的槽函数

但是此时点击菜单项无反应,可以通过triggered---触发来实现

当点击QAction时会触发一个信号---triggered触发

通过设置triggered的槽函数来实现点击QAction时,执行对应操作

在MinWindow.h文件中声明槽函数

在cpp文件中进行connect

进行槽函数的定义

在次运行程序后,点击文件菜单下的添加文件菜单项可以在输出窗口进行debug输出

还可以给菜单,菜单项添加快捷键

设置快捷键搭配alt使用

实现菜单和菜单项的快捷键

在创建菜单和菜单项时,给其内文本加上(&字母),就可以通过alt+字母进行快捷访问,也可以通过创建QShortCut对象来实现快捷键

例:

就可以通过长按alt,按f,按n在输入框输出debug内容

添加子菜单

菜单栏--->菜单--->子菜单---->菜单项

通过QMenu提过的addMenu来在菜单内添加菜单,实现子菜单

例:

通过将鼠标悬停在箭头上展开子菜单

添加分隔线

分割线用于对菜单里的菜单项进行分组---通过QMenu提供的addSeparator实现

例:

给菜单添加图标

使用QIcon类,通过qrc机制引入图片

导入图片后通过QAction的setIcon进行图片设置

如果给QMenu设置图标,那么就会将文本遮盖

如:

注意事项---MenuBar的内存泄漏

在通过代码创建菜单栏时,是通过

方式创建

但是若是在创建项目时,没有勾选自动生成ui文件程序才正常运行

如果勾选了自动生成ui文件,则会造成内存泄漏,因为Qt自动生成了一个QMenuBar---在创建QMainWindow文件时自动生成一个menubar和statuebar

在代码中创建新的menubar设置进mainwindow时,导致旧的menubar脱离Qt的对象树,在后续程序结束时无法自动释放

解决方法:如果menubar已经存在就获取,如果不存在就创建

工具栏

QToolBar----工具栏是应用程序中集成各种功能事项快捷键使用的一个区域,可以有多个,也可以没有----默认没有,需要手动创建。可以将工具栏进行手动移动位置

添加工具栏使用的是addToolbar,而不是set,而菜单栏的添加使用的是setMenubar,因为菜单栏只能有一个,而工具栏可以有多个

例:

给工具栏添加菜单项

实现工具栏中菜单项

在头文件声明槽函数

在构造函数进行信号槽绑定

实现槽函数

点击工具栏对应选项实现debug输出

实现工具栏中的菜单项的图标

通过qrc机制引入图片

将图标设置进工具栏中的菜单项

文本被图标覆盖掉

但是若将鼠标停留在工具上,会给出在创建菜单项时设置的文本作为提示

也可以手动设置tooltip

QAction重复释放问题

QAction既可以添加到QMenu,同时也可以添加到QToolBar,当一个QAction同时出现在QMenu和QToolBar时,若在其中一个被删除,不会造成重复释放,释放一个QAction内存后,不会在另一个菜单被释放

创建多个工具栏

基础效果

默认情况下,两个工具栏都在对顶层的同一行

可以通过拖拽工具栏头部的点进行移动工具栏

MainWindow提供addToolBar在添加工具栏时设置工具栏初始位置

相关选项

选项

说明

Qt::LeftToolBarArea

停靠在左侧

Qt::RightToolBarArea

停靠在右侧

Qt::TopToolBarArea

停靠在顶部

Qt::BottomToolBarArea

停靠在底部

Qt::AllToolBarAreas

四个位置都能停靠

如:

QToolBar还提供setAllowedAreas来设置运行停靠的位置

设置后就只能停靠在左右,若拖动到上下边缘则会悬浮

也可以设置ToolBar不允许浮动---setFloatable(bool)

设置后就不能悬浮在窗口中,只能停靠在边缘

还可以设置不允许移动---setMoveabel(bool)

就无法拖动ToolBar

状态栏

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

在Qt中状态栏是通过QStatusBar类实现

在状态栏中可以显示的消息类型有:

实时消息:如当前程序状态,鼠标位置

永久消息:如程序版本号

进度消息:如进度条提示,版本消息

同样,在勾选了自动生成ui文件的情况下,默认就生成了一个statusbar,在代码进行使用时直接获取,如果没有才进行创建,避免内存泄漏

例:

设置临时消息----showMessage()

可以在添加临时消息时设置显示时间,单位为毫秒

当达到时间后,临时消息会自动消失

在状态栏中添加子控件

若存在showMessage则不会显示子控件,因为showMessage会将子控件覆盖

也可以添加多个子控件

在状态栏中添加状态条

状态条---QProgressBar

浮动窗口

浮动窗口---QDockWidget

通过addDockWidget将浮动窗口添加到当前窗口内,第一个参数为添加到当前窗口的位置

如:

Qt::LeftDockWidgetArea   放到左侧

Qt::RightDockWidgetArea  放到右侧

Qt::TopDockWidgetArea    放到顶部

Qt::BottomDockWidgetArea 放到底部

双击浮动窗口进行展开

给浮动窗口添加控件

不能直接将控件添加到浮动窗口中,而是要先创建一个QWidget,设置一个布局管理器,将要添加的控件,放到布局管理器中,再将QWidget设置到dockWidget中,否则就只能项dockWidget中添加一个控件

例:

同样可以对浮动窗口可以停靠的位置进行设置

相关文章:

  • 制作一款打飞机游戏23:编辑器ui
  • 【Nacos-安全与限流机制健全06 】
  • 存储新势力:助力DeepSeek一体机
  • 【专题刷题】二分查找(二)
  • 【Luogu】动态规划四
  • 2025时间序列都有哪些创新点可做——总结篇
  • 常用第三方库:flutter_boost混合开发
  • Shell脚本-while循环语法结构
  • MySQL数据库(13) 用户管理
  • kubernetes环境手动部署 Prometheus 监控系统安装文档
  • 差分优化效率
  • 研发内控新规下的合规之道:维拉工时助力企业穿越IPO审查雷区
  • 深入浅出 MVVM:理解现代前端开发的核心架构模式
  • 贪心算法~~
  • Sand AI 开源 MAGI-1 视频生成模型,近屿智能带你领略无限扩展的 AI 视界
  • 《深入理解计算机系统》阅读笔记之第二章 信息的表示和处理
  • Apipost免费版、企业版和私有化部署详解
  • 保安员证考试的理论知识有哪些重点?
  • 计算机基础 原码反码补码问题
  • 一篇速成Linux 设置位 S(SetUID)
  • 巴防长称中俄可参与克什米尔恐袭事件国际调查,外交部回应
  • 央行副行长谈美债和美元波动:单一市场、单一资产的变动,对外储影响总体有限
  • 李勇已任内蒙古乌兰察布市委副书记,曾在中央编办任职
  • 大学2025丨专访南开人工智能学院院长赵新:人工智能未来会变成通识类课程
  • 2025上海浪琴环球马术冠军赛开赛在即,首批赛马今晨抵沪
  • “一对一讨论诸多事宜”,泽连斯基披露此次特泽会更多细节