Qt常用控件(二)

  • 1.window frame
  • 2.windowTitle
  • 3.windowIcon

🌟🌟hello,各位读者大大们你们好呀🌟🌟
🚀🚀系列专栏:【Qt的学习】
📝📝本篇内容:window frame;windowTitle;windowIcon
⬆⬆⬆⬆上一篇:Qt练习小程序(无法拒绝的按钮)
💖💖作者简介:轩情吖,请多多指教(>> •̀֊•́ ) ̖́-

1.window frame

在这里插入图片描述
在我们之前的使用geometry的时候,并没有去关注过窗口的尺寸具体指的是哪一部分,是包含标题栏那一行以及其他三边框呢还是不包含。
其实这个用专业的叫法是window frame即窗口框架,这是操作系统自带的内容
因此Qt中也提供了不同的API来供尺寸和大小使用

函数声明函数功能
frameGeometry返回值是QRect类型,计算时包含 window frame
geometry返回值是QRect类型,计算时不包含window frame

我们可以写一份代码来看看它们的不同之处
在这里插入图片描述
在这里插入图片描述
我们可以发现再构造函数里面怎么是一模一样的,而且x和y都是0呢?而到了后面按钮的槽函数中就正常了
这主要是因为代码是在构造函数中,我们的Widget还没有完全创建好,还在构造,还没有被添加到window frame中,看不到window frame带来的影响,因此就会出现这种情况。但是一旦出了构造函数,比如我们按钮在槽函数中打印的内容,它就没问题了,因为此时我们的窗口已经完全构造好了
我们可以稍微浅浅的看一下带window frame和不带的区别,首先是x它们之间差了1是因为我们的左侧边框,而y差了那么多的原因是因为标题栏占的位子大。而它的尺寸也是差不多道理,宽度width是因为左右两边的边框各占1像素所以说是2,而高度height是由于标题栏的原因就会大很多。并且window frame比起单纯的窗口会占更大空间,因此在位置上,window frame会比单纯的窗口坐标位置更小,而在尺寸上会更大。
在这里插入图片描述

2.windowTitle

这个属性肯定非常熟悉了,就是窗口标题,但是有个注意事项,就是这个属性来自于QWidget,设置的时候如果是顶层 widget (独⽴窗⼝), 这个操作才会有效,其余的子widget,这个操作则没有任何效果。简单来说就是只有窗口widget可以来设置属性,其余的像按钮啊这些控件,虽然都是多多少少继承于QWidget,但都是子控件,所以它们设置时,不会有任何效果。见下面代码演示
在这里插入图片描述
从理论上来讲,不应该给按钮这样的功能来设置标题,虽然设置后没有任何的报错和效果,但是这样的设定其实是不太合理的。

3.windowIcon

接下来要将的是windowIcon,这个其实指的是程序的图标,如下展示,它分别在任务栏或程序界面上显示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述我们默认的图标就如上图一样,没有任何的观赏性,也没有任何的含义
因此Qt也给我们提供了这方面的API

函数声明函数功能
QIcon windowIcon() const获取到控件的窗⼝图标,返回 QIcon 对象
void setWindowIcon(const QIcon &icon)设置控件的窗⼝图标

