QVariantMap SystemNetwork::getHardwareInfo()
{
QVariantMap hardwareInfo;
QVariantMap hardwaresizeInfo;
QVariantMap cpuInfo;
QVariantList versionInfoList; // 版本信息列表
//调用cmd命令获取硬盘信息
QProcess process;
process.setProgram("/bin/bash");
process.setArguments({"-c", "df -aT | grep -E 'sda|mmcblk'"});
process.start();
process.waitForFinished();
QString output = process.readAllStandardOutput();
qDebug() << output;
SCDebug<<"~~~~~~~~~~~~~~~~~"<<output;
// 获取CPU信息
QProcess cpuProcess;
cpuProcess.setProgram("/bin/bash");
cpuProcess.setArguments({"-c", "cat /proc/cpuinfo | grep 'model name'"});
cpuProcess.start();
cpuProcess.waitForFinished();
QString cpuOutput = cpuProcess.readAllStandardOutput();
SCDebug<<"~~~~~~~~~~~~~~~~~"<<cpuOutput;
// 调用cmd命令获取网卡信息
QProcess nicProcess;
nicProcess.setProgram("/bin/bash");
nicProcess.setArguments({"-c", "ifconfig -a"});
nicProcess.start();
nicProcess.waitForFinished();
QString nicOutput = nicProcess.readAllStandardOutput();
SCDebug<<"~~~~~~~~~~~~~~~~~"<<nicOutput;
//处理硬盘信息 将硬盘信息保存在infoMap中
QVariantMap infoMap;
infoMap.insert("revMsg", output);
auto convertSize = [](int size) {
QString sizeStr;
if (size == 0) {
sizeStr = "0";
} else if (size < 1024 * 1024) {
// 小于1GB,转换为MB
sizeStr = QString::number(size / 1024) + "MB";
} else {
// 大于等于1GB,转换为GB
sizeStr = QString::number(size / (1024 * 1024)) + "GB";
}
return sizeStr;
};
auto info = infoMap.value("revMsg").toString();
if (info.contains("sda") || info.contains("mmcblk")) {
QStringList newLine;
if (info.contains("\n")) {
newLine = info.split("\n");
} else {
newLine.append(info);
}
QVariantList diskList/*, disk*/;
int totalSize = 0; // 初始化总容量为
for (int i = 0; i < newLine.size(); ++i) {
auto line = newLine.at(i);
line = line.simplified();
if (line.isEmpty())
continue;
auto afterSplit = line.split(' ');
if (afterSplit.size() < 7) continue;
QVariantMap diskInfo;
diskInfo.insert("Filesystem", afterSplit.at(0));
// diskInfo.insert("Type", afterSplit.at(1));
int used = afterSplit.at(3).toInt();
diskInfo.insert("Used", convertSize(used));
int avail = afterSplit.at(4).toInt();
// diskInfo.insert("Avail", convertSize(avail));
int size = used + avail;
totalSize += size; // 更新总容量
diskInfo.insert("Size", convertSize(size));
diskInfo.insert("Use%", afterSplit.at(5));
// diskInfo.insert("Mounted", afterSplit.at(6));
// disk.insert(QString("disk%1").arg(i + 1), diskInfo);
diskList.append(diskInfo);
}
hardwaresizeInfo.insert(QString("disk"), diskList);
}
// 处理CPU信息,将CPU信息保存在cpuList中
QStringList cpuLines = cpuOutput.split("\n");
QVariantList cpuList;
int cpuTotalNum = QThread::idealThreadCount();
for (const QString& line : cpuLines) {
if (!line.trimmed().isEmpty()) {
QString cpuModel;
QStringList parts = line.split(':');
if (parts.size() == 2) {
cpuModel = parts[1].trimmed();
}
QVariantMap cpuInfo;
cpuInfo.insert("model name", cpuModel);
// cpuInfo.insert("number", cpuTotalNum);
cpuList.append(cpuInfo);
}
}
QVariantMap cpuTotalNumMap; // 插入cpuTotalNum到单独的map中
cpuTotalNumMap.insert("cpuTotalNumber", cpuTotalNum);
cpuList.prepend(cpuTotalNumMap); // 将cpuTotalNum插入到cpuList的开头
hardwaresizeInfo.insert("cpu", cpuList);
// 处理网卡信息
QVariantList nicList; // 修改为 QVariantList
auto nicListRaw = nicOutput.split("\n\n", QString::SkipEmptyParts);
for (int i = 0; i < nicListRaw.size(); ++i) {
QVariantMap nic;
auto lines = nicListRaw[i].split('\n', QString::SkipEmptyParts);
for (int j = 0; j < lines.size(); ++j) {
QString line = lines[j];
if (line.startsWith("en") || line.startsWith("eth") || line.startsWith("wl")) {
QStringList parts = line.simplified().split(' ');
nic.insert("name", parts[0].remove(':'));
for (int k = j + 1; k < lines.size(); k++) {
QString nextLine = lines[k];
if (nextLine.contains("ether")) {
QStringList etherLineParts = nextLine.split(' ');
nic.insert("mac", etherLineParts[etherLineParts.indexOf("ether") + 1]);
break;
}
}
nicList.append(nic); // 添加到 nicList 中
break;
}
}
}
hardwaresizeInfo.insert("network_card", nicList); // 将网卡信息列表添加到 hardwaresizeInfo 中
// // 获取ubuntu系统版本信息
// QSysInfo sysInfo;
// QVariantMap versionInfo;
// versionInfo.insert("prettyProductName", sysInfo.prettyProductName());
// versionInfo.insert("productVersion", sysInfo.productVersion());
// versionInfoList.append(versionInfo);
// hardwaresizeInfo.insert("version_info", versionInfoList); // 添加版本信息
//获取robot系统版本信息
QVariantMap map;
QSettings settings(M_CardStatus, QSettings::IniFormat); //当前目录的INI文件.
QString wirelessCardName;
bool isDisabled = true; settings.value("WirelessCard/CardStatus").toBool();
if (pSystemNetwork->getWirelessCardName(wirelessCardName)) {
isDisabled = false;
map.insert("wirelessCardName", wirelessCardName);
}
map.insert("wifiStatus", isDisabled);
bool isAutoCheckEthernetConnection = settings.value("AlxWirelessCard/isAutoCheckEthernetConnection").toBool();
map.insert("isAutoCheckEthernetConnection", isAutoCheckEthernetConnection);
map.insert("PingUrl", settings.value("WirelessCard/PingUrl"));
map.insert("PingIP", settings.value("WirelessCard/PingIP"));
map.insert("DisconnectionMethod", settings.value("WirelessCard/DisconnectionMethod"));
{
map.insert("isSwitchOnlyTo5G", settings.value("WirelessCard/isSwitchOnlyTo5G"));
map.insert("startScanningSignal", settings.value("WirelessCard/startScanningSignal"));
map.insert("switchingSignal", settings.value("WirelessCard/switchingSignal"));
map.insert("autoSwitchBestAPSignal", settings.value("WirelessCard/autoSwitchBestAPSignal"));
// map.insert("scanWaitTime",settings.value("WirelessCard/scanWaitTime"));
map.insert("autoConnectWaitTime", settings.value("WirelessCard/autoConnectWaitTime"));
map.insert("disableIPV6", settings.value("WirelessCard/disableIPV6"));
map.insert("isEnabledRoaming", settings.value("WirelessCard/isEnabledRoaming"));
map.insert("isResetWirelessNetworkCard", settings.value("WirelessCard/isResetWirelessNetworkCard"));
}
map.insert("version", PublicClass::init()->_appVersion);
map.insert("isAutoConnectWifi", PublicClass::init()->_autoConnectWifi);
map.insert("SRCType", PublicClass::init()->_srcType);
map.insert("srcName", PublicClass::init()->_srcName);
map.insert("isAutoStartApp", PublicClass::init()->_autoStartApp);
map.insert("sysInfo",RobodProClass::init()->_systeInfo);
hardwaresizeInfo.insert("RobodVersion_info", map);
// 获取设备温度信息
QVariantList tempList;
QString cmd, tempinfo;
cmd = "grep . /sys/class/thermal/thermal_zone*/type";
if (!PublicClass::init()->processCmd(cmd, tempinfo)) {
return hardwaresizeInfo;
}
if (tempinfo.isEmpty()) {
return hardwaresizeInfo;
}
QVariantList list2;
if (tempinfo.contains("\n")) {
auto lines = tempinfo.split("\n");
for (auto &line : lines) {
if (line.contains(":")) {
auto lineList = line.split(":");
QString filePath = lineList.at(0);
QString name = lineList.at(1);
filePath = filePath.replace("/type", "/temp");
QVariantMap tMap;
tMap.insert("filePath", filePath);
tMap.insert("name", name);
list2.append(tMap);
}
}
}
else {
if (tempinfo.contains(":")) {
auto lineList = tempinfo.split(":");
QString filePath = lineList.at(0);
QString name = lineList.at(1);
filePath = filePath.replace("/type", "/temp");
QVariantMap tMap;
tMap.insert("filePath", filePath);
tMap.insert("name", name);
list2.append(tMap);
}
}
for (auto &var : list2) {
auto map = var.toMap();
auto filePath = map.value("filePath").toString();
QFile file(filePath);
if (!file.open(QIODevice::ReadOnly)) {
continue;
}
QString temp;
if (!file.atEnd()) {
QByteArray data = file.readLine().simplified();
temp = QString(data);
}
file.close();
double dTemp = temp.toDouble() / 1000.0;
map.insert("temp", dTemp);
tempList.append(map);
}
hardwaresizeInfo.insert("temperature", tempList);
return hardwaresizeInfo;
}
qt获取硬盘信息、CPU信息、温度信息、系统版本信息
最新推荐文章于 2024-05-17 07:03:23 发布