Qt之生成Window资源文件(.rc 文件)

摘要:
简要说明qmake可以随意自动生成一个正确填充的Windows资源文件。简要描述详细信息生成rc文件系统变量windres示例更多参考详细信息链接的Windows资源文件包含许多元素,EXE程序图标也需要从这些元素中读取。资源定义脚本(.rc文件)被编译成Windows资源文件。生成rc文件,方法是设置系统变量VERSION或rc_ ICONS(至少一个)。
简述

qmake 可以随意地自动生成一个适当填充的 Windows 资源文件。本节主要讲解如何用 qmake 处理一个 Windows 资源文件,并将其链接到一个可执行应用程序(EXE)或动态链接库(DLL)。

详细说明

一个链接的 Windows 资源文件包含许多元素,可以由其 EXE 或者 DLL 来访问。然而,Qt 资源系统应当以独立于平台的方式访问链接资源。但在链接的 Windows 资源文件中,有一些标准元素只能由 Windows 自身访问。例如,在 Windows 资源管理器中,文件属性的“详细信息”需要由资源元素填充。此外,EXE 的程序图标也需要从这些元素中读取。所以,对于一个由 Qt 创建的 Windows EXE 或 DLL 来说,要同时使用这两项技术,比较好的实践方法是:通过 Qt 资源系统链接独立于平台的资源,并通过一个 Windows 资源文件添加 Windows 的特定资源。

通常情况下,一个资源定义脚本(.rc 文件)被编译成一个 Windows 资源文件。在微软的工具链内部,RC 工具生成一个 .res 文件,该文件可以被微软链接器链接到一个 EXE 或 DLL;MinGW 工具链使用 windres 工具生成一个 .o 文件,该文件可以被 MinGW 链接器链接到一个 EXE 或 DLL。

生成 .rc 文件

通过设置系统变量 VERSION 或 RC_ICONS (至少一个),qmake 会自动生成 .rc 文件。

以 VERSION 为例,在 pro 中添加版本信息:

VERSION = 4.0.2.666

执行 qmake,这时,会在 build 目录下生成一个名为 MyApp_resource.rc 的文件,生成的 .rc 文件会被自动编译和链接。

Qt之生成Window资源文件(.rc 文件)第1张

执行 Build(构建),会生成对应的 MyApp_resource.res 文件(已编译的资源脚本)。

可以看到,生成 .rc 文件的同时,会适当的填充元素,而这些元素由系统变量QMAKE_TARGET_COMPANYQMAKE_TARGET_DESCRIPTIONQMAKE_TARGET_COPYRIGHTQMAKE_TARGET_PRODUCTRC_CODEPAGERC_ICONSRC_LANG、和 VERSION 所决定。

如果这些元素不满足需要,qmake 还提供了两个系统变量:RC_FILE 和 RES_FILE,他们直接指向一个外部创建的 .rc 或 .res 文件。通过设置其中的一个变量,指定的文件就可以被链接到 EXE 或 DLL。

注意:如果设置了 RC_FILE 或 RES_FILE,qmake 对 .rc 文件的生成就失效了。这种情况下,qmake 不会对指定的 .rc 文件或 .res 或 .o 文件作进一步更改,有关 .rc 文件生成的变量不会有任何效果。

系统变量

QMAKE_TARGET_COMPANY

指定项目目标的公司名称

QMAKE_TARGET_DESCRIPTION

指定项目目标的描述信息

QMAKE_TARGET_COPYRIGHT

指定项目目标的版权信息

QMAKE_TARGET_PRODUCT

指定项目目标的产品名称

RC_CODEPAGE

指定应该被包含进一个 .rc 文件中的代码页

RC_LANG

指定应该被包含进一个 .rc 文件中的语言

注意: QMAKE_TARGET_COMPANYQMAKE_TARGET_DESCRIPTIONQMAKE_TARGET_COPYRIGHT、QMAKE_TARGET_PRODUCTRC_CODEPAGERC_LANG 均仅适用于 Windows, 而且只有在 VERSION 或 RC_ICONS 变量被设置,并且 RC_FILE 和 RES_FILE 变量没有被设置的情况下生效。

RC_ICONS

仅适用于 Windows,指定应该被包含进一个 .rc 文件中的图标,只有在 RC_FILE 和 RES_FILE 没有被设置的情况下生效。

VERSION

指定程序的版本号,需要将 TEMPLATE 指定为 app 或 lib。

在 Windows 中,如果没有设置变量 RC_FILE 和 RES_FILE,将会自动生成一个 .rc 文件,生成的文件包含 FILEVERSION 和 PRODUCTVERSION,由主版本、次版本、补丁版本和构建号填充,每个数字必须在 0 - 65535 范围内。

例如:

