QT: 使用QProcess启动进程并实时获取标准输出
目的本例介绍如何使用QProcess启动进程并实时获取启动进程的标准输出后显示。实现本例在QT的MainWindow 启动后会每个1秒在控制台打印ping的log,如下图所示#include "mainwindow.h"#include <QApplication>#include <QProcess>#include <QDebug>int main(int
·
目的
本例介绍如何使用QProcess启动进程并实时获取启动进程的标准输出后显示。
实现
本例在QT的MainWindow 启动后会每个1秒在控制台打印ping的log,如下图所示
#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()方法启动)。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献2条内容
所有评论(0)