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

简述

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

通过设置系统变量 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 文件,将新修改的值重新写入。

更多参考

时间: 2024-07-31 22:49:22

Qt之生成Window资源文件(.rc 文件)的相关文章

Qt之添加Windows资源文件(.rc文件)

简述 在Windows下使用Qt时,通常会用到Windows的资源文件 - 为exe设置信息,其中包括:文件说明.产品名称.产品版本.版权等信息... 由于是Windows平台相关的东西,Qt助手中对于rc文件几乎没有任何介绍(在Setting the Application Icon一文中简单提到). 简述 资源信息 效果 实现 图标 参数 示例 VERSIONINFO 格式化VERSIONINFO 参数 更多参考 资源信息 效果 实现 首先,我们添加一个名为version.h的头文件,包含资

框架-滑动窗口协议模拟用vc++/mfc做的,其中代码缺少.rc文件不能在vc++6.0上运行!!怎么补

问题描述 滑动窗口协议模拟用vc++/mfc做的,其中代码缺少.rc文件不能在vc++6.0上运行!!怎么补 求教!! // Sender.cpp : Defines the class behaviors for the application. #include "stdafx.h" #include "Sender.h" #include "SenderDlg.h" #ifdef DEBUG #define new DEBUG_NEW #u

国际化-QT工程中如何多个UI文件使用一个.qrc文件

问题描述 QT工程中如何多个UI文件使用一个.qrc文件 10C VS2010 创建了一个QT项目,在其中又添加了一个UI,想让两个UI同时使用工程中的同一个.qrc文件进行国际化配置(ts文件翻译),请大神赐教!!!在线等,,急!! 解决方案 1.在qt designer中打开新添加的ui:2.在qt designer的资源浏览器中点击"编辑资源":3.在出现的编辑资源对话框上点击"打开资源文件"按钮,选择qrc文件即可. 解决方案二: Qt .qrc文件qt中的

visual studio 2005-winCE 6 用VS2005 (C++)编程,在 .rc文件中拖拽微调按钮,程序直接退出

问题描述 winCE 6 用VS2005 (C++)编程,在 .rc文件中拖拽微调按钮,程序直接退出 我是新接触winCE6.0,但是,我找不到 加 try catch 的地方啊~我是直接在添加资源的那个 .rc 文件里拖的微调按钮.不加微调按钮,可以运行,只要拖一个微调按钮就自动结束,还不报错. 又发现,不仅微调按钮,滑块什么的加到资源文件中,也会直接退出,但是类似输入框什么的,拖拽到这是什么原因?小弟卡在这里很久了,又非常着急,求指点!!!给我一个思考的方向就好!小弟都不知道自己错在哪里了.

rc文件为何打不开-.rc文件夹为何打不开 里面的 button icon什么的都没有

问题描述 .rc文件夹为何打不开 里面的 button icon什么的都没有 .rc文件打开时一直加载失败 这是为何 是软件安装问题还是别的原因 解决方案 用记事本打开看看,里面有内容么 解决方案二: 看你下面贴的rc源码是正常的呀,至少是有ICON,Dialog这些资源的. 解决方案三: // Microsoft Visual C++ generated resource script. // #include "resource.h" #define APSTUDIO_READON

Android中主要资源文件及文件夹介绍_Android

在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的 1:assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件被预编译,可以存放一些图片,html,js, css等文件. 2:res文件夹里面的多个文件夹的各自介绍 res/anim/ XML文件,它们被编译进逐帧动画(frame by frame animation)或补间动画(tweened animation)对象 res/drawable/ .png..9.png..jpg文件

windows编程-API下用对话框做主窗口,怎样修改.rc文件

问题描述 API下用对话框做主窗口,怎样修改.rc文件 在API下创建一个对话框作为主窗口,怎样修改.rc文件.我知道是在CAPTION下加上CLASS 类名, 然后createdialog(hinstance,类名,NULL,NULL),我想具体知道怎么修改.rc文件.或者其他的办法(出去setwindowlong),好像还有一种创建.DLG文件的方法,求各路大神告知. 解决方案 在你的VC++中切换到资源面板,展开对话框,找到窗口,属性,修改标题. 解决方案二: 直接用编译器资源视图中,修改

VC工程中的.rc文件和.rc2文件的区别

rc和rc2都是资源文件,包含了应用程序中用到的所有的资源. 两者不同在于:rc文件中的资源可以直接在VC集成环境中以可视化的方法进行编辑和修改; 而rc2中的资源不能在VC的集成环境下直接进行编辑和修改, 而是由根据需要手工地进行编辑. 在下面的地址找到关于RC2文件的描述: http://msdn.microsoft.com/zh-cn/library/y3sk7e6b(VS.80).aspx RC2文件:包含项目使用的附加资源的脚本文件.可以在项目的 .rc 文件的顶部包括 .rc2 文件

Android中主要资源文件及文件夹介绍

在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的 1:assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件被预编译,可以存放一些图片,html,js, css等文件. 2:res文件夹里面的多个文件夹的各自介绍 res/anim/ XML文件,它们被编译进逐帧动画(frame by frame animation)或补间动画(tweened animation)对象 res/drawable/ .png..9.png..jpg文件