首页 > 其他分享 >Qt 设置软件的版本信息:QMake、CMake工程

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

时间:2024-05-31 16:13:16浏览次数:12  
标签:CMake Qt QMake VERSION rc 软件 版本信息 define

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

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

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

1 //设置相关信息
2 QCoreApplication::setApplicationName("APPNAME");
3 QCoreApplication::setApplicationVersion("1.0.0.0");
4 QCoreApplication::setOrganizationName("Qt");
5 QCoreApplication::setOrganizationDomain("www.qt.com");
1 //取出相关信息
2 QString appName = QCoreApplication::applicationName();
3 QString appVersion = QCoreApplication::applicationVersion();
4 QString orgDomain = QCoreApplication::organizationDomain();
5 QString orgName = QCoreApplication::organizationName();

如果用户需要设置更多的信息,则需要自己去实现,可以将所有的版本信息放置于一个version.h的头文件中。如下所示。

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

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

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

 1 #app.pro
 2  
 3 #程序版本
 4 VERSION = 1.0.0.0
 5 #程序图标
 6 RC_ICONS = app.ico
 7 #公司名称
 8 QMAKE_TARGET_COMPANY ="company"
 9 #程序说明
10 QMAKE_TARGET_DESCRIPTION = "test app"
11 #版权信息
12 QMAKE_TARGET_COPYRIGHT = "Copyright(C) 2017"
13 #程序名称
14 QMAKE_TARGET_PRODUCT = "app"
15 #程序语言
16 #0x0800代表和系统当前语言一致
17 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 // 图标
 5 IDI_ICON1 ICON PRODUCT_ICON
 6  
 7 // 版本信息
 8 VS_VERSION_INFO VERSIONINFO
 9 FILEVERSION FILE_VERSION
10 PRODUCTVERSION PRODUCT_VERSION
11 FILEFLAGSMASK 0x3fL
12 #ifdef _DEBUG
13 FILEFLAGS 0x1L
14 #else
15 FILEFLAGS 0x0L
16 #endif
17 FILEOS 0x40004L
18 FILETYPE 0x1L
19 FILESUBTYPE 0x0L
20 BEGIN
21 BLOCK "StringFileInfo"
22 BEGIN
23 BLOCK "080404b0"
24 BEGIN
25 VALUE "CompanyName", COMPANY_NAME
26 VALUE "FileDescription", FILE_DESCRIPTION
27 VALUE "FileVersion", FILE_VERSION_STR
28 VALUE "InternalName", INTERNAL_NAME
29 VALUE "LegalCopyright", LEGAL_COPYRIGHT
30 VALUE "OriginalFilename", ORIGINAL_FILE_NAME
31 VALUE "ProductName", PRODUCT_NAME
32 VALUE "ProductVersion", PRODUCT_VERSION_STR
33 END
34 END
35 BLOCK "VarFileInfo"
36 BEGIN
37 VALUE "Translation", 0x804, 1200
38 END
39 END

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

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

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

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

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

 1 int main(int argc, char *argv[])
 2 {
 3   QApplication a(argc, argv);
 4 
 5 //显示版本信息
 6 if (a.arguments().size() == 1 && a.arguments().at(0) == "-v")
 7 {
 8   QString appInfo = "appInfo";
 9   std::cout << appInfo.toStdString();
10   return a.exec();
11 }
12 }

配置文件记录软件信息
  对于大型的集成系统来说,可以通过一个统一的配置文件来读取软件的配置信息,该配置文件必须由集成系统提供,各个子模块软件提供信息。

标签:CMake,Qt,QMake,VERSION,rc,软件,版本信息,define
From: https://www.cnblogs.com/ybqjymy/p/18224733

相关文章

  • cmake构建Qt插件
    cmake构建Qt插件为什么要使用插件在进行大型客户端项目的开发时,往往需要分成很多的功能模块,这是架构在设计时候就必须考虑的,良好的架构应该易于扩展,使用动态库就可以很好的实现,但是动态库使用中会使用到具体的定义,高层模块反而依赖于底层模块的实现,这是不符合设计模式中依赖反转......
  • 【Java代码调用华为云IoT MQTT】
    目录欢迎关注微信公众号:数据科学与艺术作者WX:superhe199下面是使用Java代码调用华为云IoTMQTT:importorg.eclipse.paho.client.mqttv3.*;importorg.eclipse.paho.client.mqttv3.persist.MemoryPersistence;publicclassHuaweiCloudMqttExample{publi......
  • Ubuntu上使用QT creator运行cuda程序
    突发奇想想尝试一下QT界面中使用CUDA加速过的程序,然后查了一下资料,总结一下有以下几点吧1、CUDA配置全部放在.pro文件中2、main.cpp为主函数使用g++编译3、kernel.cu为核函数使用nvcc编译不多说上代码以下为main.cpp代码   #include<QtCore/QCoreApplication>       ......
  • QT实现对文件名进行排序
    QStringListQDir::entryList(QDir::Filtersfilters=NoFilter,QDir::SortFlagssort=NoSort)const,该成员函数实现根据路径获取该文件夹下文件,其中QDir::SortFlags是一个枚举类型,各个常量参照QT的官方文档:QDirfiledir(dir_path);QStringListfilenames=filedir.entryL......
  • 深入探索Qt框架系列之信号槽原理(三)
    前面两篇分别介绍了QObject::connect和QMetaObject::Connection,那么信号槽机制的基础已经介绍完了,本文将介绍信号槽机制是如何从信号到槽的,以及多线程下是如何工作的。信号槽机制源码解析1.信号的触发以该系列的第一篇文章中的示例举例:test_moc.h:classtest_moc:p......
  • Qt使用qBreakpad定位崩溃位置(2)
    软件调试Qt使用qBreakpad定位崩溃位置(2)目录软件调试Qt使用qBreakpad定位崩溃位置(2)前言1、Google-Breakpad2、qBreakpad3、crashpad4、注意Linux下1、环境2、qBreakpad源码准备3、qBreakpad编译4、测试qBreakpad5、dump文件调试5.1编译breakpad5.2开始分析dmp文件Windows下1......
  • QT_5.2_matlab组合多维数组
    完整代码示例以下是一个完整的代码示例,展示如何将多个测试数据拼接成一个四维数组:%示例测试数据nn=10;%假设有10个测试样本TestData=cell(nn,6);%创建一个包含10个样本的单元格数组,每个样本包含6个二维矩阵%生成一些随机数据作为示例fork=1:nnforj=1......
  • Windows下Qt使用dump定位崩溃位置(1)
    软件调试Windows下Qt使用dump定位崩溃位置(1)目录软件调试Windows下Qt使用dump定位崩溃位置(1)1、Qt崩溃定位方法2、什么是dump文件3、使用vs调试dmp4、下载Windows符号表5、下载Qt符号表6、主要代码7、源代码更多精彩内容......
  • Qt-qrencode开发-生成、显示二维码
    Qt-qrencode开发-生成二维码......
  • QtQuick实现图片查看器
    QtQuick实现图片查看器介绍图片查看器是非常值得新手入门QtQuick的项目,通过该项目,用户可以很快熟悉QML语法和资源文件存储,还可以使用通过操作文件夹实现多图像查看。实战首先打开QtCreator,创建QtQuick项目,我使用的是Qt6.5版本,但是其他版本应该也可以。我们先新建一个QML文件,......