You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt应用版本设置问题:CMake构建后EXE属性未显示版本

解决方法

1. 问题本质

QApplication::setApplicationVersion() 仅用于设置Qt应用内部的版本标识,只会在Qt自带组件(如QMessageBox::about())中显示,不会自动写入Windows可执行文件的版本资源信息。要让.exe属性面板显示版本,需通过CMake配置Windows资源文件(.rc)。

2. 创建Windows资源文件

新建version.rc文件,内容如下:

#include <windows.h>

VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,0
PRODUCTVERSION 1,0,0,0
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904B0" // 英文(美国) + Unicode编码
        BEGIN
            VALUE "CompanyName", "你的公司名\0"
            VALUE "FileDescription", "应用描述\0"
            VALUE "FileVersion", "1.0.0.0\0"
            VALUE "ProductName", "产品名称\0"
            VALUE "ProductVersion", "1.0.0.0\0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x0409, 0x04B0 // 对应上面的语言编码
    END
END

可根据需求修改公司名、描述等字段,版本号需与FILEVERSION、PRODUCTVERSION的数字段对应。

3. 在CMakeLists.txt中关联资源文件

找到项目中添加可执行文件的代码块,将version.rc加入源文件列表:

add_executable(YourAppName
    main.cpp
    # 其他源文件...
    version.rc
)

若为跨平台项目,需添加Windows平台判断,避免其他平台编译报错:

if(WIN32)
    target_sources(YourAppName PRIVATE version.rc)
endif()

4. 可选:通过CMake变量统一版本号

为避免版本号重复维护,可在CMake中定义版本变量,通过模板文件自动生成资源文件:

  • 修改CMakeLists.txt:
set(APP_VERSION_MAJOR 1)
set(APP_VERSION_MINOR 0)
set(APP_VERSION_PATCH 0)
set(APP_VERSION_BUILD 0)

if(WIN32)
    configure_file(version.rc.in ${CMAKE_CURRENT_BINARY_DIR}/version.rc @ONLY)
    target_sources(YourAppName PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
endif()
  • 新建version.rc.in模板文件:
#include <windows.h>

VS_VERSION_INFO VERSIONINFO
FILEVERSION @APP_VERSION_MAJOR@,@APP_VERSION_MINOR@,@APP_VERSION_PATCH@,@APP_VERSION_BUILD@
PRODUCTVERSION @APP_VERSION_MAJOR@,@APP_VERSION_MINOR@,@APP_VERSION_PATCH@,@APP_VERSION_BUILD@
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904B0"
        BEGIN
            VALUE "CompanyName", "你的公司名\0"
            VALUE "FileDescription", "应用描述\0"
            VALUE "FileVersion", "@APP_VERSION_MAJOR@.@APP_VERSION_MINOR@.@APP_VERSION_PATCH@.@APP_VERSION_BUILD@\0"
            VALUE "ProductName", "产品名称\0"
            VALUE "ProductVersion", "@APP_VERSION_MAJOR@.@APP_VERSION_MINOR@.@APP_VERSION_PATCH@.@APP_VERSION_BUILD@\0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x0409, 0x04B0
    END
END

后续只需修改CMake中的版本变量,资源文件会自动同步更新。

内容的提问来源于stack exchange,提问作者Zamb.S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 12:10:59