【Qt】Qt之进程间通信(QProcess)

简述

前几节里,分享了进程通信的几种方式:Windows消息机制、Shared Memory(共享内存),本节讲解下关于进程通信的另外一种方式-QProcess。

 

  • 简述
  • 命令行参数启动
    • 说明
    • 实现
  • 命令行读取
    • 说明
    • 实现
  • 更多参考

 

命令行参数启动

说明

进程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(" "));

更多参考

原文作者:一去丶二三里
作者博客:去作者博客空间

你可能感兴趣的:(【Qt】Qt之进程间通信(QProcess))