【Qt学习】QIcon类 + 利用qrc机制设置图片路径(QtCreator)

文章目录

  • 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.mzph.cn/news/688192.shtml

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

相关文章

单输入Doherty 功率放大器的极限带宽分析(含Matlab分析代码)

单输入Doherty 功率放大器的极限带宽分析(含Matlab分析代码) 参考论文:高效连续型射频功率放大器研究 DPA的基础理论参考:理想架构的Doherty功率放大器理论与仿真 1、单输入Doherty 功率放大器架构 假设 Doherty 功率放大器的…

介绍7款免费的最佳地图/导航/定位/GIS开源项目

文章目录 1、xdh-map新德汇地图应用类库1.1、独立引用1.2、与MyUI结合使用1.3、快速上手1.3.1、采用项目工程模板创建项目【推荐】1.3.2、 调用组件库功能 2、蚂蚁金服AntV-L7地理空间数据可视分析引擎2.1、AntV-L7简介2.2、核心特性2.3、支持丰富的图表类型2.4、如何使用2.4.1…

反转一个单链表

反转一个单链表 题意:反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 思路 需要虚拟节点么? 答:不需要,因为没有删除节点,只是改变了节点的指向。 遍…

计算机设计大赛 深度学习二维码识别

文章目录 0 前言2 二维码基础概念2.1 二维码介绍2.2 QRCode2.3 QRCode 特点 3 机器视觉二维码识别技术3.1 二维码的识别流程3.2 二维码定位3.3 常用的扫描方法 4 深度学习二维码识别4.1 部分关键代码 5 测试结果6 最后 0 前言 🔥 优质竞赛项目系列,今天…

Rust-知多少?

文章目录 前言1.使用下划线开头忽略未使用的变量2. 变量解构3.常量4.变量遮蔽(shadowing)5. 类似println!("{}", x); 为啥加感叹号6.单元类型总结 前言 Rust 学习系列,记录一些rust使用小技巧 1.使用下划线开头忽略未使用的变量 …

MySQL跨服务器关联查询

1. 首先确认服务器的Federated引擎是否开启 show engines;修改数据库的配制文件my.ini,(我的my.ini的路径为:D:\ProgramData\MySQL\MySQL Server 5.7/my.ini),将federated添加到my.ini文件中 到MySQL的my.cnf配置文件中修改 在 [mysqld] 下方加入 federated 然后重…

通过前序和中序遍历结果构造二叉树

题目 105. 从前序与中序遍历序列构造二叉树 - 力扣(LeetCode) 思路 首先思考,根节点应该做什么。 肯定要想办法确定根节点的值,把根节点做出来,然后递归构造左右子树即可。 我们先来回顾一下,前序遍历和…

全网超全的测试类型详解,再也不怕面试答不出来了!

在软件测试工作过程中或者在面试过程中经常会被问到一些看起来简单但是总是有些回答不上的问题,比如你说说“黑盒测试和白盒测试的区别?”,“你们公司做灰度测试么?", ”α测试和β测试有什么不一样?“&#xff0…

review 10

整理磁盘操作的完整流程,如何接入虚拟机,是否成功识别,对磁盘分区工具的使用,格式化,挂载以及取消挂载、复习cp、mv和find指令 1:U盘接入虚拟机 在弹出窗口直接选择 虚拟机-可移动设备-找到u盘-连接 2&a…

matlab代码--基于注水法的MIMO信道容量实现

今天接触一个简单的注水法程序,搞懂数学原理即可看懂代码。 1 注水法简介 详细原理可以参考: MIMO的信道容量以及实现 大致理论就是利用拉格朗日乘子法,求解信道容量的最大化问题,得到的解形如往水池中注水的形式,最…

过字符设备驱动分步注册过程实现LED驱动的编写,编写应用程序测试,发布到CSDN

头文件 #ifndef __HEAD_H__ #define __HEAD_H__ typedef struct{unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int ODR; }gpio_t; #define PHY_LED1_ADDR 0X50006000 #define PHY_LED2_ADDR 0X50007000 #d…

信号系统之移动平均滤波器

1 通过卷积实现 移动平均滤波器的工作原理是平均输入信号中的多个点,以产生输出信号中的每个点。在方程式形式中,这样写: 其中是 x 输入信号,y 是输出信号,M 是平均值中的点数。例如,在 5 点移动平均滤波器…

基于51单片机的智能台灯的设计与实现

摘 要:针对青少年因坐姿不正确、灯光亮度不合适、用眼过度等原因易导致的近视问题,文中提出使用51单片机作为主控制单元,选用红外检测、光敏检测、蓝牙通信、蜂鸣器和模数转换等模块,设计了一款智能台灯。该智能台灯具有节能、预防近视等功能。经测试,该台灯具有保护视力的…

php基础学习之常用系统函数

一,有关输出的语句/函数 echo语句 用于输出一个或多个字符串 print语句 用于输出一个字符串(用句点连接的多个字符串本质是一个字符串),与echo类似,但返回值为1 printf()函数 用于格式化输出字符串,类似于C…

Android下SF合成流程重学习之Refresh流程

Android下SF合成流程重学习之Refresh流程 引言 在前面初步分析完成了Android下SF合成流程重学习之Invalidate流程,我们接下来继续下面的分析。当有事务的更新或者有Buffer的更新便会触发后面刷新的流程,即Refresh流程! 一. onMessageRefresh 文件&…

QT串口通讯上位机_基础串口通讯

目录 1. 实现目标1.1 界面1.2 发送1.3 接收1.4 清除接收、发送 2. 新建工程3. 添加头文件4. 变量定义5. 完整代码6. 工程下载 1. 实现目标 1.1 界面 1.2 发送 1.3 接收 1.4 清除接收、发送 2. 新建工程 3. 添加头文件 QT serialport // #include <QDebug‘’> #incl…

数据库架构师之道:MySQL安装与系统整合指南

目录 MySQL数据库安装&#xff08;centos&#xff09; 版本选择 企业版 社区版 选哪个 MySQL特点 MySQL服务端-客户端 mysql下载选择 软件包解释 安装MySQL的方式 rpm包安装 yum方式安装 源码编译安装★ 具体的编译安装步骤★★ 环境准备 free -m命令 cat /pr…

OpenAI超级视频模型Sora登上央视,LeCun强推的「世界模型」雏形相继诞生,AGI如何能够以人类的理解方式看世界?

OpenAI超级视频模型Sora热度不减 Sora一经面世&#xff0c;瞬间成为顶流&#xff0c;话题热度只增不减&#xff0c;一度登上央视新闻报道。 强大的逼真视频生成能力&#xff0c;让许多人纷纷惊呼「现实不存在了」。 OpenAI官方技术报告 OpenAI官方Sora技术报告&#xff1a;V…

JMeter 配置元件之按条件读取CSV Data Set Config

实践环境 win10 JMeter 5.4.1 需求描述 需求是这样的&#xff0c;需要压测某个接口(取消分配接口)&#xff0c;请求这个接口之前&#xff0c;需要先登录系统(物流WMS系统)&#xff0c;并在登录后&#xff0c;选择并进入需要操作的仓库&#xff0c;然后请求接口&#xff0c;…

我的NPI项目之Android Camera (二) -- 核心部件之 Camera Sensor

说到Camera模组&#xff0c;我们比较关心的是用的什么样的sensor&#xff1f; sensor的分辨率多少&#xff0c;sensor的像素多大&#xff0c;sensor是哪家生产的等等一些问题。今天&#xff0c;我们就穿越时间&#xff0c;将sensor的历史扒一扒。 Wikipedia先看一下&#xff1…