Qt6入门教程 5:添加资源和应用程序图标

目录

一.Qt资源系统(Qt Resource System)

1.Resource Collection Files(.qrc)

2.External Binary Resources

3.Compiled-In Resources

4.Resource Compiler (rcc) 

5.在程序中使用资源

二.添加.qrc文件

1.添加.qrc

2.编辑.qrc

三.添加应用程序图标

1.添加标题栏图标

2.添加exe图标


前面创建了一个最简单的HelloWorld程序,略显简陋,下面给它添加标题栏图标和exe图标美化一下。

一.Qt资源系统(Qt Resource System)

Qt资源系统是一种平台无关的机制,它将二进制文件存储到可执行文件中。当你的程序需要一系列文件(图标、翻译文件等等),而又不想这些文件有丢失的风险时,这种机制是非常给力的。

1.Resource Collection Files(.qrc)

与程序相关的资源被指定在一个.qrc文件中,这是一个XML格式的文件,里面列出的是磁盘上文件的路径映射。
下面是一个.qrc文件的示例:

 <!DOCTYPE RCC><RCC version="1.0"><qresource><file>images/copy.png</file><file>images/cut.png</file><file>images/new.png</file><file>images/open.png</file><file>images/paste.png</file><file>images/save.png</file></qresource></RCC>

指定的文件路径是相对于.qrc文件所在目录的相对路径。需要注意的是,列出的资源文件必须位于.qrc文件所在的目录或其子目录。
默认情况下,可以通过.qrc中指定的文件路径来访问资源,需要带“:/”前缀,或者一个带“qrc”前缀的URL。
例如::/images/cut.png 或者URL qrc:///images/cut.png都可以访问到cut.png文件。用文件标签的别名属性可以改变访问名称:

<file alias="cut-img.png">images/cut.png</file>

还可以使用qresource标签的前缀属性为 .qrc 文件中列出的所有文件指定路径前缀:

 <qresource prefix="/myresources"><file alias="cut-img.png">images/cut.png</file></qresource>

这种情况下,就可以使用 :/myresources/cut-img.png 访问该文件了。
有些资源可能需要随着用户本地的配置而改变,例如:翻译文件、图标,可以通过为 qresource 标签添加一个 lang 属性,并指定一个适当的本地字符串来完成。例如:

<qresource><file>cut.jpg</file>
</qresource>
<qresource lang="fr"><file alias="cut.jpg">cut_fr.jpg</file>
</qresource>

如果用户的语言是法语(即:QLocale::system().name() 返回“fr_FR”),:/cut.jpg 就变成了对cut_fr.jpg文件的引用。如果是其它语言,仍然使用 cut.jpg 。
关于本地字符串格式的说明,详见QLocale的文档。

2.External Binary Resources

要创建外部二进制资源,必须通过传递-binary给rcc来创建资源数据(通常使用.rcc扩展名),一旦二进制资源被创建,就可以使用QResource API注册该资源。
例如,.qrc文件中指定的一系列资源数据可以用下面的方式编译:

rcc -binary myresource.qrc -o myresource.rcc

在程序里,需要用以下代码注册该资源:

QResource::registerResource("/path/to/myresource.rcc");

3.Compiled-In Resources

要把一个资源编译到二进制文件中, 必须在.pro中明确指定.qrc文件,以便于qmake可以正确处理。例如:

RESOURCES     = application.qrc

qmake的时候会产生一个名为qrc_application.cpp 的文件,这个文件最终会编译链接到程序中。这个文件以静态的C++压缩二进制数组包含了所有图片和其它资源的数据。当qrc_application.cpp本身或者是其引用的资源文件发生改变后,该文件都会被自动重新生成。如果你不使用.pro文件,那么可以手工调用 rcc或者为构建系统添加构建规则。

即使在Windows、Mac OS X和iOS这些原生支持资源机制的操作系中,Qt也总是把资源数据存储在可执行文件中。

4.Resource Compiler (rcc) 

rcc.exe工具随Qt一起安装,用于在编译时将资源嵌入到Qt程序中,它通常会生成一个包含资源数据的C++源文件,比如上面提到的qrc_application.cpp。
rcc的使用方法:

rcc [options] <inputs>

比较常用的option是-binary,默认压缩input(-compress),如果不想压缩,可以指定option为-no-compress。更多参数详见Qt Assistant—>Resource Compiler (rcc) 

5.在程序中使用资源

例如给菜单项添加一个icon

QAction *cutAct = new QAction(QIcon(":/images/cut.png"), tr("Cu&t"), this);

初学的话到这就可以了,一些比较少见的场景,比如如何使用库中的资源,可以参考Qt Assistant—>The Qt Resource System

二.添加.qrc文件

1.添加.qrc

虽然.qrc文件可以用记事本打开编辑,但这样效率未免太低了。下面用Qt Creator添加一个.qrc文件,并将图片资源添加到.qrc文件中。
右键项目根节点,在弹出的快捷菜单中选择“添加新文件...”菜单项,弹出“新建文件”对话框。也可以通过点击菜单项“文件”—>“New File…”打开。

在“新建文件”对话框中选择Qt Resource File

