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

相关推荐
来来走走8 小时前
Android开发(Kotlin) LiveData的基本了解
android·开发语言·kotlin
明洞日记8 小时前
【数据结构手册002】动态数组vector - 连续内存的艺术与科学
开发语言·数据结构·c++
福尔摩斯张8 小时前
《C 语言指针从入门到精通:全面笔记 + 实战习题深度解析》(超详细)
linux·运维·服务器·c语言·开发语言·c++·算法
6***37949 小时前
Java安全
java·开发语言·安全
豐儀麟阁贵9 小时前
8.1 异常概述
java·开发语言
czhc114007566310 小时前
C# 1124 接收
开发语言·c#
司铭鸿11 小时前
祖先关系的数学重构:从家谱到算法的思维跃迁
开发语言·数据结构·人工智能·算法·重构·c#·哈希算法
wavemap11 小时前
先到先得:免费订阅一年ChatGPT Go会员
开发语言·chatgpt·golang
m***D28612 小时前
JavaScript在Node.js中的内存管理
开发语言·javascript·node.js
我叫张小白。12 小时前
JavaScript现代语法梳理:ES6+核心特性详解
开发语言·javascript·typescript·es6