Qt 設置軟件版本信息的實現(xiàn)
在運行程序期間設置版本信息
大部分的程序在運行之后都會提供一個關于的按鈕,通過點擊該按鈕并彈出一個關于界面,則可以查看相關的程序信息。此關于界面為用戶自定義的一個界面?;蛘呖梢栽谥鹘缑娴挠蚁陆秋@示出當前軟件的版本信息。兩種方式之間并不沖突。
可以參考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. 創(chuàng)建 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),表示程序構建的狀態(tài)
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L#設置目標操作系統(tǒng)
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. 創(chuàng)建 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();
}最佳實踐建議
單一真實來源:確保版本信息只有一個來源,避免多處定義導致不一致
自動化版本更新:
使用構建系統(tǒng)自動遞增版本號
集成到 CI/CD 流程中
版本格式:
遵循語義化版本控制 (SemVer) 規(guī)范 (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 )
.arg(QApplication::applicationDisplayName(),
QApplication::applicationVersion(),
QApplication::organizationName());
QMessageBox::about(nullptr, "關于", aboutText);
}對于大多數 QT 項目,方法一或方法二結合方法三是最常用的方式。
到此這篇關于Qt 設置軟件版本信息的實現(xiàn)的文章就介紹到這了,更多相關Qt 設置軟件版本信息內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C語言的fork函數在Linux中的進程操作及相關面試題講解
fork函數只能在類Unix的系統(tǒng)中使用,用于創(chuàng)建子線程,這里總結了C語言的fork函數在Linux中的進程操作及相關面試題講解,先來看一下C語言程序的存儲空間與進程示意:2016-06-06

