Visual Studio 2019 + Qt 项目版本信息新增到资源以及通过代码读取资源存储的版本信息

本文介绍了如何在VisualStudio2019中添加项目版本信息到资源,并通过代码在Qt程序中读取这些信息。首先,需要在解决方案中添加Version资源,然后可以使用VerQueryValue函数从资源中获取版本信息。文章提供了一个VersionUpdate类用于读取版本数据,包括产品名、公司信息、版权和版本号。最后展示了如何在main函数中调用这个类来获取和使用版本信息。
摘要由CSDN通过智能技术生成


前言

本文主要讲述如何在Visual Studio 2019 以及Qt结合的开发项目中,新增版本信息到资源;并且可以通过代码读取资源存储的版本信息。


一、如何在VisualStudio2019中新增项目版本信息

  1. 切换到解决方案视图中

  2. 在解决方案名称上右键

  3. 添加

  4. 资源

  5. 在这里插入图片描述

  6. 选择Version,点击新建

  7. 1

  8. 按照自己的公司,版权,版本信息填写并保存编译

二、在程序中调用项目版本信息

为了保证整个项目的统一性,建议版本维护就在这里维护,如果项目中,界面里要调用到相关信息,那么就通过如下操作对里面的信息进行读取

1.引入库version.lib

1.1.通过vs自带的属性页引入库

  1. 切换到属性管理器页
  2. 右键Debug/Release,添加新项目属性表
  3. 随便起个名
  4. 2
  5. 在链接器-输入-附加依赖项中添加version.lib
  6. 应用并确定

1.2.手动引入库

代码如下(示例):

#pragma comment(lib, "version.lib")

2.新增版本信息读取类

新增头文件

#pragma once
#include <QObject>
#include <windows.h>
#include <tchar.h>

class VersionUpdate
{
public:
	QString product_name = "";
	QString company_info = "";
	QString copyright_info = "";
	QString version_info = "";
	QString VersionUpdate::GetVersion()
	{
		int nMaxPathName = 4096; // Max length of file name/path
		TCHAR* pBuffer;
		UINT nItemLength;
		void* pData, * lpBuffer;
		QString sVersion;
		DWORD dwInfoSize, dwHandle;
		VS_FIXEDFILEINFO* pFileInfo;

		// Get the file path and name
		pBuffer = new TCHAR[nMaxPathName];
		GetModuleFileName(NULL, pBuffer, nMaxPathName - 1);

		// Get File Version Info size
		dwInfoSize = GetFileVersionInfoSize(pBuffer, &dwHandle);
		if (dwInfoSize > 0)
		{
			pData = new TCHAR[dwInfoSize];
			if (GetFileVersionInfo(pBuffer, dwHandle, dwInfoSize, pData))
			{
				//获取产品名称
				if (VerQueryValue(pData, _T("\\StringFileInfo\\080404b0\\ProductName"), &lpBuffer, &nItemLength))
				{
					product_name = QString::fromWCharArray((LPCTSTR)lpBuffer, nItemLength);
				}
				//获取公司信息
				if (VerQueryValue(pData, _T("\\StringFileInfo\\080404b0\\CompanyName"), &lpBuffer, &nItemLength))
				{
					company_info = QString::fromWCharArray((LPCTSTR)lpBuffer, nItemLength);
				}
				//获取版权信息
				if (VerQueryValue(pData, _T("\\StringFileInfo\\080404b0\\LegalCopyright"), &lpBuffer, &nItemLength))
				{
					copyright_info = QString::fromWCharArray((LPCTSTR)lpBuffer, nItemLength);
				}
				//获取主次版本号
				if (VerQueryValue(pData, _T("\\"), &lpBuffer, &nItemLength))
				{
					pFileInfo = (VS_FIXEDFILEINFO*)lpBuffer;
					sVersion = QString("%1.%2.%3.%4")
						.arg(pFileInfo->dwProductVersionMS >> 16)
						.arg(pFileInfo->dwProductVersionMS & 0xFFFF)
						.arg(pFileInfo->dwProductVersionLS >> 16)
						.arg(pFileInfo->dwProductVersionLS & 0xFFFF);
					// Calculate the product version as a number, you can delete the next statement if you don't need it.
					DWORD dwProductVersion = (pFileInfo->dwProductVersionMS >> 16) * 1000 +
						(pFileInfo->dwProductVersionMS & 0xFFFF) * 100 +
						(pFileInfo->dwProductVersionLS >> 16) * 10 +
						(pFileInfo->dwProductVersionLS & 0xFFFF) * 1;
					version_info = sVersion;
				}
			}

			// Delete the data buffer
			delete[] pData;
		}
		// Get rid of the allocated string buffer
		delete[] pBuffer;
		return sVersion;
	}
private:
};

我的办法很笨,反正就是这么用就能拿到。借用了别人的部分想法


3.调用类获取信息

//版本信息获取
#include "version_info.h"
int main(int argc, char* argv[])
{
		VersionUpdate newVersionInfo;
		newVersionInfo.GetVersion();
		C_NAME = newVersionInfo.product_name;
		soft_version = newVersionInfo.version_info;
		C_NAME.truncate(C_NAME.indexOf(QChar::Null));
		qDebug() << QString("日志记录开始 软件%1 版本%2").arg(C_NAME).arg(soft_version);
}

基本上就这样,最后版本信息就能存储并调用
原来的版本信息:
3

改后的版本信息:
4

总结

以上为如何在Visual Studio 2019 以及Qt结合的开发项目中,新增版本信息到资源;并且可以通过代码读取资源存储的版本信息。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迷失的walker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值