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

例:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/80358.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day47—双指针-平方数之和(LeetCode-633)

题目描述 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a^2 b^2 c 。 示例 1: 输入:c 5 输出:true 解释:1 * 1 2 * 2 5示例 2: 输入:c 3 输出:f…

蓝桥杯 20. 压缩变换

压缩变换 原题目链接 题目描述 小明最近在研究压缩算法。他知道,压缩时如果能够使数值很小,就能通过熵编码得到较高的压缩比。然而,要使数值变小是一个挑战。 最近,小明需要压缩一些正整数序列,这些序列的特点是&a…

element-ui多个form同时验证,以及动态循环表单注意事项

多个form同时验证: validateForm(refs) {if (!refs) {return false}return new Promise((resolve, reject) > {refs.validate().then((valid) > {resolve(valid)}).catch((val) > {resolve(false)})}) }, async handleConfirm() {Promise.all([this.valid…

Spring Boot中自定义404异常处理问题学习笔记

1. 问题背景 在Spring Boot项目中,需要手动返回404异常给前端。为此,我创建了一个自定义的404异常类UnauthorizedAccessException,并在全局异常处理器GlobalExceptionHandler中处理该异常。然而,在使用Postman测试时,…

你学会了些什么220622?--搭建UI自动化

jenkins访问地址:http://192.168.82.129:8080/ 账号密码:admin/a123456a ***** 什么是UI自动化** 使用工具或者脚本对需要测试的软件的前端界面在预设的条件下,在已有的测试数据下运行系统或者应用程序,并获取其前端页面UI显示的…

【2025计算机网络-面试常问】http和https区别是什么,http的内容有哪些,https用的是对称加密还是非对称加密,流程是怎么样的

HTTP与HTTPS全面对比及HTTPS加密流程详解 一、HTTP与HTTPS核心区别 特性HTTPHTTPS协议基础明文传输HTTP SSL/TLS加密层默认端口80443加密方式无加密混合加密(非对称对称)证书要求不需要需要CA颁发的数字证书安全性易被窃听、篡改、冒充防窃听、防篡改…

JavaFX 第一篇 Hello World

1、简介 JavaFX 是一个用于构建客户端应用程序的 Java 库,作为 Java 标准库的一部分(JDK 8 到 10),从 JDK 11 开始,JavaFX 将以独立模块发布,将不再包含在 JDK标准库中,他是 Java 应用程序开发的…

SQL实战:02之连续数问题求解

文章目录 概述题目:体育馆的人流量题解步骤一:构造出一个连续序列步骤二:找出符合条件的组的序号步骤三:fetch结果,使用内连接过滤出符合条件的记录。完整SQL 题目二:连续出现的数字题解步骤一:分区并构建连…

STM32 的 GPIO和中断

GPIO的简单介绍 内部结构 施密特触发器(TTL肖特基触发器) 的工作原理: 施密特触发电路(简称)是一种波形整形电路,当任何波形的信号进入电路时,输出在正、负饱和之间跳动,产生方波或…

Server - 优雅的配置服务器 Bash 环境(.bashrc)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/147335592 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 登录服…

使用PyTorch实现图像增广与模型训练实战

本文通过完整代码示例演示如何利用PyTorch和torchvision实现常用图像增广方法,并在CIFAR-10数据集上训练ResNet-18模型。我们将从基础图像变换到复杂数据增强策略逐步讲解,最终实现一个完整的训练流程。 一、图像增广基础操作 1.1 准备工作 #matplotli…

解决Mac 安装 PyICU 依赖失败

失败日志: 解决办法 1、使用 homebrew 安装相关依赖 brew install icu4c 安装完成后,设置环境变量 echo export PATH"/opt/homebrew/opt/icu4c77/bin:$PATH" >> ~/.zshrcecho export PATH"/opt/homebrew/opt/icu4c77/sbin:$PATH…

Springboot后端查询参数接收

1.实现方式 假设前端发送的接口: /users?nameJohn&age30 后端怎么接收里面的name和age呢?以及再发别的参数后端怎么接收呢? 1.比较简单的方式 当控制器方法的参数类型是简单类型(如 String、Integer、Long 等&#xff09…

桌面应用中VUE使用新浏览器窗口打开页面

1、浏览器应用忽略此方式,可任意方式打开。针对桌面应用设置 newWindowClick(){try {this.fileUrl "";this.params.year ""this.params.date ""axios({method: post,url: /url/pdf/preview,data: this.params,}).then(res> {t…

华为手机怎么进行音频降噪?音频降噪技巧分享:提升听觉体验

在当今数字化时代,音频质量对于提升用户体验至关重要,无论是在通话、视频录制还是音频文件播放中,清晰的音频都能带来更佳的听觉享受。 而华为手机凭借其强大的音频处理技术,为用户提供了多种音频降噪功能,帮助用户在…

【数据可视化-22】脱发因素探索的可视化分析

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个…

青少年编程与数学 02-018 C++数据结构与算法 06课题、树

青少年编程与数学 02-018 C数据结构与算法 06课题、树 一、树(Tree)1. 树的定义2. 树的基本术语3. 常见的树类型4. 树的主要操作5. 树的应用 二、二叉树(Binary Tree)1. 二叉树的定义2. 二叉树的基本术语3. 二叉树的常见类型4. 二叉树的主要操作5. 二叉树的实现代码说明输出示例…

【论文阅读】Visual Instruction Tuning

文章目录 导言1、论文简介2、论文主要方法3、论文针对的问题4、论文创新点总结 导言 本论文介绍了一个新兴的多模态模型——LLaVA(Large Language and Vision Assistant),旨在通过指令调优提升大型语言模型(LLM)在视觉…

【学习笔记】Cadence电子设计全流程(三)Capture CIS 原理图绘制(下)

【学习笔记】Cadence电子设计全流程(三)Capture CIS 原理图绘制(下) 3.16 原理图中元件的编辑与更新3.17 原理图元件跳转与查找3.18 原理图常见错误设置于编译检查3.19 低版本原理图文件输出3.20 原理图文件的锁定与解锁3.21 Orca…

js使用IntersectionObserver实现目标元素可见度的交互

文章目录 1、前言2、代码实现3、使用场景4、兼容性5、成熟的Hooks推荐 1、前言 IntersectionObserver 是浏览器原生提供的一个Api。可以"观察"我们的元素是否可见,原理是判断目标元素与可见区域的交叉比例,所以也被称为"交叉观察器"…