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

简介: 简述qmake 可以随意地自动生成一个适当填充的 Windows 资源文件。本节主要讲解如何用 qmake 处理一个 Windows 资源文件,并将其链接到一个可执行应用程序(EXE)或动态链接库(DLL)。简述详细说明生成 rc 文件系统变量windres示例更多参考详细说明一个链接的 Windows 资源文件包含许多元素,可

简述

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 文件

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

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

VERSION = 4.0.2.666

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

这里写图片描述

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

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

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

注意:如果设置了 RC_FILERES_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, 而且只有在 VERSIONRC_ICONS 变量被设置,并且 RC_FILERES_FILE 变量没有被设置的情况下生效。

RC_ICONS

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

VERSION

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

在 Windows 中,如果没有设置变量 RC_FILERES_FILE,将会自动生成一个 .rc 文件,生成的文件包含 FILEVERSIONPRODUCTVERSION,由主版本、次版本、补丁版本和构建号填充,每个数字必须在 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 文件,将新修改的值重新写入。

更多参考

目录
相关文章
|
1月前
|
计算机视觉 数据格式
使用opencv在Qt控件上播放mp4文件
使用opencv在Qt控件上播放mp4文件
34 2
|
1月前
【QT】创建、打开QT项目只显示.pro文件的问题解决
【QT】创建、打开QT项目只显示.pro文件的问题解决
|
2月前
|
存储 C++
基于Qt的简易文件压缩与解压缩工具设计与实现
基于Qt的简易文件压缩与解压缩工具设计与实现
19 1
|
2月前
|
监控 安全 Linux
Qt 文件类实战:解锁文件操作的无限可能
Qt 文件类实战:解锁文件操作的无限可能
51 1
|
6月前
|
存储 Cloud Native Linux
C++ Qt关于启动可执行文件存在的问题
C++ Qt关于启动可执行文件存在的问题
|
6月前
|
存储 Cloud Native API
C++ QT监测可执行文件exe是否运行
C++ QT监测可执行文件exe是否运行
|
6月前
|
Linux iOS开发 MacOS
19 QT - 标准文件对话框
19 QT - 标准文件对话框
33 0
|
6月前
|
安全
04 QT - .pro文件
04 QT - .pro文件
38 0
|
25天前
|
XML 数据可视化 程序员
Qt 中的项目文件解析和命名规范
Qt 中的项目文件解析和命名规范
|
2月前
|
存储 JSON C++
Qt cmake 增加qml文件:深度剖析Qt cmake 的qt_add_qml_module函数
Qt cmake 增加qml文件:深度剖析Qt cmake 的qt_add_qml_module函数
49 0