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
相关产品推荐
相关产品推荐

