qt获取硬盘信息、CPU信息、温度信息、系统版本信息

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;
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值