Qt中的RCC

      Qt资源系统(Qt resource system)是一种独立于平台的机制,用于在应用程序中传输资源文件。如果你的应用程序始终需要一组特定的文件(例如图标、翻译文件和图片),并且你不想使用特定于系统的方式来打包和定位这些资源,则可以使用Qt资源系统。

      最常见的情况是,资源文件嵌入到应用程序可执行文件中,或者嵌入到应用程序可执行文件加载的库和插件中。或者,资源文件也可以存储在外部资源文件中。

      资源系统基于Qt的rcc资源编译器(Resource Compiler)、构建系统和Qt运行时API之间的紧密合作。

      注意:目前,Qt资源系统尚未利用任何系统特定的资源处理功能,例如Windows、macOS和iOS上的资源处理功能。这种情况可能会在未来的Qt版本中得到改变。 

      Qt Resource Compiler(rcc)

      (1).rcc命令行工具:用于在构建过程中将资源嵌入到Qt应用程序中,读取资源文件并生成C++或Python源文件,或者生成.rcc文件。rcc.exe位于6.8.0\msvc2019_64\bin,其支持的输入参数如下所示:

      (2).文件列表和相关元数据(metadata)以Qt资源集合文件(Qt Resource Collection File)的形式传递给rcc。

      (3).默认情况下,rcc会生成C++源代码,然后将其编译为可执行文件或库的一部分。"-g python"选项会生成Python源代码。"-binary"选项会生成一个二进制存档,按照惯例,该存档会保存在.rcc文件中,并可在运行时加载。

      (4).注意:虽然可以从命令行运行rcc,但通常最好将其留给构建系统。

      Qt Resource Collection File(.qrc)

      (1)..qrc文件是一个XML文档,其中列举了需要作为运行时资源包含的本地文件。它作为rcc的输入。mainwindow.qrc文件内容示例如下:在vs2022中此文件可以直接使用Qt Resource Editor打开

      (2).XML中的每个<file>元素都标识应用程序源代码树中的一个文件。路径是相对于包含.qrc文件的目录解析的。

      (3).默认情况下,该路径也用于在运行时标识文件的内容。

      (4).Qt Creator、Qt Design Studio、Qt Widgets Designer和Qt Visual Studio Tools允许你通过便捷的用户界面创建、检查和编辑.qrc文件。除了Qt Widgets Designer之外,它们还为使用Qt资源系统的项目提供了向导。

      构建系统集成

      (1).使用rcc处理资源文件通常在应用程序构建时完成。一些构建工具对此提供了专门的支持,包括CMake和qmake。

      (2).如果启用了CMAKE_AUTORCC,你只需将.qrc文件作为源添加到可执行文件或库中即可。引用的资源文件将嵌入到二进制文件中:set(CMAKE_AUTORCC ON)

      (3).AUTORCC的替代方案是使用Qt6Core的CMake函数qt_add_resources,该函数可以更好地控制资源的创建。例如,它允许你直接在项目文件中指定资源的内容,而无需先编写.qrc文件:调用qt_add_resources后会由mainwindow.qrc生成qrc_mainwindow.cpp,内容示例如下:

      Runtime API

      处理迭代和读取文件的Qt API内置了对Qt资源系统的支持。你可以将资源路径(而不是本地文件路径)传递给QFile和QDir,也可以传递给QIcon、QImage和QPixmap等构造函数,如下所示:":"前缀明确表示应从Qt资源系统加载"/images/cut.png"

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

      高级主题

      (1).前缀:.qrc文件可以设置一个前缀,该前缀将添加到<file>元素中指定的每个本地文件名之后,用于获取资源系统中该文件的名称。前缀允许你构建资源结构,避免通过不同库或插件中的不同.qrc文件添加的资源文件之间发生冲突。

      (2).别名:有时,将资源文件在运行时置于其他路径下会很方便。.qrc文件可以通过设置alias属性来实现。

      (3).丢弃文件内容:有时你想将文件节点添加到资源文件系统,但实际上并不想添加文件内容。.qrc文件通过将empty属性设置为true来实现此目的。生成的文件仍然可以从应用程序访问,但其内容为空。这对于从应用程序二进制文件中剥离QML源代码非常有用。

      (4).语言选择器:某些资源需要根据用户的语言环境进行更改,例如翻译文件或图标。资源集合文件通过为qresource标签添加lang属性来支持此功能,该属性指定了合适的语言环境字符串。

      (5).嵌入大文件:默认情况下,rcc会将资源文件以C++数组的形式嵌入到可执行文件中。这对于大型资源尤其容易出现问题。如果编译器运行时间过长,甚至由于内存溢出而失败,你可以选择一种特殊模式,在该模式下,资源将通过两步过程嵌入。C++编译器只会在目标可执行文件或库中为资源预留足够的空间。资源文件内容和元数据的实际嵌入是在编译和链接阶段之后,通过另一个rcc调用完成的。对于CMake,你需要使用qt_add_big_resources函数。

      (6).外部资源文件:除了将资源文件嵌入二进制文件之外,还可以将它们存储在单独的.rcc文件中。rcc允许使用"-binary"选项来实现此目的。此类.rcc文件必须在运行时使用QResource加载。对应CMake,可以使用qt_add_binary_resources函数。

      (7).压缩:rcc会尝试压缩内容,以优化最终二进制文件中的磁盘空间使用率。如果需要,可以关闭压缩功能。

      GitHub:https://github.com/fengbingchun/Qt_Test

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

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

