QSysInfo Class

QSysInfo 类提供有关系统的信息。更多

头文件: #include <QSysInfo>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

公共类型

enum Endian { BigEndian, LittleEndian, ByteOrder }
enum Sizes { WordSize }

静态公共成员

QByteArray bootUniqueId()
QString buildAbi()
QString buildCpuArchitecture()
QString currentCpuArchitecture()
QString kernelType()
QString kernelVersion()
QString machineHostName()
QByteArray machineUniqueId()
QString prettyProductName()
QString productType()
QString productVersion()

详细说明

  • WordSize 指定应用程序编译平台的指针大小。
  • ByteOrder 指定平台是 big-endian 还是 little-endian。

某些常量仅在特定平台上定义。您可以使用预处理器符号Q_OS_WINQ_OS_MACOS 来测试应用程序是否在 Windows 或 macOS 下编译。

另请参阅 QLibraryInfo

成员类型文档

enum QSysInfo::Endian

常数说明
QSysInfo::BigEndian0大位字节序(也称为网络字节序)
QSysInfo::LittleEndian1小字节顺序
QSysInfo::ByteOrderBigEndian or LittleEndian等于 BigEndian 或 LittleEndian,取决于平台的字节序。

enum QSysInfo::Sizes

该枚举提供了底层架构使用的数据结构大小的特定平台信息。

常量描述
QSysInfo::WordSize(sizeof(void *)<<3)指针大小(位),适用于编译应用程序的平台(32 或 64)。

成员函数文档

[static] QByteArray QSysInfo::bootUniqueId()

如果可以确定唯一 ID,则返回该机器启动时的唯一 ID。如果无法确定唯一 ID,该函数将返回一个空字节数组。该值在每次启动后都会改变,因此可视为全局唯一。

该函数目前只在 Linux 和 Apple 操作系统中使用。

另请参阅 machineUniqueId()。

[static] QString QSysInfo::buildAbi()

返回 Qt 编译时的完整架构字符串。该字符串可用于识别不同的、不兼容的构建。例如,它可用作向服务器请求升级包的标识符。

该函数返回的值保持稳定,具体如下:在未来的 Qt 版本中,结果的必选组件不会改变,但可选后缀可能会添加。

返回值由三个或更多部分组成,以破折号("-")分隔。它们是

组件
CPU 架构QSysInfo::buildCpuArchitecture() 相同,如 "arm"、"i386"、"mips "或 "x86_64"
尾数"little_endian" 或 "big_endian"
单词大小是 32 位还是 64 位应用程序。可能的值有"lp64"(Windows 64 位)、"lp64"(Unix 64 位)、"ilp32"(32 位)
(可选)ABI零个或多个组件,用于标识该架构中可能存在的不同 ABI。目前,Qt 为 ARM 和 MIPS 处理器提供了可选的 ABI 组件:一个组件是主 ABI(如 "eabi"、"o32"、"n32"、"o64");另一个组件是调用约定是否使用硬件浮点寄存器("hardfloat")。

此外,如果 Qt 被配置为-qreal float ,ABI 选项标记 "qreal_float "也会出现。如果 Qt 被配置为其他 qreal 类型,则该类型将出现在 "qreal_"之后,除字母和数字外的所有字符都用下划线转义,后面跟两个十六进制数字。例如,-qreal long double 变为 "qreal_long_20double"。

另请参见 QSysInfo::buildCpuArchitecture()。

[static] QString QSysInfo::buildCpuArchitecture()

以文本格式返回 Qt 编译时所使用的 CPU 架构。请注意,如果存在仿真层或 CPU 支持多种体系结构(如 x86-64 处理器支持 i386 应用程序),这可能与应用程序实际运行的 CPU 不一致。要检测这种情况,请使用currentCpuArchitecture() 。

该函数返回的值是稳定的,不会随时间而改变,因此应用程序可以将返回值作为标识符,但随着时间的推移可能会添加新的 CPU 类型。

典型的返回值有(注:列表并不详尽):

  • "arm
  • "arm64
  • "i386"
  • "ia64
  • "mips
  • "mips64"
  • "power"
  • "power64"
  • "sparc"
  • "sparcv9"
  • "x86_64"

另请参见 QSysInfo::buildAbi() 和QSysInfo::currentCpuArchitecture()。

[static] QString QSysInfo::currentCpuArchitecture()

以文本格式返回应用程序所运行的 CPU 架构。请注意,该函数取决于操作系统的报告内容,如果操作系统隐藏或无法提供该信息,则可能无法检测到实际的 CPU 架构。例如,在 64 位 CPU 上运行的 32 位操作系统通常无法确定 CPU 是否能运行 64 位程序。

该函数返回的值大多比较稳定:我们会努力确保这些值在一段时间内保持不变,并与buildCpuArchitecture() 返回的值相匹配。不过,由于所使用的操作系统函数的性质,可能会出现差异。

典型的返回值有(注:并非详尽无遗):

  • "arm
  • "arm64
  • "i386"
  • "ia64
  • "mips
  • "mips64"
  • "power"
  • "power64"
  • "sparc"
  • "sparcv9"
  • "x86_64"

另请参见 QSysInfo::buildAbi() 和QSysInfo::buildCpuArchitecture()。

[static] QString QSysInfo::kernelType()

返回 Qt 所编译的操作系统内核类型。这也是应用程序正在运行的内核,除非主机操作系统正在运行某种形式的兼容性或虚拟化层。

该函数返回的值是稳定的,不会随时间而改变,因此应用程序可以将返回值作为标识符,但随着时间的推移可能会添加新的操作系统内核类型。

