启动 QProcess 并一次读取一行输出

Mic*_*ael 5 c++ qt

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

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

Rei*_*ica 5

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

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

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