Qt怎么将Linux命令结果输出到文本框

为什么获取的结果没办法输出 LlineEdit 里?

void MainWindow::on_CPU_clicked()
{
     QProcess process;
     process.start("lscpu | sed -n '/Model name/p' | awk '{print $3}'");
     process.waitForFinished();
     QString result = process.readAllStandardOutput();
     ui->CPU_Edit->setText(result);
}

qDebug() << result 的输出结果为空。
使用 lscpu 是能够输出东西的,但是加上 | sed -n '/Model name/p' | awk '{print $3}' 就直接输出空了

    QProcess process;
    process.start("lscpu");  // 执行lscpu命令
    process.waitForFinished();  // 等待命令执行完成

    QByteArray output = process.readAllStandardOutput();  // 读取命令输出
    QString outputString(output);  // 转换为字符串

    // 按行拆分输出内容
    QStringList lines = outputString.split("\n");

    QString desiredLine = lines.at(1);  // 获取第二行(索引从0开始)
    qDebug() << desiredLine;
   
    return a.exec();

Qt无法执行Linux语法,所以只能对获取到的内容进行处理

看看结果
qDebug() << result;

【以下回答由 GPT 生成】

你可以使用QProcess类来运行Linux命令,并将结果输出到文本框中。下面是一个解决方案:

void MainWindow::on_CPU_clicked()
{
    QProcess process;

    // 设置命令和参数
    QStringList arguments;
    arguments << "-c" << "lscpu | sed -n '/Model name/p' | awk '{print $3}'";

    // 启动进程
    process.start("bash", arguments);

    // 等待命令执行完毕
    process.waitForFinished();

    // 读取命令输出
    QString result = process.readAllStandardOutput();

    // 设置文本框内容
    ui->CPU_Edit->setText(result);
}

在上面的代码中,我们使用QStringList来将命令和参数传递给QProcess。在这个例子中,我们使用了一个shell命令,将其作为字符串传递给-c参数,然后将整个字符串作为参数传递给bash进程。

然后,我们调用start方法来启动进程,并传递命令和参数。在命令执行完毕之后,我们使用waitForFinished方法来等待命令执行完毕。最后,我们使用readAllStandardOutput方法来读取命令的输出,并将结果设置到文本框中。

这样就可以顺利将Linux命令的结果输出到文本框中了。如果还有其他问题,可以再向我提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^