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;

    更多参考

  • 相关阅读:
    java的构造方法 java程序员
    No result defined for action cxd.action.QueryAction and result success java程序员
    大学毕业后拉开差距的真正原因 java程序员
    hibernate的回滚 java程序员
    验证码 getOutputStream() has already been called for this response异常的原因和解决方法 java程序员
    浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓 java程序员
    你平静的生活或许会在某个不可预见的时刻被彻底打碎 java程序员
    Spring配置文件中使用ref local与ref bean的区别. 在ApplicationResources.properties文件中,使用<ref bean>与<ref local>方法如下 java程序员
    poj1416Shredding Company
    poj1905Expanding Rods
  • 原文地址:https://www.cnblogs.com/new0801/p/6146584.html
Copyright © 2011-2022 走看看