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()判断当前系统,再调用对应平台的方法。

相关推荐
Wenweno0o1 天前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
chenjingming6661 天前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter
cch89181 天前
Python主流框架全解析
开发语言·python
不爱吃炸鸡柳1 天前
C++ STL list 超详细解析:从接口使用到模拟实现
开发语言·c++·list
十五年专注C++开发1 天前
RTTR: 一款MIT 协议开源的 C++ 运行时反射库
开发语言·c++·反射
Momentary_SixthSense1 天前
设计模式之工厂模式
java·开发语言·设计模式
‎ദ്ദിᵔ.˛.ᵔ₎1 天前
STL 栈 队列
开发语言·c++
勿忘,瞬间1 天前
数据结构—顺序表
java·开发语言
张張4081 天前
(域格)环境搭建和编译
c语言·开发语言·python·ai
weixin_423533991 天前
【Windows11离线安装anaconda、python、vscode】
开发语言·vscode·python