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

相关推荐
用户805533698035 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner5 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz10 天前
QML Hello World 入门示例
qt
xcyxiner13 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner13 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner14 天前
DicomViewer (添加模型类)3
qt
xcyxiner14 天前
DicomViewer (目录调整) 2
qt
xcyxiner14 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
LDR00616 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术16 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript