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

更多參考


原文做者:一去丶二三裏
做者博客:去做者博客空間
相關文章
相關標籤/搜索