您好,登錄后才能下訂單哦!
今天小編給大家分享一下QT如何利用QProcess獲取計算機硬件信息的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
本文介紹利用QProcess獲取計算機的CPU、主板、硬盤等電腦相關硬件信息。
windows提供了“wmic”(Windows Management Instrumentation,Windows管理工具),提供了從命令行接口和批命令腳本執行系統管理的支持。可以打開cmd在其中輸入如下命令,獲取相關的信息。
//獲取cpu名稱 wmic cpu get Name //獲取cpu核心數 wmic cpu get NumberOfCores //獲取cpu線程數 wmic cpu get NumberOfLogicalProcessors //查詢cpu: wmic cpu get processorid //查詢主板: wmic baseboard get serialnumber //查詢BIOS: wmic bios get serialnumber //查看硬盤: wmic diskdrive get serialnumber //獲取主板序唯一標識: wmic csproduct get uuid //查詢網卡連接唯一標識: Wmic Path Win32_NetworkAdapter get GUID //查詢網卡物理地址: Wmic Path Win32_NetworkAdapter get NetEnabled //查詢網卡是否啟用: Wmic Path Win32_NetworkAdapter get NetEnabled //查詢網卡是否為物理適配器: Wmic Path Win32_NetworkAdapter get PhysicalAdapter //查詢網卡索引號: Wmic Path Win32_NetworkAdapter get Index
新建一個Qt案例,項目名稱為“InfoTest”,基類選擇“QWidget”,取消選中創建UI界面復選框,完成項目創建。
【注意事項】:本程序僅限于Qt5可運行,Qt6不支持運行。關于Qt6中如何運行,可以直接看本文最后一部分
無UI界面
首先在頭文件中定義一個私有函數:
private: QString getInfo(const QString &cmd);
和8個公有函數:
public: QString getCpuName(); QString getCpuCore(); QString getCpuProcessors(); QString getCpuProcessorid(); QString getBaseboardSerialnumber(); QString getBiosSerialnumber(); QString getBaseboardUuid(); QString getDiskSerialnumber();
定義getInfo函數:
QString Widget::getInfo(const QString &cmd) { QProcess p; //啟動外部程序 p.start(cmd); //一體式啟動,不分離,主程序退出則啟動程序退出,使用close關閉 //p.startDetached(cmd) //分離式啟動,主程序退出后,外部程序繼續運行 p.waitForFinished(-1); //超時等待,設置為-1,直到執行完成 QString result = QString::fromLocal8Bit(p.readAllStandardOutput());//讀取運行結果 QStringList list = cmd.split(" "); //將cmd按空格拆分 result = result.remove(list.last(), Qt::CaseInsensitive);//刪除cmd序列中最后一個元素 result = result.replace("\r", ""); //刪除\r result = result.replace("\n", ""); //刪除\n result = result.simplified(); //移除字符串兩端的空白字符 p.close(); return result; }
接著定義七個函數獲取計算機相關硬件信息,如CPU、CPU核心數、CPU線程數等,代碼如下:
//查詢CPU型號 QString Widget::getCpuName() { return getInfo("wmic cpu get Name"); } //查詢CPU核心數 QString Widget::getCpuCore() { return getInfo("wmic cpu get NumberOfCores"); } //查詢CPU線程數 QString Widget::getCpuProcessors() { return getInfo("wmic cpu get NumberOfLogicalProcessors"); } //查詢CPU處理器標識符 QString Widget::getCpuProcessorid() { return getInfo("wmic cpu get processorid"); } //查詢主板序列號 QString Widget::getBaseboardSerialnumber() { return getInfo("wmic baseboard get serialnumber"); } //查詢BIOS序列號 QString Widget::getBiosSerialnumber() { return getInfo("wmic bios get serialnumber"); } //查詢主板唯一標識符 QString Widget::getBaseboardUuid() { return getInfo("wmic csproduct get uuid"); } //查詢硬盤標識符 QString Widget::getDiskSerialnumber() { return getInfo("wmic diskdrive get serialnumber"); }
最后在構造函數中引用如上函數:
首先構造界面布局:(也可以在ui中直接新建布局)
//新建布局 QLabel *cpuLabel=new QLabel("CPU:"); QLineEdit *cpuLineEdit=new QLineEdit; QLabel *coreLabel=new QLabel("CPU核心數:"); QLineEdit *coreLineEdit=new QLineEdit; QLabel *threadLabel=new QLabel("CPU線程數:"); QLineEdit *threadLineEdit=new QLineEdit; QLabel *idLabel=new QLabel("CPU處理器標識符:"); QLineEdit *idLineEdit=new QLineEdit; QLabel *baseboardLabel=new QLabel("主板序列號:"); QLineEdit *baseboardLineEdit=new QLineEdit; QLabel *biosLabel=new QLabel("Bios序列號:"); QLineEdit *biosLineEdit=new QLineEdit; QLabel *BidLabel=new QLabel("主板標識符:"); QLineEdit *BidLineEdit=new QLineEdit; QLabel *diskLabel=new QLabel("硬盤序列號:"); QLineEdit *diskLineEdit=new QLineEdit; //布局 QGridLayout *Layout=new QGridLayout(this); Layout->addWidget(cpuLabel,0,0); Layout->addWidget(cpuLineEdit,0,1); Layout->addWidget(coreLabel,1,0); Layout->addWidget(coreLineEdit,1,1); Layout->addWidget(threadLabel,2,0); Layout->addWidget(threadLineEdit,2,1); Layout->addWidget(idLabel,3,0); Layout->addWidget(idLineEdit,3,1); Layout->addWidget(baseboardLabel,4,0); Layout->addWidget(baseboardLineEdit,4,1); Layout->addWidget(biosLabel,5,0); Layout->addWidget(biosLineEdit,5,1); Layout->addWidget(BidLabel,6,0); Layout->addWidget(BidLineEdit,6,1); Layout->addWidget(diskLabel,7,0); Layout->addWidget(diskLineEdit,7,1);
構造后界面如下:
然后引用函數獲取硬件信息:
//獲取硬件信息 cpuLineEdit->setText(getCpuName()); coreLineEdit->setText(getCpuCore()); threadLineEdit->setText(getCpuProcessors()); idLineEdit->setText(getCpuProcessorid()); baseboardLineEdit->setText(getBaseboardSerialnumber()); biosLineEdit->setText(getBiosSerialnumber()); BidLineEdit->setText(getBaseboardUuid()); diskLineEdit->setText(getDiskSerialnumber());
完整效果如下:
以上就是“QT如何利用QProcess獲取計算機硬件信息”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。