zoukankan      html  css  js  c++  java
  • Qt之添加Windows资源文件(.rc文件)

    简述

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

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

    资源信息

    效果

    这里写图片描述

    实现

    首先,我们添加一个名为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

    然后,添加资源文件并进行设置。。。例如: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 文件子类型


    对应的结构体:

    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;

    更多参考

  • 相关阅读:
    nyoj592 spiral grid
    ny788 又见Alice and Bob
    hdoj 1166 敌兵布阵 线段数和树状数组
    nyoj228 士兵杀敌(5)插线问线
    nyoj576 集齐卡片赢大奖(一)
    ny269 VF
    AC Again hdoj 1582 搜索
    nyoj123 士兵杀敌(四)树状数组 插线问点
    CRAVAT: Cancer-Related Analysis of VAriants Toolkit
    第二代无创胎儿基因组分析结果
  • 原文地址:https://www.cnblogs.com/new0801/p/6146584.html
Copyright © 2011-2022 走看看