win32:VERSION = 1.2.3.4 # major.minor.patch.build
else:VERSION = 1.2.3    # major.minor.patch
windres

windres 可用于操纵 Windows 资源,windres 并不总是建成二进制实用程序的一部分,因为它只用于 Windows 目标。

在 windres 文档中,关于语言的描述如下:

–language val 
Specify the default language to use when reading an rc file. val should be a hexadecimal language code. The low eight bits are the language, and the high eight bits are the sublanguage.

意思是:指定读取 rc 文件时使用的默认语言。val 应该是一个十六进制的语言代码,低 8 位是语言,高 8 位是子语言。

关于语言代码的描述可以参考:Language Identifier Constants and Strings

也就是说,如果要将程序的语言设置为“中文(简体)”,则只需要在 pro 中设置语言的“区域设置标识符”0x0004 即可:

RC_LANG = 0x0004
示例

如上所属,我们可以很轻易地将信息添加至 EXE 或 DLL 中:

Qt之生成Window资源文件(.rc 文件)第2张

只需要在 pro 中添加变量和对应的值:

# 版本信息
VERSION = 4.0.2.666

# 图标
RC_ICONS = Images/MyApp.ico

# 公司名称
QMAKE_TARGET_COMPANY = "Digia"

# 产品名称
QMAKE_TARGET_PRODUCT = "Qt Creator"

# 文件说明
QMAKE_TARGET_DESCRIPTION = "Qt Creator based on Qt 5.7.0 (MSVC 2013, 32 bit)"

# 版权信息
QMAKE_TARGET_COPYRIGHT = "Copyright 2008-2016 The Qt Company Ltd. All rights reserved."

# 中文(简体)
RC_LANG = 0x0004

执行 qmake -> build,再次打开 .rc 文件,对应的元素信息已经被填充进去了。

建议:如果需要反复修改变量值,最好的方式:clear -> qmake -> build。切记不要忘记 qmake,因为只有执行了 qmake,才会重新生成 .rc 文件,将新修改的值重新写入。

更多参考

http://blog.csdn.net/u011012932/article/details/52702523#comments

免责声明:文章转载自《Qt之生成Window资源文件(.rc 文件)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Paper Review: 基于单细胞转录组数据推断基因调控网络的方法比较可靠数据传输基本原理(3)-滑动窗口下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue-resource+element upload上传(遇到formData总是变为object格式)

文件上传这种业务需求很常见,但是最近用了element,仔细看了文档,按照demo写了上传,与后台传参调取接口时,控制台总是显示未获取到文件,想了又想,发现一开始思路就跑遍了。。。 写此博记录下遇到的问题。 传参给后台需要formdata格式的,这种格式也很常见,如下: // FormData 对象 var form = new FormData();...

RocketMQ 消息偏移量 Offset 和 CommitLog

消息偏移量 Offset 概念 message queue 是无限长的数组,一条消息进来下标就会涨1,下标就是 offset,消息在某个 MessageQueue 里的位置,通过 offset 的值可以定位到这条消息,或者指示 Consumer 从这条消息开始向后处理。 message queue 中的 maxOffset 表示消息的最大 offset,...

linux下vim命令详解【转】

高级一些的编辑器,都会包含宏功能,vim当然不能缺少了,在vim中使用宏是非常方便的::qx     开始记录宏,并将结果存入寄存器xq     退出记录模式@x     播放记录在x寄存器中的宏命令稍微解释一下,当在normal模式下输入:qx后,你对文本的所有编辑动作将会被记录下来,再次输入q即退出了记录模式,然后输入@x对刚才记录下来的命令进行重复,...

Yarn对外接口

1 概述 Yarn对外接口 https://forum.huawei.com/enterprise/zh/forum.php?mod=viewthread&tid=451687 本文档专供需要对Yarn进行应用开发的用户使用。本指南主要适用于具备Java开发经验的开发人员。 简介 Yarn是一个分布式的资源管理系统,用于提高分布式的集群环境下的资源...

win10安装mysql5.7.29教程以及错误处理

重新配了一台电脑,装了win10系统,安装mysql是出现了一些问题以及解决的方法。记录于此,避免下次安装遇到重复问题。 首先下载mysql5.7.29安装包,本次使用的是zip。已保存在百度网盘 链接:https://pan.baidu.com/s/1y8aahxloQEJTGXqmd95xsg 提取码:e3c6 也可以自己去官网下载: 下载地址:  h...

Mac版sublime text右键open in browser 不能识别中文名解决办法

问题描述: Mac下sublime text下打开中文命名的html文件,右键open in browser,浏览器无反应。 解决思路: 要么适应软件,要么改进软件来适应。 1.  将中文名的html文件,改成英文名的html文件来预览。 2.  改造sublime text, 安装插件SideBarEnhancements,使用插件的“open in...