当前位置: 首页 > news >正文

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

文章目录

  • 前言
  • 一、如何在VisualStudio2019中新增项目版本信息
  • 二、在程序中调用项目版本信息
    • 1.引入库version.lib
      • 1.1.通过vs自带的属性页引入库
      • 1.2.手动引入库
    • 2.新增版本信息读取类
    • 3.调用类获取信息
  • 总结


前言

本文主要讲述如何在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/pathTCHAR* pBuffer;UINT nItemLength;void* pData, * lpBuffer;QString sVersion;DWORD dwInfoSize, dwHandle;VS_FIXEDFILEINFO* pFileInfo;// Get the file path and namepBuffer = new TCHAR[nMaxPathName];GetModuleFileName(NULL, pBuffer, nMaxPathName - 1);// Get File Version Info sizedwInfoSize = 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 bufferdelete[] pData;}// Get rid of the allocated string bufferdelete[] 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结合的开发项目中,新增版本信息到资源;并且可以通过代码读取资源存储的版本信息。

http://www.lryc.cn/news/35802.html

相关文章:

  • 裸辞两个月还能不能找到工作?亲身经历告诉你结果·····
  • 2023华为面试真题
  • 【C++】C++11新特性——基础特性
  • Mac 遇到pip: command not found问题的解决
  • [ 云计算 | Azure ] Episode 03 | 描述云计算运营中的 CapEx 与 OpEx,如何区分 CapEx 与 OpEx
  • STM32F103R8T6 SPWM实现正弦波输出
  • Oracle 11g创建和删除数据库实例
  • MySQL(四)视图、存储过程、触发器
  • 在 Ubuntu 下编写 C++
  • Linux主要目录的意思
  • 启动golang项目编译的exe可执行文件获取windows管理员权限(UAC)
  • Springboot怎么快速集成Redis?
  • COM技术简单介绍
  • NetworkMiner网络取证分析工具(26)
  • Lombok 常用注解
  • SAP 生产订单和成本收集器在核算上的主要区别
  • Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流
  • 【大数据处理与可视化】一 、大数据分析环境搭建(安装 Anaconda 3 开发环境)
  • Python3-输入和输出
  • Java后端通用接口设计
  • 万字长文带你走进MySql优化(系统层面优化、软件层面优化、SQL层面优化)
  • 云原生安全2.X 进化论系列|云原生安全2.X未来展望(4)
  • 认识进程 -了解进程调度
  • 第十届省赛——7外卖店优先级
  • 做自动化测试选择Python还是Java?
  • C#基础之基础语法(一)
  • 【JVM篇1】认识JVM,内存区域划分,类加载机制
  • CHAPTER 5 文件共享 - FTP
  • 【MySQL】将 CSV文件快速导入 MySQL 中
  • Ngnix安装教程(2023.3.8)