相关文章

2918. 数组的最小相等和

2918. 数组的最小相等和 题目链接&#xff1a;2918. 数组的最小相等和 代码如下&#xff1a; class Solution { public:long long minSum(vector<int>& nums1, vector<int>& nums2) {auto [sum1, zero1] calc(nums1);auto [sum2, zero2] calc(nums2);i…

使用 Docker 部署 OnlyOffice

使用 Docker 部署 OnlyOffice 在如今容器化技术盛行的时代&#xff0c;Docker 已成为应用快速部署和隔离的最佳选择。OnlyOffice 作为一款功能强大的在线办公套件&#xff0c;通过 Docker 部署不仅能够简化安装和维护流程&#xff0c;还能在不同环境中保持一致性&#xff0c;极…

DDD领域驱动介绍

&#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》&#xff08;基础篇&#xff09;、&#xff08;进阶篇&#xff09;、&#xff08;架构篇&#xff09;清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、…

前端 CSS 样式书写与选择器 基础知识

1.CSS介绍 CSS是Cascading Style Sheet的缩写&#xff0c;中文意思为"层叠样式表"&#xff0c;它是网页的装饰者&#xff0c;用来修饰各标签 排版(大小、边距、背景、位置等)、改变字体的样式(字体大小、字体颜色、对齐方式等)。 2.CSS书写位置 2.1 样式表特征 层…

鸿蒙 从打开一个新窗口到Stage模型的UIAbility组件

打开一个新的窗口 我们首先来实现如何在一个应用中打开一个新窗口&#xff0c;使用的模型是 Stage 模型 在项目文件里&#xff0c;新建一个 newWindow.ets 新文件 src/main/ets/pages/newWindow.ets newWindow.ets文件里面随便写点什么都行&#xff0c;这里是第一步创建的文件…

Linux的日志管理

日志管理服务rsyslogd 配置文件 | 日志类型 | 说明 | | -------------------- | ----------------------------------- | | auth | pam产生的日志 | | authpriv | ssh、ftp等…

【PhysUnits】4.1 类型级比特位实现解释(boolean.rs)

一、源码 该代码实现了一个类型级(type-level)的布尔系统&#xff0c;允许在编译时进行布尔运算。 //! 类型级比特位实现 //! //! 这些是基础的比特位类型&#xff0c;作为本库中其他数值类型的构建基础 //! //! 已实现的**类型运算符**&#xff1a; //! //! - 来自 core::op…

【docker】--数据卷挂载

文章目录 存储卷管理创建存储卷查看存储卷详细信息查看存储卷删除存储卷 存储卷管理 # 目录挂载 docker run -v 本机目录&#xff1a;容器目录#1&#xff09; # 将容器内部的 “/usr/share/nginx/html” 进行持久化挂载 会在宿主机生成一个随机的存储卷 docker run -v /usr/sh…

双重差分模型学习笔记2(理论)

【DID最全总结】90分钟带你速通双重差分&#xff01;_哔哩哔哩_bilibili 目录 一、staggered DID 交错双重差分 二、动态双重差分 动态双重差分法公式解释 符号解释 公式逻辑与案例 与标准DID的区别 总结 “双减” 政策动态差分模型 &#xff08;一&#xff09;设定处…

