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

相关推荐
疯狂的喵1 天前
C++编译期多态实现
开发语言·c++·算法
2301_765703141 天前
C++中的协程编程
开发语言·c++·算法
m0_748708051 天前
实时数据压缩库
开发语言·c++·算法
lly2024061 天前
jQuery Mobile 表格
开发语言
惊讶的猫1 天前
探究StringBuilder和StringBuffer的线程安全问题
java·开发语言
m0_748233171 天前
30秒掌握C++核心精髓
开发语言·c++
Fleshy数模1 天前
从数据获取到突破限制:Python爬虫进阶实战全攻略
java·开发语言
Duang007_1 天前
【LeetCodeHot100 超详细Agent启发版本】字母异位词分组 (Group Anagrams)
开发语言·javascript·人工智能·python
froginwe111 天前
Redis 管道技术
开发语言
u0109272711 天前
C++中的RAII技术深入
开发语言·c++·算法