【Qt】qt常用控件之QIcon 以及 qrc机制设置图片路径(QtCreator)

news2024/11/27 22:26:40

文章目录

  • 1. QIcon / windowIcon
  • 2. setIcon() 与 setwindowIcon()
    • 2.1 setIcon() 介绍与使用
    • 2.2 setWindowIcon 介绍与使用
  • 3. 路径问题 & qrc机制的引入
    • 3.1 绝对路径 / 相对路径 的问题
    • 3.2 qrc机制
    • 3.3 在QtCreator下利用qrc机制引入图片

1. QIcon / windowIcon

QIcon

  • QIcon 是Qt 框架中的一个类,用于表示图标。它可以加载各种格式的图像文件,并用于在 Qt 应用程序中显示图标。

  • 使用 QIcon 类,可以将图标设置为窗口标题栏、工具栏按钮、菜单项等控件的图标

windowIcon

windowIcon,即应用程序 窗口的图标,有以下两接口:

API说明
windowIcon()获取控件的图标,并返回QIcon对象
setWIndowIcon()设置控件的窗口图标

2. setIcon() 与 setwindowIcon()

2.1 setIcon() 介绍与使用

  • setIcon() 是用于 设置窗口部件(如按钮、标签等)的图标。它可以将一个 QIcon 对象设置为窗口部件的图标,用于在界面中显示该部件的图标。

示例:

在下面的例子中,我们将下面的图标设置到按钮上:

在这里插入图片描述

QPushButton *button = new QPushButton(this);
QIcon icon("D:\\Coder\\pictures\\icons\\camera");
button->move(100, 100);
button->setIcon(icon);

在这里插入图片描述

通过 setIcon() 设置的图标将会显示在指定的窗口部件上。


2.2 setWindowIcon 介绍与使用

  • setWindowIcon() 是用于 设置顶级窗口(如主窗口、对话框等)的图标。它可以将一个 QIcon 对象设置为顶级窗口的图标,用于在窗口的标题栏、任务栏等位置显示该图标。

示例:

QMainWindow *window = new QMainWindow(this);
QIcon icon("D:\\Coder\\pictures\\icons\\camera");
window->setWindowIcon(icon);
window->show();

在这里插入图片描述

通过 setWindowIcon() 设置的图标将会显示在窗口的标题栏、任务栏等位置。


3. 路径问题 & qrc机制的引入

3.1 绝对路径 / 相对路径 的问题

首先简单提一点:

  • 图标文件路径应该是正确的,否则图标可能无法加载。图标文件路径,我们有两种选择:
  • 使用转义符号\\正斜杠/来表示路径分隔符,因为反斜杠可能被解释为转义字符

对于上面举的两例:

  • 我们所使用的路径是绝对路径,即开发机上的路径。
  • 而程序最终要打包给用户使用,绝对路径显然是没法正确将图片设置出来。
  • 而优于绝对路径,我们可以选用相对路径,如果将图片放到程序根目录或子目录中,使用时直接搜索,但依然面临问题,如果用户无意把图片删掉,那么程序最终执行依然会缺少相应资源。
  • 此时我们引入qrc机制

3.2 qrc机制

概念

  • 首先,qrc机制可以确保不会出现上述的两个问题,可以确保:
    1. 图片所在的路径一定会在用户机器存在。
    2. 片不会被用户删掉。
  • qrc机制 用于将资源文件嵌入到应用程序中
    • 通过使用qrc机制,开发人员可以将图像、字体、样式表和其他资源文件作为二进制数据打包到应用程序中,而无需将它们作为外部文件进行管理。

原理

  1. QRC机制使用特殊的URL格式来引用资源文件。所有资源文件的路径都是相对于QRC文件本身的。

  2. 给Qt项目 引入一个xml文件(以.qrc为后缀),将要使用的资源文件导入到xml文件中并记录

  3. Qt在项目编译时,会根据qrc中的图片信息,提取图片的二进制信息,并将二进制数据转换为代码,最终写入到exe中

缺点

  • qrc机制的缺点:无法导入过大的资源文件

3.3 在QtCreator下利用qrc机制引入图片

