Qt 設(shè)置軟件版本信息的實(shí)現(xiàn)
在運(yùn)行程序期間設(shè)置版本信息
大部分的程序在運(yùn)行之后都會(huì)提供一個(gè)關(guān)于的按鈕,通過(guò)點(diǎn)擊該按鈕并彈出一個(gè)關(guān)于界面,則可以查看相關(guān)的程序信息。此關(guān)于界面為用戶自定義的一個(gè)界面?;蛘呖梢栽谥鹘缑娴挠蚁陆秋@示出當(dāng)前軟件的版本信息。兩種方式之間并不沖突。
可以參考VS
在 QT 中設(shè)置軟件版本信息的幾種方法
方法一:通過(guò) .pro 文件設(shè)置 (qmake 項(xiàng)目)
1. 在 .pro 文件中添加版本信息
# 設(shè)置應(yīng)用程序版本 VERSION = 1.2.3 # 或者使用更詳細(xì)的版本設(shè)置 VER_MAJ = 1 VER_MIN = 2 VER_PAT = 3 VERSION = $$join(VER_MAJ, ., VER_MIN, ., VER_PAT) # Windows 資源文件設(shè)置 (可選) 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#資源編譯器我們要定義的是一個(gè)版本信息資源 FILEVERSION 1,1,1,0#設(shè)置文件版本號(hào) PRODUCTVERSION 1,2,3,0#設(shè)置產(chǎn)品版本號(hào),代表整體產(chǎn)品的版本(可和文件版本不同) FILEFLAGSMASK 0x3fL#掩碼(Mask)用于指定有效的標(biāo)志位(file flags) #ifdef _DEBUG#設(shè)置文件標(biāo)志(FileFlags),表示程序構(gòu)建的狀態(tài) FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x40004L#設(shè)置目標(biāo)操作系統(tǒng) FILETYPE 0x1L#設(shè)置文件類型,0x1L 表示 VFT_APP,應(yīng)用程序(EXE) FILESUBTYPE 0x0L#子類型,應(yīng)用程序通常為 0x0L(無(wú)子類型)。 BEGIN#開(kāi)始版本資源的內(nèi)容定義#語(yǔ)言和字符集標(biāo)識(shí)符:0409:表示語(yǔ)言為英文(美國(guó) English - United States)04b0:表示 Unicode 編碼頁(yè)(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"#內(nèi)部名稱,通常為項(xiàng)目名。 VALUE "LegalCopyright", "@HXQ Corporation.All rights reserved. "#版權(quán)信息。 VALUE "OriginalFilename", "HXQ Robot Vision 2025.exe"#原始文件名,即編譯時(shí)生成的文件名。 VALUE "ProductName", "HXQ Robot Vision 2025"# 產(chǎn)品名稱。 VALUE "ProductVersion", "1.1.1.0"# 字符串形式的產(chǎn)品版本。 END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END
方法二:通過(guò) CMake 設(shè)置 (CMake 項(xiàng)目)
1. 在 CMakeLists.txt 中設(shè)置版本
# 設(shè)置項(xiàng)目版本 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
方法三:運(yùn)行時(shí)設(shè)置和獲取版本信息
在代碼中獲取版本信息
#include <QApplication> #include <QVersionNumber> #include <QDebug> void checkVersion() { // 獲取應(yīng)用程序版本 QString versionStr = QApplication::applicationVersion(); qDebug() << "Application version:" << versionStr; // 使用 QVersionNumber 進(jìn)行版本比較 QVersionNumber currentVersion = QVersionNumber::fromString(versionStr); QVersionNumber minRequiredVersion(1, 0, 0); if(currentVersion < minRequiredVersion) { qWarning() << "This version is too old!"; } // 獲取其他元數(shù)據(jù) qDebug() << "Application name:" << QApplication::applicationName(); qDebug() << "Organization:" << QApplication::organizationName(); }
最佳實(shí)踐建議
單一真實(shí)來(lái)源:確保版本信息只有一個(gè)來(lái)源,避免多處定義導(dǎo)致不一致
自動(dòng)化版本更新:
使用構(gòu)建系統(tǒng)自動(dòng)遞增版本號(hào)
集成到 CI/CD 流程中
版本格式:
遵循語(yǔ)義化版本控制 (SemVer) 規(guī)范 (MAJOR.MINOR.PATCH)
例如:1.2.3 表示主版本1,次版本2,修訂版本3
顯示版本信息:
在"關(guān)于"對(duì)話框中顯示完整版本信息
在日志中輸出版本信息以便調(diào)試
Windows 特殊處理:
確保資源文件中的版本與應(yīng)用程序版本一致
版本資源會(huì)影響文件屬性中的版本信息
完整示例:在"關(guān)于"對(duì)話框中顯示版本
#include <QMessageBox> #include <QApplication> void showAboutDialog() { QString aboutText = QString( "<h2>%1</h2>" "<p>版本: %2</p>" "<p>Copyright ? 2023 %3. 保留所有權(quán)利。</p>" "<p>了解更多: <a ) .arg(QApplication::applicationDisplayName(), QApplication::applicationVersion(), QApplication::organizationName()); QMessageBox::about(nullptr, "關(guān)于", aboutText); }
對(duì)于大多數(shù) QT 項(xiàng)目,方法一或方法二結(jié)合方法三是最常用的方式。
到此這篇關(guān)于Qt 設(shè)置軟件版本信息的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Qt 設(shè)置軟件版本信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)旋轉(zhuǎn)鏈表的實(shí)現(xiàn)
這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)旋轉(zhuǎn)鏈表的實(shí)現(xiàn)的相關(guān)資料,這里提供實(shí)例幫助大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-08-08C語(yǔ)言入門(mén)篇--學(xué)習(xí)選擇,if,switch語(yǔ)句以及代碼塊
本篇文章是基礎(chǔ)篇,適合c語(yǔ)言剛?cè)腴T(mén)的朋友,本文主要帶大家學(xué)習(xí)一下C語(yǔ)言的選擇,if,switch語(yǔ)句及代碼塊,幫助大家快速入門(mén)c語(yǔ)言的世界,更好的理解c語(yǔ)言2021-08-08C語(yǔ)言實(shí)現(xiàn)三子棋實(shí)例代碼
大家好,本篇文章主要講的是C語(yǔ)言實(shí)現(xiàn)三子棋實(shí)例代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2022-01-01C語(yǔ)言基本排序算法之插入排序與直接選擇排序?qū)崿F(xiàn)方法
這篇文章主要介紹了C語(yǔ)言基本排序算法之插入排序與直接選擇排序?qū)崿F(xiàn)方法,結(jié)合具體實(shí)例形式分析了插入排序與直接選擇排序的定義、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-09-09C++實(shí)現(xiàn)一維向量旋轉(zhuǎn)算法
這篇文章主要介紹了C++實(shí)現(xiàn)一維向量旋轉(zhuǎn)算法,非常實(shí)用的經(jīng)典算法,需要的朋友可以參考下2014-08-08C/C++計(jì)算程序執(zhí)行時(shí)間的幾種方法實(shí)現(xiàn)
本文主要介紹了C/C++計(jì)算程序執(zhí)行時(shí)間的幾種方法實(shí)現(xiàn),包括使用clock()函數(shù)、使用庫(kù)和使用time.h頭文件中的time()函數(shù),具有一定的參考價(jià)值,感興趣的可以了解一下2025-02-02C++實(shí)現(xiàn)十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)的數(shù)學(xué)算法
這篇文章和大家分享一下我個(gè)人對(duì)十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)的想法,目前暫時(shí)更新只整數(shù)十進(jìn)制的轉(zhuǎn)換,后續(xù)會(huì)更新帶有小數(shù)的進(jìn)制轉(zhuǎn)換,代碼使用c++實(shí)現(xiàn)2021-09-09