同样的,对于windowIcon而言,仅仅是对顶层widget有效
接下来代码演示
先在想要的路径下保存一张图片,记住它的位置和名字
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码非常简单,功能也实现了,但是有几个问题
首先肯定是有同学会疑惑,为什么这里不使用堆上开辟呢,而是直接使用栈帧上的呢?
在我们之前之所以使用动态开辟是因为我们要保证我们的控件有足够的生命周期并且加入对象树中在合适的时候释放内存,但是QIcon本身是一个比较小的对象,创建后并且已经设置进Widget窗口内部,因此无论释放不释放,都不会影响最后的显示。并且QIcon不支持对象树,无法将它挂到父对象下。
接下来要讲的是路径,首先就是不能带中文,其次我们在演示中使用的是正斜杠\,但是如果想要使用反斜杠\就要注意了,它在C/C++中代表的是转义字符,因此使用时需要使用双反斜杠
在这里插入图片描述
但是这样写还是会有问题,那就是这个路径是绝对路径,作为开发者,你无法做不到保证用户的路径也是这样,万一用户是只有一个C盘呢?还有一个情况,那就是万一用户不小心把这张图片给删了怎么办呢?
因此我们使用相对路径会比绝对路径更好,相对路径是以给定的路径为基准,以.和…开头。但是这种方法依旧解决不了用户把图片搞丢的情况,因此Qt中还提供了qrc机制
这个机制可以解决两个问题:
防止用户把图片给不小心搞丢
确保用户的机器上有图标的路径
因此要使用这个机制就需要在项目中创建一个新的xml文件(.qrc后缀),在xml文件中,将图片的数据导入进来,并且在xml中记录下来,Qt在编译项目的时候,就会根据qrc中描述的图片信息,找出图片内容,再提取出图片的二进制数据,把这些二进制数据转成C++代码,最后一起编译到exe可执行文件中。但是qrc对于很大的文件无法导入,比如几个G的视频文件
接下来讲一下怎么创建qrc文件
在这里插入图片描述
在这里插入图片描述
文件名可以不带后缀,系统会自动添加为.qrc
在这里插入图片描述在这里插入图片描述
创建完文件后,我们就是上图这样的一个界面,接下来就是需要先创建一个虚拟目录,所谓的虚拟目录就是在电脑上不存在的,是Qt抽象出来的,这主要是为了方便Qt去访问图标
在这里插入图片描述
接下来就可以使用Add Files来添加图标了,找到我们的图片
在这里插入图片描述
在这里插入图片描述
我们添加的文件就是在之前的prefix前缀路径下的,但是发现报错了,说是路径有问题。
这其实我们的图片文件在qt路径下,但是实际上我们需要保证我们的图标是在.qrc文件的同一目录下或者是同一目录下的子目录下才可以
因此将图标移动到当前项目的路径下即可
在这里插入图片描述
在这里插入图片描述当界面是这样就说明成功了,这个时候我们就可以使用刚刚的前缀+文件名来设置图标了
在这里插入图片描述
当代码中需要访问qrc管理的文件时就需要在路径前面加上:
接下来我们就又可以去Qt自动生成的代码中瞧一瞧,有没有什么变化没有
在这里插入图片描述
在当前文件夹中倒是什么都发现,但是debug文件中似乎多了一个.cpp结尾的qrc文件,这个就是生成的C++文件
在这里插入图片描述
在这里插入图片描述
打开后可以发现一个char类型的数组,它其实每一个字节都是图标里每一个字节的数据
总结:qrc机制将图片的二进制数据转换成C++代码,C++代码中就会有一个很大的char类型数组,其中的每一个字节就是图标的二进制转换而来的,当Qt编译项目的时候,就会将这个.cpp文件一起编译到.exe文件中,当exe运行时,这个图标也就被加载到了内存中。通过这种方式即解决了图标路径不一致的问题,也保护了图标的存在性。

🌸🌸Qt常用控件之QWidget(二)大概就讲到这里啦,博主后续会继续更新更多Qt的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!如有小伙伴需要Qt的安装包可以私信我,你们的支持是博主坚持创作的动力!💪💪

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

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

相关文章

飞算Java AI:专为 Java 开发者打造的智能开发引擎

目录 一,核心功能 1,智能编码(AI Coding) 2,AI 驱动测试(AI Testing) 3,智能运维(AIOps) 4,工程化支持 二、注册与上手:3 分钟快…

基于开源AI大模型AI智能名片S2B2C商城小程序源码的私域流量新生态构建

摘要:私域流量并非新生概念,企业持续构建和经营“企业 - 客户”关系是其持续存在的关键,且会随时代发展自我完善迭代。本文探讨了开源AI大模型AI智能名片S2B2C商城小程序源码在私域流量领域的应用价值。通过分析私域流量发展现状与挑战&#…

用 ELK+Filebeat 提高50%问题排查效率,这套方案实测有效!

摘要 在中大型系统中,日志的分布常常让问题排查变得异常痛苦:每次出错都要登录一堆服务器、翻一堆文本,还不一定能找到关键线索。为了解决这个问题,ELK(Elasticsearch、Logstash、Kibana)日志聚合平台应运而…

数据治理到底是什么?搞清这四件事,你就彻底明白了!

目录 第一件事:数据治理不是做“数据”,是做“管” 第二件事:治理的核心,是“数、责、权”的三角绑定 一是“数”:你到底有哪些数据? 二是“责”:每张表、每个字段是谁负责? 三…

Spring的事务控制——学习历程

思考:1. 事务是干什么的?2. 事务的特性?3. 事务控制的传播方式(传播行为)4. 事务的隔离级别5. 事务是如何实现的?6. 事务的回滚方式7. 事务失效场景回答:1. 事务和锁,还有版本控制 …

鸿蒙 Secure Boot 全流程解析:从 BootROM 到内核签名验证的实战指南

摘要 随着智能设备应用的深入,操作系统安全成为设备可信运行的基础。在物联网和多终端场景中,一旦系统被恶意篡改,将带来数据泄露、设备被控等严重后果。鸿蒙系统在安全启动方面设计了完整的机制,从最底层的 Boot ROM 开始逐级校验…

tailwindCSS === 使用插件自动类名排序

