您的位置:首页 > 编程语言 > Qt开发

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

2016-04-11 04:47 323 查看

简述

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

简述

详细说明

生成 rc 文件

系统变量

windres

示例

更多参考

详细说明

一个链接的 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 文件会被自动编译和链接。



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

可以看到,生成 .rc 文件的同时,会适当的填充元素,而这些元素由系统变量
QMAKE_TARGET_COMPANY
QMAKE_TARGET_DESCRIPTION
QMAKE_TARGET_COPYRIGHT
QMAKE_TARGET_PRODUCT
RC_CODEPAGE
RC_ICONS
RC_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_COMPANY
QMAKE_TARGET_DESCRIPTION
QMAKE_TARGET_COPYRIGHT、QMAKE_TARGET_PRODUCT
RC_CODEPAGE
RC_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 中:



只需要在 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 文件,将新修改的值重新写入。

更多参考

windres

Language Identifier Constants and Strings

Qt之添加Windows资源文件(.rc文件)
http://blog.csdn.net/u011012932/article/details/52702523#comments
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: