目的

本例介绍如何使用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;
}
  1. QProcess::start()方法启动进程。
  2. 启动进程前绑定QProcess::readyReadStandardOutput()信号。
  3. 当上述信号触发后,使用QProcess::readAllStandardOutput()方法获取实时输出。

总结

  1. QProcess::readyReadStandardOutput()的触发在主线程。
  2. 在new QProcess()之前,需要保证QApplication对象被创建,否则无法接收到QProcess::readyReadStandardOutput()信号。
  3. 使用QProcess::kill()方法强制停止进程,或者在QProcess对象销毁后所指向的进程自动停止(使用QProcess::start()方法启动)。
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