QT利用QProcess獲取計(jì)算機(jī)硬件信息
一、項(xiàng)目介紹
本文介紹利用QProcess獲取計(jì)算機(jī)的CPU、主板、硬盤(pán)等電腦相關(guān)硬件信息。
windows提供了“wmic”(Windows Management Instrumentation,Windows管理工具),提供了從命令行接口和批命令腳本執(zhí)行系統(tǒng)管理的支持。可以打開(kāi)cmd在其中輸入如下命令,獲取相關(guān)的信息。
//獲取cpu名稱(chēng) wmic cpu get Name //獲取cpu核心數(shù) wmic cpu get NumberOfCores //獲取cpu線(xiàn)程數(shù) wmic cpu get NumberOfLogicalProcessors //查詢(xún)cpu: wmic cpu get processorid //查詢(xún)主板: wmic baseboard get serialnumber //查詢(xún)BIOS: wmic bios get serialnumber //查看硬盤(pán): wmic diskdrive get serialnumber //獲取主板序唯一標(biāo)識(shí): wmic csproduct get uuid //查詢(xún)網(wǎng)卡連接唯一標(biāo)識(shí): Wmic Path Win32_NetworkAdapter get GUID //查詢(xún)網(wǎng)卡物理地址: Wmic Path Win32_NetworkAdapter get NetEnabled //查詢(xún)網(wǎng)卡是否啟用: Wmic Path Win32_NetworkAdapter get NetEnabled //查詢(xún)網(wǎng)卡是否為物理適配器: Wmic Path Win32_NetworkAdapter get PhysicalAdapter //查詢(xún)網(wǎng)卡索引號(hào): Wmic Path Win32_NetworkAdapter get Index
二、項(xiàng)目基本配置
新建一個(gè)Qt案例,項(xiàng)目名稱(chēng)為“InfoTest”,基類(lèi)選擇“QWidget”,取消選中創(chuàng)建UI界面復(fù)選框,完成項(xiàng)目創(chuàng)建。
【注意事項(xiàng)】:本程序僅限于Qt5可運(yùn)行,Qt6不支持運(yùn)行。關(guān)于Qt6中如何運(yùn)行,可以直接看本文最后一部分
三、UI界面設(shè)置
無(wú)UI界面
四、主程序?qū)崿F(xiàn)
4.1 widget.h頭文件
首先在頭文件中定義一個(gè)私有函數(shù):
private:
QString getInfo(const QString &cmd);
和8個(gè)公有函數(shù):
public:
QString getCpuName();
QString getCpuCore();
QString getCpuProcessors();
QString getCpuProcessorid();
QString getBaseboardSerialnumber();
QString getBiosSerialnumber();
QString getBaseboardUuid();
QString getDiskSerialnumber();
4.2 widget.cpp源文件
定義getInfo函數(shù):
QString Widget::getInfo(const QString &cmd)
{
QProcess p; //啟動(dòng)外部程序
p.start(cmd); //一體式啟動(dòng),不分離,主程序退出則啟動(dòng)程序退出,使用close關(guān)閉
//p.startDetached(cmd) //分離式啟動(dòng),主程序退出后,外部程序繼續(xù)運(yùn)行
p.waitForFinished(-1); //超時(shí)等待,設(shè)置為-1,直到執(zhí)行完成
QString result = QString::fromLocal8Bit(p.readAllStandardOutput());//讀取運(yùn)行結(jié)果
QStringList list = cmd.split(" "); //將cmd按空格拆分
result = result.remove(list.last(), Qt::CaseInsensitive);//刪除cmd序列中最后一個(gè)元素
result = result.replace("\r", ""); //刪除\r
result = result.replace("\n", ""); //刪除\n
result = result.simplified(); //移除字符串兩端的空白字符
p.close();
return result;
}
接著定義七個(gè)函數(shù)獲取計(jì)算機(jī)相關(guān)硬件信息,如CPU、CPU核心數(shù)、CPU線(xiàn)程數(shù)等,代碼如下:
//查詢(xún)CPU型號(hào)
QString Widget::getCpuName()
{
return getInfo("wmic cpu get Name");
}
//查詢(xún)CPU核心數(shù)
QString Widget::getCpuCore()
{
return getInfo("wmic cpu get NumberOfCores");
}
//查詢(xún)CPU線(xiàn)程數(shù)
QString Widget::getCpuProcessors()
{
return getInfo("wmic cpu get NumberOfLogicalProcessors");
}
//查詢(xún)CPU處理器標(biāo)識(shí)符
QString Widget::getCpuProcessorid()
{
return getInfo("wmic cpu get processorid");
}
//查詢(xún)主板序列號(hào)
QString Widget::getBaseboardSerialnumber()
{
return getInfo("wmic baseboard get serialnumber");
}
//查詢(xún)BIOS序列號(hào)
QString Widget::getBiosSerialnumber()
{
return getInfo("wmic bios get serialnumber");
}
//查詢(xún)主板唯一標(biāo)識(shí)符
QString Widget::getBaseboardUuid()
{
return getInfo("wmic csproduct get uuid");
}
//查詢(xún)硬盤(pán)標(biāo)識(shí)符
QString Widget::getDiskSerialnumber()
{
return getInfo("wmic diskdrive get serialnumber");
}
最后在構(gòu)造函數(shù)中引用如上函數(shù):
首先構(gòu)造界面布局:(也可以在ui中直接新建布局)
//新建布局
QLabel *cpuLabel=new QLabel("CPU:");
QLineEdit *cpuLineEdit=new QLineEdit;
QLabel *coreLabel=new QLabel("CPU核心數(shù):");
QLineEdit *coreLineEdit=new QLineEdit;
QLabel *threadLabel=new QLabel("CPU線(xiàn)程數(shù):");
QLineEdit *threadLineEdit=new QLineEdit;
QLabel *idLabel=new QLabel("CPU處理器標(biāo)識(shí)符:");
QLineEdit *idLineEdit=new QLineEdit;
QLabel *baseboardLabel=new QLabel("主板序列號(hào):");
QLineEdit *baseboardLineEdit=new QLineEdit;
QLabel *biosLabel=new QLabel("Bios序列號(hào):");
QLineEdit *biosLineEdit=new QLineEdit;
QLabel *BidLabel=new QLabel("主板標(biāo)識(shí)符:");
QLineEdit *BidLineEdit=new QLineEdit;
QLabel *diskLabel=new QLabel("硬盤(pán)序列號(hào):");
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);
構(gòu)造后界面如下:

