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;

    更多参考

  • 相关阅读:
    共享纸巾更换主板代码分析 共享纸巾主板更换后的对接代码
    Python Django Ajax 传递列表数据
    Python Django migrate 报错解决办法
    Python 创建字典的多种方式
    Python 两个list合并成一个字典
    Python 正则 re.sub替换
    python Django Ajax基础
    Python Django 获取表单数据的三种方式
    python Django html 模板循环条件
    Python Django ORM 字段类型、参数、外键操作
  • 原文地址:https://www.cnblogs.com/itrena/p/5938269.html
Copyright © 2011-2022 走看看