QSysInfo獲取操作系統的相關信息

QSysInfo類可以爲我們提供一些有關當前系統的底層信息。其中包括:

  • WordSize:代表編譯應用程序的當前系統的指針大小
  • ByteOrder:代表當前系統是大端還是小端
  • WindowsVersion:代表當前運行應用程序的Windows系統的版本
  • MacintoshVersion:代表當前運行應用程序的Mac系統的版本
注意,該類中所提供的常量定義,有一些只在特定平臺上有效。所以,我們在使用時,可以先使用Qt預定義的符號Q_OS_WIN和Q_OS_OSX來判斷一下,當前應用程序是在哪個系統下編譯的。
至於該類的使用方法,和我們之前講過的QStorageInfo類似,其成員函數均爲靜態方法,我們可以很方便的使用。

QString QSysInfo::buildAbi()
返回編譯Qt程序的平臺的架構全信息。其又三個或以上的部分組成,有“-”分隔。具體信息如下:
CPU Architecture 例如,"arm","i386","mips","x86_64"
Endianness "little_endian" 或 "big_endian"
Word size "llp64"(Windows 64-bit),"lp64"(Unix 64-bit),"ilp32"(32-bit)
(Optional)ABI 零個或多個該平臺上不同的ABI

QString QSysInfo::buildCpuArchitecture()
返回編譯Qt程序的CPU架構。注意,這可能和Qt程序實際運行的CPU不同,因爲可能存在仿真層或該CPU支持多個架構。
通常的返回值如下:
  • arm
  • arm64
  • i386
  • ia64
  • mips
  • mips64
  • power
  • power64
  • sparc
  • sparcv9
  • x86_64
QString QSysInfo::currentCpuArchitecture()
返回Qt程序當前所運行在的CPU架構。和上面的那個函數相對應。

QString QSysInfo::kernelType()
QString QSysInfo::kernelVersion()
返回編譯Qt程序的操作系統的內核的類型和版本號。在Windows平臺上,該函數返回"wince" 或者 "winnt" 及其版本;在Unix平臺上,該函數的返回值和命令 "uname -rs"的返回值一樣。

QString QSysInfo::prettyProductName()
QString QSysInfo::productType()
QString QSysInfo::productVersion()
返回當前運行Qt程序的操作系統的產品名稱和產品的版本。

下面我們就以當前的Windows系統爲例,來說明一下這些函數的使用及其含義:

#include <QCoreApplication>
#include <QSysInfo>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    qDebug() << "WindowsVersion: " << QSysInfo::WindowsVersion;
    qDebug() << "buildAbi: " << QSysInfo::buildAbi();
    qDebug() << "buildCpuArchitecture: " << QSysInfo::buildCpuArchitecture();
    qDebug() << "currentCpuArchitecture: " << QSysInfo::currentCpuArchitecture();
    qDebug() << "kernelType: " << QSysInfo::kernelType();
    qDebug() << "kernelVersion: " << QSysInfo::kernelVersion();
    qDebug() << "machineHostName: " << QSysInfo::machineHostName();
    qDebug() << "prettyProductName: " << QSysInfo::prettyProductName();
    qDebug() << "productType: " << QSysInfo::productType();
    qDebug() << "productVersion: " << QSysInfo::productVersion();
    qDebug() << "Windows Version: " << QSysInfo::windowsVersion();

    return a.exec();
}
輸出結果如下圖:


我們還分析一下各個輸出結果的含義,有助於我們理解上面講到的函數的意思:
WindowsVersion: 192,十進制的192,轉換爲16進制就是0xc0,再參照QSysInfo類中WinVersion枚舉類型的常量定義可知,其對應的操作系統恰好就是Windows 10.
buildAbi:我當前使用的Qt是Qt5.7 mingw版本,再結合Windows x86結構總是小端,故輸出結果爲"i386-little_endian-ilp32"
buildCpuArchitecture:分析如上
currentCpuArchitecture:我當前系統是Windows 64位 專業版,故輸出 "x86_64"
kernelType:衆所周知,桌面端winnt,移動端和嵌入式wince
kernelVersion:剛纔說了,Windows 10
machineHostName:就是計算機名稱而已
prettyProductName、productType、produceVersion:產品的版本類型,Windows 10

我上面對每個函數解釋的不同,請大家對照着輸出結果再理解一下每一個函數的意思,也可以在自己電腦上運行該程序,查看相應的輸出結果。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章