Qt中的RCC

news2025/5/16 21:54:58

      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.coloradmin.cn/o/2377161.html

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

相关文章

Delphi 12.3调用Chrome/edge内核实现DEMO源码

DELPHI使用调用Chrome/Edge内核浏览器&#xff0c;虽然旧的WebBrowser也还可以用&#xff0c;但大势所趋&#xff0c;新版的已经不需要使用第三方的组件了&#xff0c;算是全内置的开发了&#xff0c;不废话 Unit1 源码 Form 源码 unit Unit1;interfaceusesWinapi.Windows, W…

GitDiagram - GitHub 仓库可视化工具

GitDiagram - GitHub 仓库可视化工具 项目链接&#xff1a;https://github.com/ahmedkhaleel2004/gitdiagram 将任何 GitHub 仓库转换为交互式架构图&#xff0c;只需替换 URL 中的 hub 为 diagram。 ✨ 核心功能 即时可视化&#xff1a;将代码库结构转换为系统设计/架构图…

【Linux】基于虚拟机实现网络的管理

通过学习我们需要掌握&#xff1a;IP 的配置、子网掩码、网关、DNS 服务器】 一、配置虚拟机的IP地址 1. 查看虚拟机 IP 地址&#xff08;可以看到三个地址&#xff09; ip a&#xff08;即ip address show&#xff09; 其中可以看到&#xff1a; Linux系统识别的以太网接口…

QT 使用QPdfWriter和QPainter绘制PDF文件

QT如何生产pdf文件&#xff0c;网上有许多文章介绍&#xff0c;我也是看了网上的文章&#xff0c;看他们的代码&#xff0c;自己琢磨琢磨&#xff0c;才有了本编博客&#xff1b; 其他什么就不详细说了&#xff0c;本篇博客介绍的QPdfWriter和QPainter绘制PDF文件&#xff1b;…

linux - 权限的概念

目录 用户权限 超级用户与普通用户的区别 超级用户&#xff08;root&#xff09;&#xff1a; 普通用户&#xff1a; 切换用户身份 使用sudo执行高权限命令 用户管理 用户组管理 文件权限 文件访问者类别 基本权限 权限表示方法 权限修改 chmod chown chgrp u…

【Vue】CSS3实现关键帧动画

关键帧动画 两个重点keyframesanimation子属性 实现案例效果展示&#xff1a; 两个重点 keyframes 和 animation 作用&#xff1a;通过定义关键帧&#xff08;keyframes&#xff09;和动画(animation)规则&#xff0c;实现复杂的关键帧动画。 keyframes 定义动画的关键帧序列…

AD 多层线路及装配图PDF的输出

装配图的输出&#xff1a; 1.点开‘智能PDF’ 2. 设置显示顶层&#xff1a; 设置显示底层&#xff1a; 多层线路的输出 同样使用‘智能PDF’

MultiTTS 1.7.6 | 最强离线语音引擎,提供多音色无障碍朗读功能,附带语音包

MultiTTS是一款免费且支持离线使用的文本转语音&#xff08;TTS&#xff09;工具&#xff0c;旨在为用户提供丰富的语音包选项&#xff0c;实现多音色无障碍朗读功能。这款应用程序特别适合用于阅读软件中的离线听书体验&#xff0c;提供了多样化的语音选择&#xff0c;使得听书…

基于自校准分数的扩散模型在并行磁共振成像中联合进行线圈灵敏度校正和运动校正|文献速递-深度学习医疗AI最新文献

Title 题目 Joint coil sensitivity and motion correction in parallel MRI with aself-calibrating score-based diffusion model 基于自校准分数的扩散模型在并行磁共振成像中联合进行线圈灵敏度校正和运动校正 01 文献速递介绍 磁共振成像&#xff08;MRI&#xff09;…

OCR发票识别API实现

OCR发票识别API实现 1. 阿里云OCR发票识别2. Tesseract OCR3. 利用java调用大模型进行识别4. 飞桨PaddleOCR 1. 阿里云OCR发票识别 阿里云OCR发票识别 示例&#xff1a; 接口&#xff1a;https://dgfp.market.alicloudapi.com/ocrservice/invoice 参数&#xff1a;{"img&…

