目的
本例介绍如何使用QProcess启动进程并实时获取启动进程的标准输出后显示。
实现
本例在QT的MainWindow 启动后会每个1秒在控制台打印ping的log,如下图所示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include "mainwindow.h" #include <QApplication> #include <QProcess> #include <QDebug> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); QProcess *process = new QProcess(&a); process->setReadChannel(QProcess::StandardOutput); QObject::connect(process, &QProcess::readyReadStandardOutput, [process]() { qDebug() << process->readAllStandardOutput(); }); process->start("ping localhost"); int res = a.exec(); process->kill(); process->waitForFinished(); return res; } |
- QProcess::start()方法启动进程。
- 启动进程前绑定QProcess::readyReadStandardOutput()信号。
- 当上述信号触发后,使用QProcess::readAllStandardOutput()方法获取实时输出。
总结
- QProcess::readyReadStandardOutput()的触发在主线程。
- 在new QProcess()之前,需要保证QApplication对象被创建,否则无法接收到QProcess::readyReadStandardOutput()信号。
- 使用QProcess::kill()方法强制停止进程,或者在QProcess对象销毁后所指向的进程自动停止(使用QProcess::start()方法启动)。