【Qt】Qt之进程间通讯(QProcess)【转】

简述

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

 

 

命令行参数启动

说明

进程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-命令行读取ui

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

实现

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

更多参考


原文做者:一去丶二三里
做者博客:去做者博客空间
相关文章
相关标签/搜索