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;
}

测试结果输出:

相关推荐
CHQIUU16 分钟前
使用 CDN 在国内加载本地 PDF 文件并处理批注:PDF.js 5.x 实战指南
开发语言·javascript·pdf
钢铁男儿21 分钟前
C# 方法(引用类型作为值参数顸引用参数)
开发语言·c#
明月看潮生23 分钟前
青少年编程与数学 02-019 Rust 编程基础 02课题、开始编程
开发语言·算法·青少年编程·rust·编程与数学
yuanManGan32 分钟前
C++入门小馆 :多态
开发语言·c++
冰激凌zz35 分钟前
ubuntu nobel + qt5.15.2 设置qss语法识别正确
linux·qt·ubuntu
坐吃山猪41 分钟前
Python-JsonRPC
开发语言·python
小毛驴85044 分钟前
Windows环境,Python实现对本机处于监听状态的端口,打印出端口,进程ID,程序名称
开发语言·windows·python
MyhEhud1 小时前
Kotlin zip 函数的作用和使用场景
开发语言·windows·kotlin
火龙谷1 小时前
【工具推荐】Code2Prompt
开发语言
code monkey.1 小时前
【探寻C++之旅】第十三章:红黑树
开发语言·数据结构·c++