目录 类如何排序 自定义 实战应用 .prettierrc package .eslintrc 人们一直在讨论在 Tailwind 项目中对实用程序类进行排序的最佳方法。今天,我们很高兴地宣布,随着我们官方 prettier-plugin-tailwindcss 的发布,您终于可以不用为此担…

数据结构 —— 键值对 map

目录 map的若干操作 1、emplace() 2、find(key) 3、count(key) 4、lower_bound 和 upper_bound 5、erase() 6、empty() 7、降序的map 计蒜客T3603 叫号系统 题意: 解题思路: Code: Leetcode1309 解码字母到整数映射 题意: 解题…

C++ 性能优化指南

C 性能优化指南(针对 GCC 编译器,面向高级工程师面试) 代码优化面试常问点: 如何避免不必要的对象拷贝?为什么要用引用或 std::move?虚函数调用有什么性能开销?原理解释: 传递对象时…

拼数(字符串排序)

题目描述设有 n 个正整数 a1​…an​,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。输入格式第一行有一个整数,表示数字个数 n。第二行有 n 个整数,表示给出的 n 个整数 ai​。输出格式一个正整数&#xff…

【MySQL】函数学习-字符串函数

一、MySQL字符串函数基础回顾 在MySQL中,字符串函数用于处理文本数据,常见场景包括数据拼接、格式转换、清洗等。以下是核心函数速览:函数名作用说明基础示例(独立运行)CONCAT(s1,s2)拼接多个字符串SELECT CONCAT(heel…

AI不是“心智的蒸汽机“:重新理解人工智能的本质

当我们谈论人工智能时,最常听到的比喻是"心智的蒸汽机"——一个能够自动化认知任务的强大工具。但这个比喻可能从根本上误导了我们对AI真正潜力的理解。 最近,来自科罗拉多大学丹佛分校和肯尼索州立大学的研究团队发表了一篇论文[1]&#xff0…

免费的AI Logo工具生成的Logo质量怎么样?我对比了7个AI Logo生成器,设计必备

你尝试过用 AI 生成 Logo 吗?在 AI 巨火的今天,什么事情都可以尝试用 AI 去做。在品牌设计上也是如此,用 AI 做品牌设计、用 AI 做电商海报、用 AI 做包装设计等等。不知道你用过哪些 AI 工具,哪些是你觉得好用的。今天我们就来研…

计算机基础:内存模型

专栏导航 上一篇:WIndows 编程辅助技能:格式工厂的使用 回到目录 下一篇:MFC 第一章概述 本节前言 本来呢,没想着在单独的课节中讲解内存模型。但是呢,在我写过的一些个课节中,我发现,内存…

Sigma-Aldrich 细胞培养实验方案 | 通过Hoechst DNA染色检测细胞的支原体污染

目标DNA染色(如间接Hoechst染色技术)一种快速的方法,其可在72小时内获得结果,这相较于通过培养分离检测支原体所需的4周时间相比是更加有利的。用DNA染色剂对细胞系进行直接染色可在24小时内获得结果,但会大大降低灵敏…

需求跟踪深度解析:架构师视角下的全链路追溯体系

需求跟踪(Requirements Traceability)是确保软件系统从业务目标到代码实现全程可追溯的核心实践,尤其在安全关键系统(如航空、医疗)中具有强制性要求。一、需求跟踪的四大核心价值变更影响分析 精确评估需求变更波及范…

《棒球规则介绍》领队和主教练谁说了算·棒球1号位

Baseball 101|GM vs Manager 到底谁是球队话事人? ⚾️权力金字塔:谁说了算?General Manager(总经理/GM)球队建筑师:负责选秀(Draft)、交易球员(Trade&#x…

电力自动化的通信中枢,为何工业交换机越来越重要?

在“新能源数字化”双轮驱动下,电力行业正经历深刻变革,传统变电站也迎来了向智能化、自动化加速转型的时代。作为连接站内各级系统与装置的数据“中枢”,工业以太网交换机已成为现代变电站自动化系统中不可或缺的核心设备。在这场深度重构的…

【Linux仓库】命令行参数与环境变量【进程·伍】

🌟 各位看官好,我是egoist2023! 🌍 Linux Linux is not Unix ! 🚀 今天来学习命令行参数与环境变量的相关知识。 👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更多…

R 数据框:深入解析及其在数据分析中的应用

R 数据框:深入解析及其在数据分析中的应用 引言 R语言作为一种强大的统计计算和图形工具,在数据分析领域有着广泛的应用。数据框(DataFrame)是R语言中处理数据的一种重要结构,它类似于其他编程语言中的表格或关系数据库中的表。本文将深入解析R数据框的概念、特点、创建…