Qt中如何获取系统版本信息

在 Qt 中获取系统版本信息,可以根据不同的操作系统(Windows、Linux、macOS 等)使用对应的 API,Qt 也提供了一些跨平台的基础信息接口。以下是常用的方法:

1. 跨平台基础信息(Qt 自带)

Qt 的QSysInfo类提供了跨平台的系统基础信息,包括系统名称、版本号等(部分信息可能不够详细)。

复制代码
#include <QSysInfo>

#include <QDebug>



void getSystemInfo() {

    // 系统名称(如"windows"、"linux"、"osx")

    QString sysName = QSysInfo::productType();

    // 系统版本(不同系统返回格式不同,可能是版本号或代号)

    QString sysVersion = QSysInfo::productVersion();

    // 内核版本

    QString kernelVersion = QSysInfo::kernelVersion();



    qDebug() << "系统名称:" << sysName;

    qDebug() << "系统版本:" << sysVersion;

    qDebug() << "内核版本:" << kernelVersion;

}

注意:productVersion()返回的信息可能较简略(例如 Windows 可能返回 "10",Linux 可能返回发行版代号),如需更详细的信息,需结合平台特定 API。

2. 针对 Windows 系统的详细版本

Windows 系统可以通过VersionHelpers.h(微软提供的头文件)或GetVersionEx等 API 获取详细版本(如 Windows 10、Windows 11 的具体版本号)。

复制代码
#include <windows.h>

#include <VersionHelpers.h>

#include <QDebug>



void getWindowsVersion() {

    // 判断是否为Windows 11

    if (IsWindows11OrGreater()) {

        qDebug() << "Windows 11 或更高版本";

    }

    // 判断是否为Windows 10

    else if (IsWindows10OrGreater()) {

        qDebug() << "Windows 10 或更高版本";

    }

    // 判断是否为Windows 8.1

    else if (IsWindows8Point1OrGreater()) {

        qDebug() << "Windows 8.1";

    }

    // 其他版本判断(Windows 8、7等)

    else if (IsWindows8OrGreater()) {

        qDebug() << "Windows 8";

    }

    else if (IsWindows7OrGreater()) {

        qDebug() << "Windows 7";

    }



    // 获取详细版本号(通过OSVERSIONINFOEX)

    OSVERSIONINFOEX osvi;

    ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));

    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

    if (GetVersionEx((OSVERSIONINFO*)&osvi)) {

        qDebug() << "主版本号:" << osvi.dwMajorVersion;

        qDebug() << "次版本号:" << osvi.dwMinorVersion;

        qDebug() << "构建号:" << osvi.dwBuildNumber;

    }

}

注意:

需在项目文件(.pro)中添加LIBS += -ladvapi32(链接系统库)。

Windows 10 及以上的版本判断可能需要应用程序清单(manifest)声明兼容的系统版本,否则可能返回不准确的结果。

3. 针对 Linux 系统的详细版本

Linux 系统的版本信息通常存储在/etc/os-release文件中(大多数发行版通用),可以直接读取该文件获取发行版名称和版本。

复制代码
#include <QFile>

#include <QTextStream>

#include <QDebug>



void getLinuxVersion() {

    QFile file("/etc/os-release");

    if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {

        QTextStream in(&file);

        QString content = in.readAll();

        file.close();



        // 解析发行版名称(NAME字段)

        QString name = content.section("NAME=", 1, 1).section('\n', 0, 0).remove('"');

        // 解析版本号(VERSION_ID字段)

        QString version = content.section("VERSION_ID=", 1, 1).section('\n', 0, 0).remove('"');



        qDebug() << "Linux发行版:" << name;

        qDebug() << "版本号:" << version;

    } else {

        qDebug() << "无法读取系统版本信息(/etc/os-release不存在)";

    }

}

4. 针对 macOS 系统的详细版本

macOS 可以通过sysctlbyname函数获取系统版本(如 macOS 12、13 等)。

复制代码
#include <sys/sysctl.h>

#include <QDebug>



void getMacOSVersion() {

    char str[256];

    size_t size = sizeof(str);

    // 获取macOS版本(如"13.4.1")

    if (sysctlbyname("kern.osrelease", str, &size, nullptr, 0) == 0) {

        QString kernelRelease = QString::fromUtf8(str);

        qDebug() << "macOS内核版本:" << kernelRelease;

    }

    // 获取macOS产品版本(如"13.4.1")

    if (sysctlbyname("kern.osproductversion", str, &size, nullptr, 0) == 0) {

        QString productVersion = QString::fromUtf8(str);

        qDebug() << "macOS产品版本:" << productVersion;

    }

}

建议:

跨平台基础信息用QSysInfo。

详细信息需针对不同系统:

Windows:用VersionHelpers.h或GetVersionEx。

Linux:读取/etc/os-release文件。

macOS:用sysctlbyname函数。

使用时可通过QSysInfo::productType()判断当前系统,再调用对应平台的方法。

相关推荐
我是苏苏4 小时前
C#高级:程序查询写法性能优化提升策略(附带Gzip算法示例)
开发语言·算法·c#
木木子99994 小时前
业务架构、应用架构、数据架构、技术架构
java·开发语言·架构
大佬,救命!!!9 小时前
C++多线程同步与互斥
开发语言·c++·学习笔记·多线程·互斥锁·同步与互斥·死锁和避免策略
赵文宇(温玉)9 小时前
构建内网离线的“github.com“,完美解决内网Go开发依赖
开发语言·golang·github
qq7422349849 小时前
Python操作数据库之pyodbc
开发语言·数据库·python
Joker100859 小时前
仓颉自定义序列化:从原理到高性能多协议实现
开发语言
Adellle9 小时前
2.单例模式
java·开发语言·单例模式
散峰而望10 小时前
C++入门(一)(算法竞赛)
c语言·开发语言·c++·编辑器·github
C_Liu_10 小时前
13.C++:继承
开发语言·c++