当前位置: 首页 > 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中添加一个控件

例:

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

总结

Qt窗口程序所能包含的:

1.菜单栏(QMenuBar)->菜单(QMenu)->菜单项(QAction)

2.工具栏(QToolBar)->菜单项(QAction)

3.子窗口(QDockWidget)->QWidget->放置其它控件

4.状态栏(QStatusBar)->放置其它控件

5.对话框(QDialog)->通过手动继承的方式进行自定义,添加控件


http://www.mrgr.cn/news/100259.html

相关文章:

  • 再来1章linux 系列-11 系统的延迟任务及定时任务 ,名单,at ,crontab,mail;/etc/at.allow,/etc/at.deny
  • 使用spring boot vue 上传mp4转码为dash并播放
  • 【深度强化学习 DRL 快速实践】深度确定性策略梯度算法 (DDPG)
  • 【深度强化学习 DRL 快速实践】近端策略优化 (PPO)
  • 【FreeRTOS】事件标志组
  • C语言实现对哈希表的操作:创建哈希表与扩容哈希表
  • Mysql日志undo redo binlog relaylog与更新一条数据的执行过程详解
  • 软考中级-软件设计师 知识点速过1(手写笔记)
  • 大模型应用开发之LLM入门
  • 计算机组成原理-408考点-数的表示
  • 正则表达式三剑客之——awk命令
  • 大内存生产环境tomcat-jvm配置实践
  • RocketMQ 主题与队列的协同作用解析(既然队列存储在不同的集群中,那要主题有什么用呢?)---管理命令、配置安装(主题、消息、队列与 Broker 的关系解析)
  • 张 LLM提示词拓展16中方式,提示词
  • 14-DevOps-快速部署Kubernetes
  • 【2025 最新前沿 MCP 教程 01】模型上下文协议:AI 领域的 USB-C
  • YOLO12架构优化——引入多维协作注意力机制(MCAM)抑制背景干扰,强化多尺度与小目标检测性能
  • 【数据可视化-25】时尚零售销售数据集的机器学习可视化分析
  • 【深度强化学习 DRL 快速实践】异步优势演员评论员算法 (A3C)
  • MySQL数据库(基础篇)