预测模型开发与评估:基于机器学习的数据分析实践

在当今数据驱动的时代&#xff0c;预测模型已成为各行各业决策制定的核心工具。本文将分享我在COMP5310课程项目中开发预测模型的经验&#xff0c;探讨从数据清洗到模型优化的完整过程&#xff0c;并提供详细的技术实现代码。 ## 研究问题与数据集 ### 研究问题 我们的研究聚焦…

Java 并发编程归纳总结(可重入锁 | JMM | synchronized 实现原理)

1、锁的可重入 一个不可重入的锁&#xff0c;抢占该锁的方法递归调用自己&#xff0c;或者两个持有该锁的方法之间发生调用&#xff0c;都会发生死锁。以之前实现的显式独占锁为例&#xff0c;在递归调用时会发生死锁&#xff1a; public class MyLock implements Lock {/* 仅…

数据治理域——数据同步设计

摘要 本文主要介绍了数据同步的多种方式&#xff0c;包括直连同步、数据文件同步和数据库日志解析同步。每种方式都有其适用场景、技术特点、优缺点以及适用的数据类型和实时性要求。文章还详细探讨了数据直连同步的特点、工作原理、优点、缺点、适用场景等&#xff0c;并对数…

AI人工智能在教育领域的应用

AI人工智能在教育领域的应用 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;逐渐成为推动教育变革的重要力量。AI在教育领域的应用不仅改变了传统的教学模式&#xff0c;还为个性化学习、教育资源优化和教育管理带来了前所未有的机遇。本文将从多个方面探…

ohttps开启群晖ssl证书自动更新

开启群晖ssl证书自动更新OHTTPS ohttps是一个免费自动签发ssl证书、管理、部署的项目。 https://ohttps.com 本文举例以ohttps项目自动部署、更新群晖的ssl证书。 部署 签发证书 打开ohttps-证书管理-创建证书-按你实际情况创建证书。创建部署节点 打开Ohttps-部署节点-添加…

ElasticSearch聚合操作案例

1、根据color分组统计销售数量 只执行聚合分组&#xff0c;不做复杂的聚合统计。在ES中最基础的聚合为terms&#xff0c;相当于 SQL中的count。 在ES中默认为分组数据做排序&#xff0c;使用的是doc_count数据执行降序排列。可以使用 _key元数据&#xff0c;根据分组后的字段数…

SQLite 数据库常见问题及解决方法

一、数据库文件锁定问题 1. 问题表现 在多线程或多进程环境下访问 SQLite 数据库时&#xff0c;常常会出现数据库文件被锁定的情况。当一个进程对数据库执行写操作时&#xff0c;其他进程的读写操作都会被阻塞&#xff0c;导致应用程序出现卡顿甚至无响应。比如在移动应用开发…

DeepSeek基础:PPO、DPO、GRPO概念详解

DeepSeek-R1 的强化学习方案中&#xff0c;其亮点之一在于通过 GRPO 算法取代RLHF 常用的 PPO&#xff0c;通过尽可能减少人类标注数据&#xff0c;设计纯 RL 的环境&#xff0c;用精心设计的奖励机制来训练模型自己学会推理。那么什么是PPO、GRPO&#xff0c;其产生的背景、核…

一分钟了解机器学习

一分钟了解机器学习 A Minute to Know About Machine Learning By JacksonML 1. 什么是机器学习&#xff1f; 机器学习&#xff08;Machine Learning,ML&#xff09; 是人工智能的分支&#xff0c;通过从数据中自动学习规律&#xff0c;使计算机无需显式编程即可完成任务。…

mvc-service引入

什么是业务层 1&#xff09;Model1&#xff08;JSP&#xff09;和Model2&#xff08;模糊的mvc&#xff09;: MVC&#xff1a;Model(模型)&#xff0c;View(视图)&#xff0c;Controller&#xff08;控制器&#xff09; 视图层&#xff1a;用于数据展示以及用户交互的界…

第一次做逆向

题目来源&#xff1a;ctf.show 1、下载附件&#xff0c;发现一个exe和一个txt文件 看看病毒加没加壳&#xff0c;发现没加那就直接放IDA 放到IDA找到main主函数&#xff0c;按F5反编译工具就把他还原成类似C语言的代码 然后我们看逻辑&#xff0c;将flag.txt文件的内容进行加…