QT笔记 - QProcess读取外部程序(进程)消息

简要介绍

QProcess 可用于在当前程序中启动独立的外部程序(进程),并进行通讯,通讯原理是通过程序的输入或输出流,即通过c中的printf()和或c++的std::cout等。

函数

  1. void QProcess**::start**(const QString & program, const QStringList & arguments = {}, OpenMode mode = ReadWrite)
  2. void QProcess**::** readyReadStandardOutput()
  3. QByteArray QProcess**::readAllStandardOutput** ()
  4. bool QProcess**::waitForFinished** (int msecs = 30000)

函数说明

  1. 启动目标程序。形参: program:目标程序启动目录,包含程序名称及后缀;arguments:参数,可以向目标程序的main()函数传递两个参数;mode:读写打开模式。
  2. 是个信号函数,目标程序有即时输出时触发,可用于接收目标程序的实时输出
  3. 读取输出
  4. 等待目标程序完成(退出) ,注意期间主程序会陷入冻结状态。形参:msec:等待时长,注意,该时间到期后将主动关闭目标程序,默认30000毫秒,-1时可无限时长等待。

示例

主程序:

cpp 复制代码
    QProcess process;
    // process.setProcessChannelMode(QProcess::MergedChannels);
    process.start("C:\\myapp\\ProcessTest.exe");

    // 实时读取
    process.connect(&process, &QProcess::readyReadStandardOutput, [&](){
        qDebug() << "main - " << process.readAllStandardOutput();
    });

    if(process.waitForFinished(-1)){
        qDebug() << "main - Process:\"" << process.program() << "\" Finished";
    }


    // // 或目标程序退出后读取全部
    // if(process.waitForFinished(-1)){
    //     qDebug() << "main - " << process.readAllStandardOutput();
    // } else {
    //     qDebug() << "main - 2";
    // }

目标程序:

复制代码
void Widget::on_pushButton_clicked()
{
    std::cout << "Widget::on_pushButton_clicked - " << ui->lineEdit->text().toStdString() << std::endl;
    std::cout << std::flush;
}

测试结果输出:

相关推荐
2401_873479401 小时前
如何利用IP查询定位识别电商刷单?4个关键指标+工具配置方案
开发语言·tcp/ip·php
我爱cope2 小时前
【从0开始学设计模式-10| 装饰模式】
java·开发语言·设计模式
菜鸟学Python2 小时前
Python生态在悄悄改变:FastAPI全面反超,Django和Flask还行吗?
开发语言·python·django·flask·fastapi
浪浪小洋3 小时前
c++ qt课设定制
开发语言·c++
charlie1145141913 小时前
嵌入式C++工程实践第16篇:第四次重构 —— LED模板,从通用GPIO到专用抽象
c语言·开发语言·c++·驱动开发·嵌入式硬件·重构
handler013 小时前
Linux: 基本指令知识点(2)
linux·服务器·c语言·c++·笔记·学习
故事和你913 小时前
洛谷-数据结构1-4-图的基本应用1
开发语言·数据结构·算法·深度优先·动态规划·图论
程序猿编码4 小时前
给你的网络流量穿件“隐形衣“:手把手教你用对称加密打造透明安全隧道
linux·开发语言·网络·安全·linux内核
aq55356004 小时前
编程语言三巨头:汇编、C++与PHP大比拼
java·开发语言
小小码农Come on5 小时前
WorkerScript处理qml多线程处理异步数据
qt