• Qt之进程间通信(QProcess)


    简述

    QProcess可以在应用程序内部与其它进程通信,或启动其它应用程序。与在终端机之类的命令输入窗口上使用名称和参数是一样的,可以使用QProcess提供的函数start()启动进程。可以注册QStringList处理进程后的参数。

    命令行参数启动

    说明

    进程A-带参启动进程B

    1. 一般编写程序时,严格来说,启动外部程序,需要判断版本是debug还是release。否则,有可能会造成错误。
    2. 判断将要启动的进程是否存在,如果不存在,则启动;否则,不启动。
    3. 传参:这里我列举的是json格式。

    实现

    void onSendMessage()
    {
        QString strExe("");
        if (m_pProcess == NULL)
            m_pProcess = new QProcess(this);
    
    #if defined(QT_DEBUG)
        strExe = "ReceiveMessaged.exe";
    #   else
        strExe = "ReceiveMessage.exe";
    #  endif
    
        // 判断进程是否存在
        QProcess tasklist;
        tasklist.start("tasklist",
                       QStringList() << "/NH"
                       << "/FO" << "CSV"
                       << "/FI" << QString("IMAGENAME eq %1").arg(strExe));
        tasklist.waitForFinished();
        QString strOutput = tasklist.readAllStandardOutput();
        if (!strOutput.startsWith(QString(""%1").arg(strExe)))
        {
            QJsonObject json;
    
            json.insert("UserName", QStringLiteral("╰☆一去、二三里`"));
            json.insert("Password", "123456");
    
            QJsonDocument document;
            document.setObject(json);
            QByteArray byteArray = document.toJson(QJsonDocument::Compact);
    
            QStringList arguments;
            arguments << byteArray;
            m_pProcess->startDetached(strExe, arguments);
        }
    }

    命令行读取

    说明

    进程B-命令行读取

    1. 在main函数中初始化QApplication以后,获取命令行参数。
    2. 命令行参数中包含当前程序的名称、接收的参数等信息。

    实现

    QStringList cmdLineArgs = QCoreApplication::arguments();
    QMessageBox::information(NULL, QStringLiteral("ReceiveMessage"), cmdLineArgs.join(" "));

    更多参考

  • 相关阅读:
    【Oracle】EXPDP和IMPDP数据泵进行导出导入的方法
    【Oracle】无法删除当前连接的用户
    消除SVN锁定
    提取当前目录所有文件名
    【Weblogic】domain快速启动脚本
    Spring @Transactional注解不回滚不起作用无效
    协方差与相关系数
    利用深度学习解决直播支付风控[转]
    高质量API网关组件实现
    git使用初探
  • 原文地址:https://www.cnblogs.com/itrena/p/5938385.html
Copyright © 2020-2023  润新知