Qt使用问题记录——Qt配置rc
亲测可用 如图所示 记得先 qmake 再build
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 = 1.2.0.0
执行 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
1
示例
如上所属,我们可以很轻易地将信息添加至 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 文件,将新修改的值重新写入。