在 Windows 系统中,该函数返回 Windows 内核的类型,如 "winnt"。在 Unix 系统上,其返回值与uname -s 的输出相同(小写)。

注意: 该函数可能会返回令人惊讶的值:对于运行 Linux(包括 Android)的所有操作系统,它将返回 "linux";对于运行 QNX 的所有操作系统,它将返回 "qnx";对于 Debian/kFreeBSD,它将返回 "freebsd";对于 macOS 和 iOS,它将返回 "darwin"。有关应用程序运行的产品类型的信息,请参见productType() 。

另请参见 QFileSelector,kernelVersion(),productType(),productVersion() 和prettyProductName().

[static] QString QSysInfo::kernelVersion()

返回操作系统内核的发布版本。在 Windows 系统中,它返回 NT 内核的版本。在 Unix 系统(包括 Android 和 macOS)上,其返回值与uname -r 命令的返回值相同。在 VxWorks 上,它返回 kernelVersion() 报告的字符串的数字部分。

如果无法确定版本,该函数可能会返回空字符串。

另请参阅 kernelType()、productType()、productVersion() 和prettyProductName()。

[static] QString QSysInfo::machineHostName()

如果配置了主机名,则返回该机器的主机名。请注意,主机名不保证全局唯一,尤其是自动配置的主机名。

此函数不保证返回的主机名是完全合格域名 (FQDN)。为此,请使用QHostInfo 将返回的名称解析为 FQDN。

此函数的返回值与QHostInfo::localHostName() 相同。

另请参阅 QHostInfo::localDomainNamemachineUniqueId()。

[static] QByteArray QSysInfo::machineUniqueId()

如果可以确定机器的唯一 ID,则返回该机器的唯一 ID。如果无法确定唯一 ID,该函数将返回一个空字节数组。与machineHostName() 不同,该函数返回的值可能是全局唯一的。

在网络操作中,当 IP 地址可能发生变化或该机器可能有多个 IP 地址时,唯一的 ID 对于在较长时间内识别该机器非常有用。例如,在与服务器通信或在共享网络存储中存储设备特定数据时,可以使用该 ID。

请注意,在某些系统中,该值会在重启时持续存在,而在某些系统中则不会。应用程序不应在未验证操作系统功能的情况下盲目依赖这一事实。特别是在 Linux 系统上,该 ID 通常是永久性的,它与 D-Bus 机器 ID 相匹配,没有自己存储设备的节点(复制节点)除外。

另请参阅 machineHostName() 和bootUniqueId()。

[static] QString QSysInfo::prettyProductName()

返回productType() 和productVersion() 的更漂亮形式,其中包含操作系统类型、代号和其他信息等其他标记。此函数的结果适合显示给用户,但不适合长期保存,因为字符串可能会随着 Qt 的更新而改变。

如果productType() 为 "未知",该函数将使用kernelType() 和kernelVersion() 函数。

另请参阅 kernelType()、kernelVersion()、productType() 和productVersion()。

[static] QString QSysInfo::productType()

返回此应用程序所运行的操作系统的产品名称。如果应用程序运行在某种仿真或虚拟化层(如 Unix 系统上的 WINE)上,该函数将检查仿真/虚拟化层。

此函数返回的值是稳定的,不会随时间而改变,因此应用程序可以将返回值作为标识符,但随着时间的推移可能会添加新的操作系统类型。

Linux 和 Android 注意:对于运行 Android 用户空间的 Linux 系统,尤其是使用 Bionic 库时,该函数返回 "android"。对于所有其他 Linux 系统,无论使用的是何种 C 库,该函数都会尝试确定发行版名称并返回。如果确定发行版名称失败,则返回 "未知"。

macOS 注意:对于所有 macOS 系统,无论苹果公司的命名惯例如何,该函数都会返回 "macos"。此前,在 Qt 5 中,该函数返回 "osx",同样与苹果公司的命名规则无关。

Darwin、iOS、tvOS 和 watchOS 注:此函数对 iOS 系统返回 "ios",对 tvOS 系统返回 "tvos",对 watchOS 系统返回 "watchos",如果系统无法确定,则返回 "darwin"。

FreeBSD 注释:对于 Debian/kFreeBSD 系统,该函数返回 "debian",否则返回 "unknown"。

Windows 注释:该函数返回 "windows"。

VxWorks 注:该函数返回 "vxworks"。

对于其他 Unix 类型的系统,该函数通常返回 "unknown"。

另请参见 QFileSelector,kernelType(),kernelVersion(),productVersion() 和prettyProductName().

[static] QString QSysInfo::productVersion()

以字符串形式返回操作系统的产品版本。如果无法确定版本,该函数将返回 "未知"。

它将返回这些系统上的 Android、iOS、macOS、VxWorks 和 Windows 完整产品版本。

典型的返回值有(注:列表并不详尽):

  • "12"(安卓 12)
  • "36"(Fedora 36)
  • "15.5"(iOS 15.5)
  • "12.4"(macOS 蒙特利)
  • "22.04"(Ubuntu 22.04)
  • "8.6"(watchOS 8.6)
  • "11"(Windows 11)
  • "服务器 2022"(Windows 服务器 2022)
  • "24.03"(VxWorks 7 - 24.03)

在 Linux 系统上,它会尝试确定发行版本并返回该版本。在 Debian/kFreeBSD 上也是如此,因此在这种情况下,该函数将返回 Debian 版本。

在所有其他 Unix 类型的系统中,该函数总是返回 "未知"。

注意: 此函数返回的版本字符串不保证是可排序的。在 Linux 系统中,发行版的版本可能会意外跳转,请参阅发行版的文档了解版本控制方法。

另请参阅 kernelType()、kernelVersion()、productType() 和prettyProductName()。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.