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

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

2016-07-11 15:34 633 查看

简述

在Windows下使用Qt时,通常会用到Windows的资源文件 - 为exe设置信息,其中包括:文件说明、产品名称、产品版本、版权等信息。。。

由于是Windows平台相关的东西,Qt助手中对于rc文件几乎没有任何介绍(在Setting the Application Icon一文中简单提到)。

简述

资源信息
效果

实现

图标
参数

示例

VERSIONINFO
格式化VERSIONINFO

参数

更多参考

资源信息

效果



实现

首先,我们添加一个名为version.h的头文件,包含资源信息。

#ifndef VERSION_H
#define VERSION_H

#define PRODUCT_ICON           "myapp.ico" // 图标

#define FILE_VERSION           4,0,2,666   // 文件版本
#define FILE_VERSION_STR       "4.0.2.666"
#define PRODUCT_VERSION        4,0,2,666   // 产品版本
#define PRODUCT_VERSION_STR    "4.0.2.666"
#define COMPANY_NAME           "Digia"
#define INTERNAL_NAME          "MyApp.exe"
#define FILE_DESCRIPTION       "Qt Creator based on Qt 5.7.0 (MSVC 2013, 32 bit)"  // 文件说明
#define LEGAL_COPYRIGHT        "Copyright 2008-2016 The Qt Company Ltd. All rights reserved." // 版权
#define ORIGINAL_FILE_NAME     "MyApp.exe"    // 原始文件名
#define PRODUCT_NAME           "Qt Creator"        // 产品名称
#define ORGANIZATION_DOMAIN    "https://www.qt.io/"  // 域名

#endif // VERSION_H


然后,添加资源文件并进行设置。。。例如:myapp.rc

#include "winres.h"
#include "version.h"

// 图标
IDI_ICON1       ICON      PRODUCT_ICON

// 版本信息
VS_VERSION_INFO VERSIONINFO
FILEVERSION FILE_VERSION
PRODUCTVERSION PRODUCT_VERSION
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "080404b0"
BEGIN
VALUE "CompanyName", COMPANY_NAME
VALUE "FileDescription", FILE_DESCRIPTION
VALUE "FileVersion", FILE_VERSION_STR
VALUE "InternalName", INTERNAL_NAME
VALUE "LegalCopyright", LEGAL_COPYRIGHT
VALUE "OriginalFilename", ORIGINAL_FILE_NAME
VALUE "ProductName", PRODUCT_NAME
VALUE "ProductVersion", PRODUCT_VERSION_STR
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x804, 1200
END
END


最后,在.pro文件中,添加:

RC_FILE += myapp.rc


图标

参考MSDN:ICON resource

为指定应用程序定义图标:

nameID ICON filename


参数

nameID

唯一名称或一个16位无符号整数值,识别资源。

filename

包含该资源的文件名称。该名称必须是有效的文件名;如果文件不在当前工作目录,那么必须使用完整路径。路径应该是带引号的字符串。

示例

下面示例,定义了两个资源图标:

desk1   ICON "desk.ico"
11      ICON "custom.ico"


可参考:Using Icons

VERSIONINFO

见MSDN:VERSIONINFO resourceVS_FIXEDFILEINFO structure

定义一个版本信息资源。该资源包含有关文件的版本号、原始文件名等信息。该资源用于与Version Information一起使用。

格式化VERSIONINFO

有两种方式格式化VERSIONINFO:

versionID VERSIONINFO fixed-info  { block-statement . . . }


或者

versionID VERSIONINFO
fixed-info
BEGIN
block-statement
. . .
END


参数

versionID

版本信息资源标识符。此值必须为1。

fixed-info

版本信息,如文件版本和操作系统。此参数包括以下语句:

字段描述
FILEVERSION version文件的二进制版本号。该版本由四个16位整数定义。例如:“FILEVERSION 3,10,0,61”
PRODUCTVERSION version产品版本,同上
FILEFLAGSMASK fileflagsmask属性的掩模
FILEFLAGS fileflags文件属性
FILEOS fileos用于何种操作系统
FILETYPE filetype文件一般类型(对于dll,类型为 VFT_DLL)
FILESUBTYPE subtype文件子类型
block-statement

指定一个或多个版本信息块。块包含字符串信息或可变信息。

欲了解更多信息,请参考:StringFileInfo BLOCKVarFileInfo BLOCK

对应的结构体:

typedef struct tagVS_FIXEDFILEINFO {
DWORD dwSignature;
DWORD dwStrucVersion;
DWORD dwFileVersionMS;
DWORD dwFileVersionLS;
DWORD dwProductVersionMS;
DWORD dwProductVersionLS;
DWORD dwFileFlagsMask;
DWORD dwFileFlags;
DWORD dwFileOS;
DWORD dwFileType;
DWORD dwFileSubtype;
DWORD dwFileDateMS;
DWORD dwFileDateLS;
} VS_FIXEDFILEINFO;


更多参考

Qt之生成Window资源文件(.rc 文件)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息