Qt6.5,大佬帮忙看看是哪里有问题:
QString Widget::getCpuProcessorId()
{
QString cpuInfo;
#ifdef Q_OS_WIN
QProcess process;
process.start("wmic", QStringList() << "cpu" << "get" << "name");
process.waitForFinished(); // 等待命令执行完毕
cpuInfo = process.readAllStandardOutput();
#elif defined(Q_OS_LINUX)
QFile file("/proc/cpuinfo");
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
while (!file.atEnd()) {
QString line = file.readLine();
if (line.startsWith("model name")) {
cpuInfo = line;
break;
}
}
file.close();
}
#endif
return cpuInfo;
// return getWMIC("wmic cpu get processorid");
}
我在cmd中实验是有输出的:
程序一直获取不到:
我用你的代码是可以读到的.你可以把stdout和stderror都输出看看.或者下个断点看看cpuInfo是不是空.
cpuInfo = process.readAllStandardOutput();
cpuInfo += process.readAllStandardError();
嗯,不知道为什么,我在我笔记本上试也是正常输出的,诶,不用它了
Output和Error都是空的😅
在你的代码中,使用 WMIC 命令读取 CPU 的序列号可能出现问题。具体来说,WMIC cpu get name 命令是用来获取 CPU 的名称,而不是序列号。要获取 CPU 的序列号,你应该使用 wmic cpu get processorid 命令。以下是调整后的代码示例:
修改后的代码示例
cpp
复制代码
QString Widget::getCpuProcessorId()
{
QString cpuInfo;
QProcess process;
process.start("wmic", QStringList() << "cpu" << "get" << "processorid"); // 使用 processorid
process.waitForFinished(); // 等待命令执行完毕
cpuInfo = process.readAllStandardOutput().trimmed(); // 移除多余的空白字符
QFile file("/proc/cpuinfo");
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
while (!file.atEnd()) {
QString line = file.readLine();
if (line.startsWith("model name")) {
cpuInfo = line.mid(line.indexOf(":") + 2).trimmed(); // 取出模型名称并移除空白
break;
}
}
file.close();
}
return cpuInfo;
}
代码说明
Windows 部分:
修改了命令为 wmic cpu get processorid,以获取 CPU 的序列号。
使用 trimmed() 移除输出中的多余空白字符,以确保返回的字符串干净。
Linux 部分:
如果需要获取 CPU 的其他信息,可以继续处理 /proc/cpuinfo 的输出。
在获取模型名称时,使用 mid() 来提取真正的 CPU 名称。
注意事项
WMIC 工具:确保你的 Windows 系统中已启用 WMIC 工具,并且没有权限问题阻止读取硬件信息。
CPU 序列号的可用性:某些 CPU 可能不返回序列号或因系统设置限制而无法访问。
平台兼容性:确保你的程序在不同操作系统上测试,以确保其正常工作。
如果你希望通过其他方式获取 CPU 信息(如使用 Windows API),也可以考虑这些方法,但 WMIC 是一个相对简单的选择。