然后引用函數(shù)獲取硬件信息:
//獲取硬件信息
cpuLineEdit->setText(getCpuName());
coreLineEdit->setText(getCpuCore());
threadLineEdit->setText(getCpuProcessors());
idLineEdit->setText(getCpuProcessorid());
baseboardLineEdit->setText(getBaseboardSerialnumber());
biosLineEdit->setText(getBiosSerialnumber());
BidLineEdit->setText(getBaseboardUuid());
diskLineEdit->setText(getDiskSerialnumber());
五、效果演示
完整效果如下:

到此這篇關(guān)于QT利用QProcess獲取計(jì)算機(jī)硬件信息的文章就介紹到這了,更多相關(guān)QT獲取計(jì)算機(jī)硬件信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)為無(wú)聲avi視頻添加wave音樂(lè)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言如何實(shí)現(xiàn)為無(wú)聲avi視頻添加wave音樂(lè),文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以了解一下2023-11-11
Opencv實(shí)現(xiàn)聯(lián)合雙邊濾波
這篇文章主要為大家詳細(xì)介紹了Opencv實(shí)現(xiàn)聯(lián)合雙邊濾波,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
C語(yǔ)言實(shí)現(xiàn)消消樂(lè)游戲的代碼分享
本章我們將編寫(xiě)十字消除游戲,用戶(hù)點(diǎn)擊空白方塊,沿其上下左右方向?qū)ふ业谝粋€(gè)彩色方塊,如果有兩個(gè)或兩個(gè)以上顏色一致,就將其消除,感興趣的可以了解一下2023-02-02
C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單酒店管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單酒店管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
C++統(tǒng)計(jì)軟件使用時(shí)間代碼示例
這篇文章主要介紹了C++統(tǒng)計(jì)軟件使用時(shí)間的小程序,大家可以參考使用2013-11-11
C語(yǔ)言單鏈表實(shí)現(xiàn)圖書(shū)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言單鏈表實(shí)現(xiàn)圖書(shū)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03

