• Qt 设置软件的版本信息:QMake、CMake工程


     

    本文借鉴了Qt 设置软件的版本信息 - 疯狂delphi - 博客园 (cnblogs.com)

     在原文基础增加了CMake工程实现的方法。

    Qt设置软件的版本等信息
    对于Qt开发的软件,我们如何去方便的查看其软件的版本信息。这里提供了几种方式。

    在运行程序期间设置版本信息
    大部分的程序在运行之后都会提供一个关于的按钮,通过点击该按钮并弹出一个关于界面,则可以查看相关的程序信息。此关于界面为用户自定义的一个界面。或者可以在主界面的右下角显示出当前软件的版本信息。两种方式之间并不冲突。

    Qt的QCoreApplication类提供一些软件版本信息的静态公共接口,如下所示。

    //设置相关信息
    QCoreApplication::setApplicationName("APPNAME");
    QCoreApplication::setApplicationVersion("1.0.0.0");
    QCoreApplication::setOrganizationName("Qt");
    QCoreApplication::setOrganizationDomain("www.qt.com");

    //取出相关信息
    QString appName = QCoreApplication::applicationName();
    QString appVersion = QCoreApplication::applicationVersion();
    QString orgDomain = QCoreApplication::organizationDomain();
    QString orgName = QCoreApplication::organizationName();
    如果用户需要设置更多的信息,则需要自己去实现,可以将所有的版本信息放置于一个version.h的头文件中。如下所示。

    1. #ifndef VERSION_H
    2. #define VERSION_H
    3. #define PRODUCT_ICON "myapp.ico" // 图标
    4. #define FILE_VERSION 4,0,2,666 // 文件版本
    5. #define FILE_VERSION_STR "4.0.2.666"
    6. #define PRODUCT_VERSION 4,0,2,666 // 产品版本
    7. #define PRODUCT_VERSION_STR "4.0.2.666"
    8. #define COMPANY_NAME "Digia"
    9. #define INTERNAL_NAME "MyApp.exe"
    10. #define FILE_DESCRIPTION "Qt Creator based on Qt 5.7.0 (MSVC 2013, 32 bit)" // 文件说明
    11. #define LEGAL_COPYRIGHT "Copyright 2008-2016 The Qt Company Ltd. All rights reserved." // 版权
    12. #define ORIGINAL_FILE_NAME "MyApp.exe" // 原始文件名
    13. #define PRODUCT_NAME "Qt Creator" // 产品名称
    14. #define ORGANIZATION_DOMAIN "https://www.qt.io/" // 域名
    15. #endif // VERSION_H

    在不运行程序期间设置版本信息,有的时候我们不想运行软件或者当前环境不支持软件正常运行,那么此时该如何设置软件版本信息。

    对于Qt使用QMake来管理工程来说,可以直接在.pro文件中设置相关的软件信息。代码示例如下。

    1. #app.pro
    2. #程序版本
    3. VERSION = 1.0.0.0
    4. #程序图标
    5. RC_ICONS = app.ico
    6. #公司名称
    7. QMAKE_TARGET_COMPANY ="company"
    8. #程序说明
    9. QMAKE_TARGET_DESCRIPTION = "test app"
    10. #版权信息
    11. QMAKE_TARGET_COPYRIGHT = "Copyright(C) 2017"
    12. #程序名称
    13. QMAKE_TARGET_PRODUCT = "app"
    14. #程序语言
    15. #0x0800代表和系统当前语言一致
    16. RC_LANG = 0x0800

    则对于生成程序我们可以右键属性面板的详细信息中查看到设置的软件信息。

    当然Qt工程其实使用的windows平台下面的RC文件,那么我们也可以直接建立一个rc文件,在该文件中设置相关的软件信息。QMake和CMake实现的思路一样,都是调用rc文件。这里需要注意的一点是VC编译器使用的GBK编码,我们如果把rc文件编码改成非GBK编码,将会出现乱码的情况。

    我们创建的rc文件:

    1. #include "winres.h"
    2. #include "version.h"
    3. // 图标
    4. IDI_ICON1 ICON PRODUCT_ICON
    5. // 版本信息
    6. VS_VERSION_INFO VERSIONINFO
    7. FILEVERSION FILE_VERSION
    8. PRODUCTVERSION PRODUCT_VERSION
    9. FILEFLAGSMASK 0x3fL
    10. #ifdef _DEBUG
    11. FILEFLAGS 0x1L
    12. #else
    13. FILEFLAGS 0x0L
    14. #endif
    15. FILEOS 0x40004L
    16. FILETYPE 0x1L
    17. FILESUBTYPE 0x0L
    18. BEGIN
    19. BLOCK "StringFileInfo"
    20. BEGIN
    21. BLOCK "080404b0"
    22. BEGIN
    23. VALUE "CompanyName", COMPANY_NAME
    24. VALUE "FileDescription", FILE_DESCRIPTION
    25. VALUE "FileVersion", FILE_VERSION_STR
    26. VALUE "InternalName", INTERNAL_NAME
    27. VALUE "LegalCopyright", LEGAL_COPYRIGHT
    28. VALUE "OriginalFilename", ORIGINAL_FILE_NAME
    29. VALUE "ProductName", PRODUCT_NAME
    30. VALUE "ProductVersion", PRODUCT_VERSION_STR
    31. END
    32. END
    33. BLOCK "VarFileInfo"
    34. BEGIN
    35. VALUE "Translation", 0x804, 1200
    36. END
    37. END

    QMake调用rc文件的方法,在pro文件添加如下语句:

    1. # 设置输出APP文件名,这条语句和本文没啥关系。只是简单记录一下。
    2. # SecurityHelperSOAP只是输出可执行程序的文件名,可随意改动。不推荐使用中文。会出现乱码。
    3. TARGET = SecurityHelperSOAP
    4. # qmake的rc文件调用
    5. # APP信息、版本信息
    6. RC_FILE += SecurityHelperSOAP.rc

    CMake调用rc文件的方法,在CMakeLists.txt项目文件中添加如下代码:

    1. #我们需要修改的地方:${CMAKE_CURRENT_SOURCE_DIR}/app.rc这是rc文件的路径
    2. set(app_icon_resource_windows "${CMAKE_CURRENT_SOURCE_DIR}/app.rc")
    3. if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    4. qt_add_executable(KR-MACScanner
    5. MANUAL_FINALIZATION
    6. ${PROJECT_SOURCES}
    7. ${app_icon_resource_windows}
    8. )

    linux 平台下设置软件信息
    由于linux平台下面并没有RC文件,所以需要使用命令行来显示版本信息,即通过命令行执行 myApp -v 来显示版本信息。
    相关相关代码如下:

    int main(int argc, char *argv[])
    {
    QApplication a(argc, argv);

    //显示版本信息
    if (a.arguments().size() == 1 && a.arguments().at(0) == "-v")
    {
    QString appInfo = "appInfo";
    std::cout << appInfo.toStdString();
    return a.exec();
    }
    }
    配置文件记录软件信息
    对于大型的集成系统来说,可以通过一个统一的配置文件来读取软件的配置信息,该配置文件必须由集成系统提供,各个子模块软件提供信息。

  • 相关阅读:
    Redis 的线程模型
    极客时间Kafka - 05 Kafka 生产者发送消息可靠性保障|幂等生产者和事务生产者
    操作系统学习笔记---计算机系统概述
    2022做跨境为什么要首选Lazada和shopee,现在入驻会面临哪些挑战和机遇?
    Visual Studio Code: launch.json
    串口通信
    微服务基础,分布式核心,常见微服务框架,SpringCloud概述,搭建SpringCloud微服务项目详细步骤,含源代码
    MySQL 默认隔离级别是RR,为什么阿里等大厂会改成RC?
    Spring Data Envers:使用实体修订进行审计
    大二Web课程设计期末考试——基于HTML+CSS+JavaScript+jQuery电商类化妆品购物商城
  • 原文地址:https://blog.csdn.net/weixin_40583088/article/details/133578472