输入文件名,这里以输入“HelloWorld”为例

点击“完成”按钮

此时在项目目录中新建了一个HelloWorld.qrc文件,并进入qrc编辑器页面。

接着在C:\Users\zhang\Documents\HelloWorld中新建一个icons文件夹,然后把AppIcon.ico放到这个文件夹中。

在下面的动图中,我们首先添加了前缀,但是默认的前缀过长,可以删掉一部分,然后添加了AppIcon.ico图片资源,最后使用快捷键Ctrl+S保存HelloWorld.qrc,此时在左侧的资源树中就能看到添加的Appicon.ico了。

2.编辑.qrc

如果切换到其他页面了,该如何编辑HelloWorld.qrc呢?
可以在资源树中右键HelloWorld.qrc,在弹出的快捷菜单中选择“Open in Editor”菜单项,会再次进入qrc编辑器页面。

这里的“Remove Missing Files”按钮非常有用,如果磁盘上的图片等资源被删除了,点击这个按钮,会把这些资源自动从qrc文件列表中删除。
也可以一个个删除,方法有两种:
一是右键资源树中的图片资源,在弹出的快捷菜单中选择“Remove...”菜单项

二是在qrc编辑器页面选中图片资源,然后点击“删除”按钮

三.添加应用程序图标

1.添加标题栏图标

方法有两种:
一是通过Designer页面添加。点击windowIcon属性右侧的三角形,在弹出的快捷菜单中选择“选择资源...”菜单项。“选择文件...”和“从主题设置图标...”用得比较少,有兴趣的同学可以自己研究下。

在弹出的“选择资源”对话框中,选中Appicon.ico。

PS:点击三角形右边的箭头,可以清楚此次设置。我把标题windowTitle顺手改成了博客昵称。
运行一下,perfect:

二是用代码添加

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 添加标题栏图标setWindowIcon(QIcon(":/icons/AppIcon.ico"));
}MainWindow::~MainWindow()
{delete ui;
}

":/icons/AppIcon.ico"这个路径如果不想自己敲,可以复制:

2.添加exe图标

双击HelloWorld.pro文件,添加RC_ICONS=icons/AppIcon.ico

再运行一下,依然perfect:

原文链接:Qt6入门教程 5:添加资源和应用程序图标-CSDN博客 

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

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

相关文章

AI剪辑助手:轻松剪辑专注创意,视频批量AI智剪的方法

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;在许多领域都展现出了强大的能力。在视频剪辑领域&#xff0c;AI剪辑助手的出现&#xff0c;给内容创作者带来了前所未有的便利。它不仅能快速、高效地完成视频剪辑工作&#xff0c;还能释放创造力。今天一起…

【HarmonyOS】网络数据请求连接与数据持久化操作

从今天开始&#xff0c;博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”&#xff0c;对于刚接触这项技术的小伙伴在学习鸿蒙开发之前&#xff0c;有必要先了解一下鸿蒙&#xff0c;从你的角度来讲&#xff0c;你认为什么是鸿蒙呢&#xff1f;它出现的意义又是…

【SpringBoot实战专题】「开发实战系列」深入迁出探索剖析SpringBoot服务容器特性的利器之Actuator(Web端点)

深入迁出探索剖析SpringBoot服务容器特性的利器之Actuator 内容简介内容大纲Actuator Web端点洞察应用程序内部状况的关键Actuator提供了13个端点启用ActuatorMaven依赖Gradle依赖 Actuator透视组件装配过程获得Bean装配报告&#xff08;/beans&#xff09;Bean属性概览Bean报告…

目标跟踪算法的目标丢失与遮挡处理 - 注意力机制

目标跟踪算法在处理目标遮挡和丢失情况时&#xff0c;采用了多种技术和策略。这些技术主要集中在提高算法的鲁棒性和适应性上&#xff0c;使其能够在复杂环境中有效跟踪目标。以下是一些常见的处理方法&#xff1a; 多模型融合&#xff1a;通过结合多个跟踪模型或特征表示&…

Linux安装texlivetexstudio

linux下写paper神器&#xff0c;简单好用&#xff0c;装就完了&#xff0c;不要多问 一、安装Texlive texlive镜像下载&#xff0c;传送门。这里我们选择texlive2023-20230313.iso下载。cd到下载目录&#xff0c;挂载镜像sudo mount -o loop texlive2023-20230313.iso /mnt #…

数据脱敏(一) 基本概念

定义 数据脱敏&#xff0c;是对敏感数据进行变形处理&#xff0c;其目的是保护隐私数据等信息的安全。也称为数据漂白、数据去隐私化或数据变形&#xff0c;是一种技术机制&#xff0c;用于在给定的规则、策略下对敏感数据进行变换、修改&#xff0c;以隐藏敏感信息。数据脱敏的…

如何提升演讲能力

强大输入体系 固定时间进行同领域阅读&#xff0c;类似1万小时定律 提升输出能力 输出写作时&#xff0c;梳理你的业务逻辑&#xff0c;倒逼输入&#xff0c;遇到困难时输出&#xff0c;知识体系会更加完善 心流状态 写提纲一、二、三&#xff0c;提示整个链路 故事化 学…

