当前位置: 代码网 > it编程>编程语言>C/C++ > Qt 设置软件版本信息的实现

Qt 设置软件版本信息的实现

2025年06月19日 C/C++ 我要评论
在运行程序期间设置版本信息大部分的程序在运行之后都会提供一个关于的按钮,通过点击该按钮并弹出一个关于界面,则可以查看相关的程序信息。此关于界面为用户自定义的一个界面。或者可以在主界面的右下角显示出当前

在运行程序期间设置版本信息

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

可以参考vs

在 qt 中设置软件版本信息的几种方法

方法一:通过 .pro 文件设置 (qmake 项目)

1. 在 .pro 文件中添加版本信息

# 设置应用程序版本
version = 1.2.3

# 或者使用更详细的版本设置
ver_maj = 1
ver_min = 2
ver_pat = 3
version = $$join(ver_maj, ., ver_min, ., ver_pat)

# windows 资源文件设置 (可选)
win32 {
    rc_icons = myapp.ico
    versionrc = version.rc
    rc_file = $$versionrc
}

2. 创建 version.rc 文件 (windows)

#include <windows.h>#引入 windows 头文件
 
vs_version_info versioninfo#资源编译器我们要定义的是一个版本信息资源
fileversion    1,1,1,0#设置文件版本号
productversion 1,2,3,0#设置产品版本号,代表整体产品的版本(可和文件版本不同)
fileflagsmask 0x3fl#掩码(mask)用于指定有效的标志位(file flags)
#ifdef _debug#设置文件标志(fileflags),表示程序构建的状态
fileflags 0x1l
#else
fileflags 0x0l
#endif
fileos 0x40004l#设置目标操作系统
filetype 0x1l#设置文件类型,0x1l 表示 vft_app,应用程序(exe)
filesubtype 0x0l#子类型,应用程序通常为 0x0l(无子类型)。
begin#开始版本资源的内容定义#语言和字符集标识符:0409:表示语言为英文(美国 english - united states)04b0:表示 unicode 编码页(1200)
    block "stringfileinfo"
    begin
        block "040904b0"
        begin
            value "companyname", "hxq"
            value "filedescription", "hxq robot vision 2025"
            value "fileversion", "1.1.1.0"
            value "internalname", "hxq robot vision 2025"#内部名称,通常为项目名。
            value "legalcopyright", "@hxq corporation.all rights reserved. "#版权信息。
            value "originalfilename", "hxq robot vision 2025.exe"#原始文件名,即编译时生成的文件名。
            value "productname", "hxq robot vision 2025"# 产品名称。
            value "productversion", "1.1.1.0"# 字符串形式的产品版本。
        end
    end
    block "varfileinfo"
    begin
        value "translation", 0x409, 1200
    end
end

方法二:通过 cmake 设置 (cmake 项目)

1. 在 cmakelists.txt 中设置版本

# 设置项目版本
set(project_version_major 1)
set(project_version_minor 2)
set(project_version_patch 3)
project(yourapp version ${project_version_major}.${project_version_minor}.${project_version_patch})

# 配置版本头文件
configure_file(
    "${cmake_current_source_dir}/version.h.in"
    "${cmake_current_binary_dir}/version.h"
)

# windows 资源文件
if(win32)
    set(rc_file "${cmake_current_source_dir}/version.rc")
    configure_file("${rc_file}.in" "${rc_file}")
    set(app_icon "${cmake_current_source_dir}/myapp.ico")
    list(append sources "${rc_file}")
endif()

2. 创建 version.h.in 文件

#ifndef version_h
#define version_h

#define project_version_major @project_version_major@
#define project_version_minor @project_version_minor@
#define project_version_patch @project_version_patch@
#define project_version "${project_version_major}.${project_version_minor}.${project_version_patch}"

#endif // version_h

方法三:运行时设置和获取版本信息

在代码中获取版本信息

#include <qapplication>
#include <qversionnumber>
#include <qdebug>

void checkversion()
{
    // 获取应用程序版本
    qstring versionstr = qapplication::applicationversion();
    qdebug() << "application version:" << versionstr;
    
    // 使用 qversionnumber 进行版本比较
    qversionnumber currentversion = qversionnumber::fromstring(versionstr);
    qversionnumber minrequiredversion(1, 0, 0);
    
    if(currentversion < minrequiredversion) {
        qwarning() << "this version is too old!";
    }
    
    // 获取其他元数据
    qdebug() << "application name:" << qapplication::applicationname();
    qdebug() << "organization:" << qapplication::organizationname();
}

最佳实践建议

  • 单一真实来源:确保版本信息只有一个来源,避免多处定义导致不一致

  • 自动化版本更新

    • 使用构建系统自动递增版本号

    • 集成到 ci/cd 流程中

  • 版本格式

    • 遵循语义化版本控制 (semver) 规范 (major.minor.patch)

    • 例如:1.2.3 表示主版本1,次版本2,修订版本3

  • 显示版本信息

    • 在"关于"对话框中显示完整版本信息

    • 在日志中输出版本信息以便调试

  • windows 特殊处理

    • 确保资源文件中的版本与应用程序版本一致

    • 版本资源会影响文件属性中的版本信息

完整示例:在"关于"对话框中显示版本

#include <qmessagebox>
#include <qapplication>

void showaboutdialog()
{
    qstring abouttext = qstring(
        "<h2>%1</h2>"
        "<p>版本: %2</p>"
        "<p>copyright © 2023 %3. 保留所有权利。</p>"
        "<p>了解更多: <a href='https://www.yourcompany.com'>www.yourcompany.com</a></p>")
        .arg(qapplication::applicationdisplayname(),
             qapplication::applicationversion(),
             qapplication::organizationname());
    
    qmessagebox::about(nullptr, "关于", abouttext);
}

对于大多数 qt 项目,方法一或方法二结合方法三是最常用的方式。

到此这篇关于qt 设置软件版本信息的实现的文章就介绍到这了,更多相关qt 设置软件版本信息内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com