实战案例:采集 51job 企业招聘信息

本文将带你从零开始&#xff0c;借助 Feapder 快速搭建一个企业级招聘信息数据管道。在“基础概念”部分&#xff0c;我们先了解什么是数据管道和 Feapder&#xff1b;“生动比喻”用日常场景帮助你快速理解爬虫组件&#xff1b;“技术场景”介绍本项目中如何使用代理等采集策略…

从AlphaGo到ChatGPT:AI技术如何一步步改变世界?

从AlphaGo到ChatGPT&#xff1a;AI技术如何一步步改变世界&#xff1f; 这里给大家分享一个人工智能学习网站。点击跳转到网站。 https://www.captainbed.cn/ccc 前言 在科技发展的历史长河中&#xff0c;人工智能&#xff08;AI&#xff09;技术无疑是最为璀璨的明珠之一。从…

AI 编程革命:腾讯云 CodeBuddy 如何重塑开发效率?

引言 在传统开发流程中&#xff0c;开发者常需依赖 SDK 文档或反复调试来获取云资源信息。而随着 AI 技术爆发式发展&#xff0c;腾讯云推出的 CodeBuddy 正以对话式编程颠覆这一模式 —— 只需自然语言描述需求&#xff0c;即可直接生成可执行代码。作为腾讯混元大模型与 Dee…

星海智算云平台部署GPT-SoVITS模型教程

背景 随着 GPT-SoVITS 在 AI 语音合成领域的广泛应用&#xff0c;越来越多的个人和团队开始关注这项前沿技术。你是否也在思考&#xff0c;如何快速、高效地部署并体验这款强大的声音克隆模型&#xff1f;遗憾的是&#xff0c;许多本地部署方案不仅配置复杂&#xff0c;而且对…

15:00开始面试,15:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到4月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

20250515通过以太网让VLC拉取视熙科技的机芯的rtsp视频流的步骤

20250515通过以太网让VLC拉取视熙科技的机芯的rtsp视频流的步骤 2025/5/15 20:26 缘起&#xff1a;荣品的PRO-RK3566适配视熙科技 的4800W的机芯。 1080p出图预览的时候没图了。 通过105的机芯出图确认 荣品的PRO-RK3566 的硬件正常。 然后要确认 视熙科技 的4800W的机芯是否出…

UE5.3 C++ 房屋管理系统(二)

三.当房屋生成成功&#xff0c;我们就需要把TMap里的数据存到数据库里。不然一点停止运行&#xff0c;就会所以数据都不见了。这里使用DataTable来存储。 1.DataTable是UE常用的表&#xff0c;虽然不是专门用来存档的&#xff0c;但也可以这么用。 DataTable表&#xff0c;实…

VSCode1.101.0便携版|中英文|编辑器|安装教程

软件介绍 Visual Studio Code是微软推出的一个强大的代码编辑器&#xff0c;功能强大&#xff0c;操作简单便捷&#xff0c;还有着良好的用户界面&#xff0c;设计得很人性化&#xff0c;旨在为所有开发者提供一款专注于代码本身的免费的编辑器。 软件安装 1、 下载安装包…

Linux系统发布.net core程序

前端 前端用的Vue3&#xff0c;发布的话需要Nginx下载安装Nginx 麒麟&#xff1a;这里我麒麟用的是桌面版&#xff0c;我直接把操作流程写在下面&#xff0c;写的比较简单&#xff0c;具体的可以具体搜这一块内容学习一下。打包vue程序&#xff0c;通过MobaXterm将打包后的程序…

极新携手火山引擎,共探AI时代生态共建的破局点与增长引擎

在生成式AI与行业大模型的双重驱动下&#xff0c;人工智能正以前所未有的速度重构互联网产业生态。从内容创作、用户交互到商业决策&#xff0c;AI技术渗透至产品研发、运营的全链条&#xff0c;推动效率跃升与创新模式变革。然而&#xff0c;面对AI技术迭代的爆发期&#xff0…