常用的Docker命令

以下是一些常用的Docker命令&#xff1a; 镜像相关命令&#xff1a; 搜索镜像&#xff1a;docker search <镜像名称>拉取镜像&#xff1a;docker pull <镜像名称>列出本地镜像&#xff1a;docker images删除本地镜像&#xff1a;docker rmi <镜像ID> 容器相…

centos docker-compose安装教程-2024最新版 亲测可用

目录 长时间不安装,生疏了,再次记录下 1.下载 2.修改名称 3.提权 4.测试验证 长时间不安装,生疏了,再次记录下 1.下载 官网地址 docker-compose官网地址&#xff1a;https://docs.docker.com/compose/compose-file/compose-file-v3/ #进入目录 cd /usr/local/bin#下载 wg…

大数据学习(32)hive优化方法总结

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…

js解构方式

//这两种写法哪个更好 const { signInfo: { isdist, signType } {} } data || {}; const { signInfo: { isdist, signType }} data;这两种写法都是解构赋值的方式&#xff0c;用于从对象中提取嵌套属性。它们的区别在于当data为undefined或者null时的行为不同。 第一种写法…

xtu oj 1251 Colombian Number

题目描述 对于正整数n,不存在整数k,使得n等于k加上k的数码累加和&#xff0c;我们称这样的数是哥伦比亚数或者自我数。 比如 11就不是一个哥伦比亚数&#xff0c;因为10加上10的数码累加和1等于11;而20则是一个哥伦比亚数。 输入 第一行是一个整数K(K≤10,000)&#xff0c;表…

NI PXIe-6386国产替代,8路AI(16位,14 MS/s/ch),2路A​O,24路DIO,PXI多功能I/O模块

PXIe-6386 PXIe&#xff0c;8路AI&#xff08;16位&#xff0c;14 MS/s/ch&#xff09;&#xff0c;2路A​O&#xff0c;24路DIO&#xff0c;PXI多功能I/O模块 PXIe-6386是一款同步采样的多功能DAQ设备。该模块提供了模拟 I/O、数字I/O、四个32位计数器和模拟和数字触发。板载N…

每日一练 | 华为认证真题练习Day164

1、当两台BGP邻居协商的HOLD Time参数为0时&#xff0c;则不发送Keeplive报文。 A. 正确 B. 错误 2、ospf路由协议中&#xff0c;bandwidth-reference命令的单位是mbps。 A. 正确 B. 错误 3、在OSPF广播或者NBMA网络类型中&#xff0c;ROUTER PRIORITY大的设备不一定会成为…

C++排序算法概览

1. 冒泡排序 (1) 基本思路 冒泡排序是一种简单的、但效率极低的排序算法&#xff0c;基本思路是重复地遍历待排序的序列&#xff0c;通过相邻元素的比较和交换&#xff0c;将较大&#xff08;或较小&#xff09;的元素逐步"冒泡"到右侧&#xff08;或左侧&#xff0…

Qat++,轻量级开源C++ Web框架

目录 一.简介 二.编译Oat 1.环境 2.编译/安装 三.试用 1.创建一个 CMake 项目 2.自定义客户端请求响应 3.将请求Router到服务器 4.用浏览器验证 一.简介 Oat是一个面向C的现代Web框架 官网地址&#xff1a;https://oatpp.io github地址&#xff1a;https://github.co…

[网络安全]DHCP 部署与安全

一 、DHCP作用 (Dynamic HOst Configure Protocol ) 动态IP配置协议 作用:动态自动分配IP地址 二、DHCP相关概念 地址池/作用域: (IP、子网掩码、网关、DNS、周期) 三、DHCP优点 减少工程量 避免IP避免 提高地址利用率 四、DHCP原理 成为DHCP租约过程 步骤: 1.发送 DHC…

13.Kubernetes部署Go应用完整流程:从Dockerfile到Ingress发布完整流程

本文以一个简单的Go应用Demo来演示Kubernetes应用部署的完整流程 1、Dockerfile多阶段构建 Dockerfile多阶段构建 [root@docker github]# git clone https://gitee.com/yxydde/http-dump.git [root@docker github]# cd http-dump/ [root@docker http-dump]# cat Dockerfile …

15个为你的品牌增加曝光的维基百科推广方法-华媒舍

维基百科是全球最大的免费在线百科全书&#xff0c;拥有庞大的用户群体和高质量的内容。在如今竞争激烈的市场中&#xff0c;利用维基百科推广品牌和增加曝光度已成为许多企业的重要策略。本文将介绍15种方法&#xff0c;帮助你有效地利用维基百科推广品牌&#xff0c;提升曝光…

八. 实战:CUDA-BEVFusion部署分析-学习spconv的优化方案(Explicit GEMM conv)

目录 前言0. 简述1. 什么是Explicit GEMM Conv2. im2col3. spconv是如何使用Explicit GEMM Conv的4. 使用Explicit GEMM Conv处理spconv的优缺点5. 拓展-conv加速5.1 Introduction5.2 im2col5.3 Forward graph5.4 Backward graph5.5 Python example for forward propagation5.6…