【Qt】QWidget的windowIcon属性

QWidget的windowIcon属性

  • windowIcon表示窗口的图标

当我们使用默认的windowIcon的时候,其窗口的图标如下:

API说明

windowIcon()

获取到控件的窗⼝图标. 返回 QIcon 对象.

setWindowIcon(const

QIcon& icon)

设置控件的窗⼝图标.

在Qt中,Qt把涉及到的相关概念,都封装成了类,QIcon就表示一个图标。同样的,这俩个API类似于windowTitle,只能针对顶层窗口使用,这里主要使用setWindowIcon函数。

例子:设置窗口图标 

首先需要先准备一张图片:

这里需要将QIcon设置在栈上。

之前在使用QPushButton这些控件的时候,推荐使用堆来创建对象,主要是因为要确保当前的控件的声明周期是足够的,需要通过Qt的对象数来释放对象。

        而QIcon自身是一个比较小的对象,创建出来以后,就是要设置到某个QWidget里面,QIcon对象本身释放与否,并不影响图标最终的显示。

        QIcon也不支持对象数,无法给它执行对象数。

然后给icon进行构造: 

【注意】路径中不能带有中文,同时使用"/"作为路径之间的分隔,但是不能使用"\",这个斜杠的意思在C++中表示转义字符,可以使用"\\"表示。

在C++11中,引入了raw string解决上述问题,其表示字符串中不包含任何转义字符(所有的字符都不会转义)。

r("d:/r");

使用setWindowIcon来设置widget的图标。

但是,通过绝对路径的方式引入图片是不科学的,咱们自己自己写的程序,最终是要发布到用户电脑上的,这里无法确保,开发机上图片的路径和用户电脑上图片的路径完全一致。

        因此,相比于使用绝对路径的方式,使用相对路径是更好的。(相对路径,是以给定目录为基准,以.或者..的方式开头)。

但是这种方式也有弊端,就是用户可能将含有图片的文件删除,导致无法找到该图片。

在Qt中,有一个qrc机制:

这个机制就是从根本上解决上述的俩个问题,

1.确保图片所在的路径在目标用户的机器上存在。

2.确保图片不会被用户删除。

需要给Qt项目中引入一个额外的xml文件(后缀名使用.qrc),在这个xml中把要使用的图片资源导入进来,并且在xml中进行记录。后续Qt在编译项目的时候,就会根据qrc中描述的图片信息,找到图片内容,并且提取出图片的二进制数据,把这些二进制数据转成C++代码,最终编译到exe里面。

qrc的缺点:无法导入太大的资源文件。

就比如几个GB的视频文件。

qrc使用的方式

1.在项目中创建一个qrc文件(文件名不要带有中文和特殊符号)

2.把图片导入到qrc文件中

(1)先创建一个“前缀”(Prefix)

所谓的“前缀”可以理解成虚拟的目录,这个目录没有在电脑上真实存在,是Qt自己抽象出来的。(qrc机制本质上就是把图片的二进制数据转成C++代码,最终就会在代码中看到很大的char数组,里面就是图片的二进制数据,为了方便在Qt代码中访问到这个图片,Qt就自己抽象出了虚拟的目录)

直接将prefix的名字改成 / 即可。

(2)把使用的图片文件导入到资源文件中。

此按钮在创建prefix之前是禁用的,创建好prefix之后就可以使用了,添加的文件就是添加到prefix下面的。

点击add Files得到的目录就是当前代码所在的目录。

【注意】导入图片的时候,需要确保导入的图片必须在resource.qrc文件的同级目录,或者同级目录中的子目录里面。

因此,需要把图片文件拷贝到当前项目目录中即可。

看到这个效果,就说明导入成功了。

当代码中需要访问qrc中管理的文件的时候,就需要在路径上带有 : 前缀。

qrc中导入的图片资源,就会被转成qrc_resource.cpp这个C++代码。

这里的字节内容就是图片文件里面的每个字节的数据。

当Qt项目进行编译的时候,这个cpp文件就被一起编译到了exe文件中。当exe程序运行的时候,上述图片的数据也就被加载到内存中了。

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

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

相关文章

【STM32 FreeRTOS】任务

使用 RTOS 的实时应用程序可以被构建为一组独立的任务。每个任务在自己的上下文中执行,不依赖于系统内的其他任务或 RTOS 调度器本身。在任何时间点,应用程序中只能执行一个任务,实时 RTOS 调度器负责决定所要执行的任务。因此, R…

react中使用nextjs框架,前端调后端接口跨域解决方式

前端在项目目录中next.config.js文件中添加以下代码 async rewrites() {return [{source: "/api/:path*",destination: ${process.env.NEXT_PUBLIC_API_DOMAIN}/api/:path*,basePath: false}]} 截图: source: "/api/:path*": 定义了一个 URL …

C++ 面试题常用总结 详解(满足c++ 岗位必备,不定时更新)

📚 本文主要总结了一些常见的C面试题,主要涉及到语法基础、STL标准库、内存相关、类相关和其他辅助技能,掌握这些内容,基本上就满足C的岗位技能(红色标记为重点内容),欢迎大家前来学习指正&…

【MySQL 03】库的操作 (带思维导图)

文章目录 🌈 一、创建数据库🌈 二、查看数据库🌈 三、使用数据库🌈 四、修改数据库🌈 五、删除数据库🌈 六、备份数据库🌈 七、恢复数据库🌈 八、字符集和校验规则⭐ 1. 查看系统默认…

