5

Qt 中读取子进程输出的首选方式是什么?

我尝试将 QProcess 信号 readyReadStandardOutput 连接到调用 QProcess 方法 readLine 的函数。

4

2 回答 2

5

首选方式是异步方式,使用由QIODevice. 你的方法是正确的。确保您阅读了插槽中的所有可用行:

process->setReadChannel(QProcess::StandardOutput);
while (process->canReadLine()) {
   QString line = QString::fromLocal8bit(process->readLine());
   ...
}

还要记住,一旦您阅读了某些内容,就无法再次阅读。QIODevice的信号需要小心使用 - 您不能将任意数量的消费者连接到readyRead信号并在每个消费者中执行读取。它不会像您预期的那样工作。如果第一个读取器读取了所有数据,则后续读取器将无法再次读取它。

于 2013-10-29T21:38:11.973 回答
0

可能的实现:

QProcess proc;
proc.start("/usr/bin/tegrastats");
QString line;
while(proc.waitForReadyRead())
{
    line = QString::fromUtf8(proc.readLine());
    qDebug() << line;
}
于 2022-01-17T14:06:25.407 回答