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

测试结果输出:

相关推荐
小宇的天下5 分钟前
Calibre Introduction to Calibre 3DSTACK(1)
开发语言
没有啥的昵称7 分钟前
linux下用QLibrary载入动态库
linux·qt
Vincent_Vang14 分钟前
多态 、抽象类、抽象类和具体类的区别、抽象方法和具体方法的区别 以及 重载和重写的相同和不同之处
java·开发语言·前端·ide
qualifying15 分钟前
JavaEE——多线程(3)
java·开发语言·java-ee
菩提小狗16 分钟前
小迪安全_第4天:基础入门-30余种加密编码进制&Web&数据库&系统&代码&参数值|小迪安全笔记|网络安全|
前端·网络·数据库·笔记·安全·web安全
Fate_I_C17 分钟前
Kotlin 中的 suspend(挂起函数)
android·开发语言·kotlin
周亚鑫19 分钟前
vue3 js代码混淆
开发语言·javascript·ecmascript
be or not to be25 分钟前
HTML+CSS 浮动与表格全总结笔记
css·笔记·html
陳103026 分钟前
C++:vector(1)
开发语言·c++
棉晗榜26 分钟前
WPF将程序集里面嵌入的资源文件下载到本机磁盘中,将项目中的文件下载到桌面
开发语言·wpf