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中添加一个控件

例:

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

相关推荐
m0_748708059 分钟前
C++中的观察者模式实战
开发语言·c++·算法
qq_5375626722 分钟前
跨语言调用C++接口
开发语言·c++·算法
wjs202432 分钟前
DOM CDATA
开发语言
Tingjct34 分钟前
【初阶数据结构-二叉树】
c语言·开发语言·数据结构·算法
猷咪1 小时前
C++基础
开发语言·c++
IT·小灰灰1 小时前
30行PHP,利用硅基流动API,网页客服瞬间上线
开发语言·人工智能·aigc·php
快点好好学习吧1 小时前
phpize 依赖 php-config 获取 PHP 信息的庖丁解牛
android·开发语言·php
秦老师Q1 小时前
php入门教程(超详细,一篇就够了!!!)
开发语言·mysql·php·db
烟锁池塘柳01 小时前
解决Google Scholar “We‘re sorry... but your computer or network may be sending automated queries.”的问题
开发语言
是誰萆微了承諾1 小时前
php 对接deepseek
android·开发语言·php