QT: 使用QProcess启动进程并实时获取标准输出

本文示例展示了如何在QT应用中利用QProcess启动`ping`命令并实时捕获其标准输出。通过连接QProcess::readyReadStandardOutput()信号与槽函数,可以每秒在控制台打印一次`ping localhost`的输出。文章强调了QProcess对象必须在QApplication之后创建以确保信号能被正确接收,并且使用QProcess::kill()来终止进程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的

本例介绍如何使用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()方法启动)。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值