我们在当前Qt项目中 添加Qt资源文件,如下图所示:

在这里插入图片描述

首先添加前缀(即文件路径),随后在所添加的qrc文件中添加文件:

在这里插入图片描述

需要注意的是,添加的资源文件一定要在res.qrc文件的同级目录或子目录。

添加图片后,如下:

在这里插入图片描述
此时我们执行下面的代码,会有如下结果:

在这里插入图片描述

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

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

相关文章

Nacos 的配置管理和配置热更新

一、配置管理的必要性 1. 存在问题 微服务重复配置过多维护成本高:将各个微服务的配置都写到配置管理服务中,单个微服务不去编写配置,而是到配置管理服务中读取配置,实现配置共享,便于修改和维护 业务配置经常变动&a…

七天入门大模型 :LLM和多模态模型高效推理实践

前两天,我们已分享了 七天入门大模型 :LLM大模型基础知识最全汇总七天入门大模型 :提示词工程 Prompt Engineering,最全的总结来了! 今天我们继续分享相关内容,需要技术交流、答疑的小伙伴,可…

传统推荐算法库使用--mahout初体验

文章目录 前言环境准备调用混合总结 前言 郑重声明:本博文做法仅限毕设糊弄老师使用,不建议生产环境使用!!! 老项目缝缝补补又是三年,本来是打算直接重写写个社区然后给毕设使用的。但是怎么说呢&#xff…

JavaScript中的Symbol:加密与安全性

JavaScript中的Symbol是一种唯一且不可变的数据类型,引入了一种新的基本数据类型,用于表示独一无二的标识符。在本文中,我们将深入介绍JavaScript中的Symbol,讨论如何将其应用于JS加密中,提供案例代码,并说…

每日一题(数字颠倒,单词倒排)

数字颠倒_牛客题霸_牛客网 (nowcoder.com) #include <stdio.h>int main() {char arr[100];gets(arr);int lenstrlen(arr);for(int ilen-1;i>0;i--){printf("%c",arr[i]);}return 0; } 单词倒排_牛客题霸_牛客网 (nowcoder.com) #include <stdio.h> #…

PLC_博图系列☞参数实例

PLC_博图系列☞参数实例 文章目录 PLC_博图系列☞参数实例背景介绍参数实例参数实例的工作原理创建参数实例将实例作为参数传送 关键字&#xff1a; PLC、 西门子、 博图、 Siemens 、 参数实例 背景介绍 这是一篇关于PLC编程的文章&#xff0c;特别是关于西门子的博图软件…

如何使用idea连通服务器上的Redis(详细版本)

这里我使用的是阿里云的服务器 打开阿里云的安全组&#xff0c;设置端口为6379 在redis.conf文件中&#xff0c;注释bind 127.0.0.1 将protected-mode设置为no&#xff0c;即关闭保护模式 更改服务器中的防火墙&#xff0c;放行6379端口 # 放行端口 firewall-cmd --zo…

Three.js学习7:dat.GUI 参数控制

每个学 Three.js 的都被安利了 dat.GUI 吧&#xff1f; 我也不例外&#xff01; 今天就来了学习下 dat.GUI&#xff0c;并记录下来自己的学习成果。 一、什么是 dat.GUI? dat.GUI 是一个轻量级的图形用户界面库&#xff08;GUI 组件&#xff09;&#xff0c;使用这个库可以…

【Zigbee课程设计系列文章】Zigbee开发环境搭建

【Zigbee课程设计系列文章】Zigbee开发环境搭建 前言IAR 下载安装Z-Stack协议栈安装 &#x1f38a;项目专栏&#xff1a;【Zigbee课程设计系列文章】&#xff08;附详细使用教程完整代码原理图完整课设报告&#xff09; 前言 &#x1f451;由于无线传感器网络&#xff08;也即…

C++提高编程(黑马笔记)

C提高编程 模版 特点&#xff1a; 只是一个框架&#xff0c;不可以直接使用通用并不是万能的 泛型主要利用模版 函数模版 语法&#xff1a; template<typename T> 函数# include<iostream> using namespace std;template<typename T> void MySwap(T&a…

unity 点击事件

