Qt和Raspberry Pi获取终端命令的响应值

0 人关注

我想在我的电路板上读取CPU的温度(Raspbian中的典型命令"/opt/vc/bin/vcgencmd measure_temp"),我可以在点击按钮时执行命令,但我找不到将结果保存在Qt程序中的变量的方法。

The code:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QProcess>
QProcess process;
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
    ui->setupUi(this);
MainWindow::~MainWindow()
    delete ui;
void MainWindow::on_pushButton_clicked()
QProcess lecturatemp;
lecturatemp.startDetached("/bin/sh",QStringList()<<"-c"<<"/opt/vc/bin/vcgencmd measure_temp"); //
//lecturatemp.waitForFinished();
    
1 个评论
删除了噪音,修复了语法高亮。
c++
linux
qt
Narcís Bahí Horrillo
Narcís Bahí Horrillo
发布于 2017-03-20
1 个回答
Massimo Callegari
Massimo Callegari
发布于 2017-03-20
已采纳
0 人赞同

根据 文件 , QProcess是QIODevice的一个子类,所以你可以把返回值当作一个文件来读,就像这样。

QByteArray result = lecturatemp.readAll();

如果你想阅读进程的输出,你应该阅读"通过渠道进行沟通"段。

进程有两个预定义的输出通道。标准输出通道 通道(stdout)提供常规的控制台输出,而标准的 错误通道(stderr)通常提供由进程打印的错误。 进程打印的错误。这些通道代表两个独立的数据流。 你可以通过调用setReadChannel()在它们之间进行切换。QProcess 当当前读取通道上的数据可用时,发出 readyRead()。 当新的标准输出数据可用时,它也会发出 readyReadStandardOutput() 当新的标准输出数据可用时,以及新的标准错误数据可用时,它也会发出readyReadStandardOutput()。 readyReadStandardError()被发射出来。而不是调用read()。 readLine()或getChar(),你可以通过调用readAll()明确地从两个通道中的任何一个读取所有数据。 的所有数据,而不是调用 readAllStandardOutput() 或 readAllStandardError()。

所以基本上调用以下内容,你应该得到输出。