设为首页 收藏本站
查看: 856|回复: 0

[经验分享] Qt之Windows资源文件(.rc文件)

[复制链接]

尚未签到

发表于 2017-6-29 10:34:49 | 显示全部楼层 |阅读模式
简述
  在Windows下使用Qt时,通常会用到Windows的资源文件 - 为exe设置信息,其中包括:文件说明、产品名称、产品版本、版权等信息。。。
  由于是Windows平台相关的东西,Qt助手中对于rc文件几乎没有任何介绍(在Setting the Application Icon一文中简单提到)。






  • 简述
  • 资源信息

    • 效果
    • 实现


  • 图标

    • 参数
    • 示例


  • VERSIONINFO

    • 格式化VERSIONINFO
    • 参数



资源信息

效果
DSC0000.jpg


实现
  首先,我们添加一个名为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          "Qt Creator.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     "Qt Creator.exe"    // 原始文件名
#define PRODUCT_NAME           "Qt Creator"        // 产品名称
#define ORGANIZATION_DOMAIN    "https://www.qt.io/"  // 域名
#endif // VERSION_H

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  然后,添加资源文件并进行设置。。。例如: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 resource 和 VS_FIXEDFILEINFO structure
  定义一个版本信息资源。该资源包含有关文件的版本号、原始文件名等信息。该资源用于与Version Information一起使用。

格式化VERSIONINFO
  有两种方式格式化VERSIONINFO:

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

  • 1
  或者

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 BLOCK 或 VarFileInfo 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;
  http://blog.csdn.net/liang19890820/article/details/51880826

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-389239-1-1.html 上篇帖子: 老司机实战Windows Server Docker:5 Windows Server Dockerfile葵花宝典 下篇帖子: C#Windows Form简易计算器实现(上)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表