目录 点击按钮&#xff0c;显示图片功能教程 第1步添加ui button&#xff0c;添加ui RawImage 第2步 添加脚本&#xff1a; 第3步&#xff0c;把脚本拖拽到button&#xff0c;点击button&#xff0c;设置脚本的变量&#xff0c; GameObject添加 Component组件 点击按钮&am…

Vue学习笔记(三)常用指令、生命周期

Vue学习笔记&#xff08;三&#xff09;常用指令 vue指令&#xff1a;html标签上带有 v- 前缀的特殊属性&#xff0c;不同的指令具有不同的含义&#xff0c;可以实现不同的功能。 常用指令&#xff1a; 指令作用v-for列表渲染&#xff0c;遍历容器的元素或者对象的属性v-bind…

例39:使用List控件

建立一个EXE工程&#xff0c;在窗体上放一个文本框&#xff0c;一个列表框和三个按钮输入如下的代码&#xff1a; Sub Form1_Command1_BN_Clicked(hWndForm As hWnd, hWndControl As hWnd)List1.AddItem(Text1.Text)End SubSub Form1_Command2_BN_Clicked(hWndForm As hWnd, h…

【数据结构】链表OJ面试题5《链表的深度拷贝》(题库+解析)

1.前言 前五题在这http://t.csdnimg.cn/UeggB 后三题在这http://t.csdnimg.cn/gbohQ 给定一个链表&#xff0c;判断链表中是否有环。http://t.csdnimg.cn/Rcdyc 给定一个链表&#xff0c;返回链表开始入环的第一个结点。 如果链表无环&#xff0c;则返回 NULLhttp://t.cs…

电路设计(17)——乒乓球竞赛计分仪的proteus仿真

1.设计要求 设计、制作一台包括有“抛币选边”&#xff1b;“热身定时”&#xff1b;竞赛计分等电路的乒乓球竞赛计分仪&#xff0c;要求在同一块万能板上完成制作。 乒乓球开赛前&#xff0c;裁判员会叫双方有关运动员到身边商定采用抛硬币办法选边&#xff08;或选先发球&…

【开源】SpringBoot框架开发食品生产管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 加工厂管理模块2.2 客户管理模块2.3 食品管理模块2.4 生产销售订单管理模块2.5 系统管理模块2.6 其他管理模块 三、系统展示四、核心代码4.1 查询食品4.2 查询加工厂4.3 新增生产订单4.4 新增销售订单4.5 查询客户 五、…

【Web】NSSCTF Round#18 Basic个人wp(部分)

目录 ①门酱想玩什么呢&#xff1f; ②Becomeroot ①门酱想玩什么呢&#xff1f; 先试一下随便给个链接 不能访问远程链接&#xff0c;结合评论区功能&#xff0c;不难联想到xss&#xff0c;只要给个评论区链接让门酱访问就可 我们研究下评论区 从评论区知道&#xff0c;要…

【JavaEE】----SpringBoot的创建和使用

目录 1.Spring与SpringBoot的区别&#xff08;面试&#xff09; 2. SpringBoot的创建 3.SpringBoot创建时的问题及解决 4.SpringBoot的目录学习 5.创建一个SpringBoot 项目并且启动 1.Spring与SpringBoot的区别&#xff08;面试&#xff09; Spring 的诞⽣是为了简化 Java 程…

【一周年】我的创作纪念日

今天&#xff0c;是我成为创作者的第366天&#xff0c;不知不觉&#xff0c;来CSDN已经一年啦~ 在这个特殊的日子&#xff0c;也给大家讲讲我的创作故事。 一、机缘 起初&#xff0c;刚认识CSDN时&#xff0c;我的高中生涯刚结束&#xff0c;顺利从一名懵懂的高中生变身为一名懵…

JavaScript中的常见算法

一.排序算法 1.冒泡排序 冒泡排序比较所有相邻的两个项&#xff0c;如果第一个比第二个大&#xff0c;则交换它们。元素项向上移动至 正确的顺序&#xff0c;就好像气泡升至表面一样。 function bubbleSort(arr) {const { length } arrfor (let i 0; i < length - 1; i)…