HAProxy 效能飞跃先锋队

目录 一 负载均衡 1.1 四层负载 1.2 七层负载 1.3 四层负载和七层负载的区别 二 Haproxy简介 2.1 概念和内容 2.2 haproxy的基本配置信息 2.2.1 global 配置 2.2.2 proxies 配置 三 Haproxy的算法 3.1 静态算法 3.2 动态算法 3.3 其他算法 四 高级功能及配置 4.…

Mysql原理与调优-索引原理及使用

目录 1.绪论 2.索引原理 2.1 索引采用的数据结构 2.1.1 B树 1.什么是B树 2.B树的优缺点 2.1.2 B树 1.什么是B树 3.B树的优缺点 2.2.3 hash 2.2.4 总结 2.2 InnoDB数据存储结构(聚簇索引) 2.2.1 自底向上探寻索引 3.2.2 查询一条数据的完整流程 3.2.3 聚簇索引 2…

奥运科技观察:AI PC,如何成为当代体育精神的数字捍卫者?

作者 | 曾响铃 文 | 响铃说 数字孪生帮助体育馆建设、超高清直播……这届奥运会科技感拉满,几乎所有前沿技术都能在奥运的赛事运营中发现。 而AI大时代,AI如何帮助帮助奥运会顺利举办、如何帮助运动员拥有更好的表现,同样值得业界关注&…

haproxy最强攻略

1、负载均衡 负载均衡(Load Balance,简称 LB)是高并发、高可用系统必不可少的关键组件,目标是 尽力将网络流量平均分发到多个服务器上,以提高系统整体的响应速度和可用性。 负载均衡的主要作用如下: 高并发…

# Spring Cloud Alibaba Nacos_配置中心与服务发现(四)

Spring Cloud Alibaba Nacos_配置中心与服务发现(四) 一、Nacos 配置管理-集群部署 1、 把 nacos 应用程序包,复制3份,分别命名为 nacos1, nacos2, nacos3 分别在 conf 目录下,修改 application.properties 配置文件…

数据结构——循环队列

目录 循环队列的基本知识 循环队列的实现 定义 各个接口的实现 循环队列的基本知识 循环队列的定义 循环队列(Circular Queue)是一种使用固定大小的数组实现的队列,它将数组的首尾相连,形成环形,以充分利用空间并实…

Spring Boot的配置文件

目录 一、配置文件 1.properties为后缀的配置文件 1.1基本语法 1.2读取配置文件 1.3properties的优缺点 1.4加中文注释出现乱码 2.yml格式的配置文件 2.1基础语法 2.2读取配置文件 2.2.1对象存储到配置文件中 2.3yml的优缺点 2.4用不用加单引号或者双引号呢&#xf…

【C语言篇】编译和链接以及预处理介绍(上篇)

文章目录 前言翻译环境和运行环境翻译环境编译预处理(预编译)编译词法分析语法分析语义分析 汇编 链接 运行环境预处理(预编译)详解预定义符号#define定义常量#define定义宏带有副作用的宏参数宏替换的规则宏和函数的对比 写在最后…

opencv基础的图像操作

1.读取图像,显示图像,保存图像 #图像读取、显示与保存 import numpy as np import cv2 imgcv2.imread(./src/1.jpg) #读取 cv2.imshow("img",img) #显示 cv2.imwrite("./src/2.jpg",img) #保存 cv2.waitKey(0) #让程序进入主循环(让…

RAG系列之四:深入浅出 Embedding

在 RAG 系列之三:文本切分中介绍了如何将文本切分成更小的语义单元,接下来便是将拆分的文本块进行向量化。 什么是文本向量化? 文本向量化就是将文本数据转成数字数据,例如:将文本 It was the best of times, it was…

Android全面解析之context机制(二): 从源码角度分析context创建流程(上)

前言 这篇文章从源码角度分析context创建流程。 在上一篇Android全面解析之Context机制(一) :初识context一文中讲解了context的相关实现类。经过前面的讨论,读者对于context在心中有了一定的理解。但始终觉得少点什么:activity是什么时候被创建的&…

Python数据可视化案例——地图

目录 简单案例: 进阶案例: 继上文数据可视化案例,今天学习用pyecharts练习数据可视化案例2-构建地图。 简单案例: 首先构建一个简单的地图。 代码: import json from pyecharts.charts import MapmapMap() data[…

培训学校课程管理系统-计算机毕设Java|springboot实战项目

🍊作者:计算机毕设残哥 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目、 源…

大数据面试SQL(八):求连续段的起始位置和结束位置

文章目录 求连续段的起始位置和结束位置 一、题目 二、分析 三、SQL实战 四、样例数据参考 求连续段的起始位置和结束位置 一、题目 有一张表t2_id记录了id,id不重复,但是会存在间断,求出连续段的起始位置和结束位置。 样例数据&…

结构体structure、共用体union

目录 结构体 结构体类型的定义形式 结构体类型的大小 内存计算例子 共用体union 用共用体判断大小端 结构体和共用体对比 qsort() 结构体 结构体类型——用来描述复杂数据的一种数据类型 构造类型(用户自定义类型) struc…

CUDA+tensorflow+python+vscode在GPU下环境安装及问题汇总与解答

2024.8.14 因为要做深度学习,需要安装tensorflowgpu的环境,每次都搞不好整的很生气,本次将安装过程中参考的一些大佬的博客和安装过程中遇到的问题及解决方案总结一下,希望以后不要在这件事情上浪费时间。安装环境其实也没有想象中…