Qt 之程序間通訊(QProcess)
阿新 • • 發佈:2019-01-28
簡述
QProcess可以在應用程式內部與其它程序通訊,或啟動其它應用程式。與在終端機之類的命令輸入視窗上使用名稱和引數是一樣的,可以使用QProcess提供的函式start()啟動程序。可以註冊QStringList處理程序後的引數。
|
命令列引數啟動
說明
程序A-帶參啟動程序B
- 一般編寫程式時,嚴格來說,啟動外部程式,需要判斷版本是debug還是release。否則,有可能會造成錯誤。
- 判斷將要啟動的程序是否存在,如果不存在,則啟動;否則,不啟動。
- 傳參:這裡我列舉的是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-命令列讀取
- 在main函式中初始化QApplication以後,獲取命令列引數。
- 命令列引數中包含當前程式的名稱、接收的引數等資訊。
實現
QStringList cmdLineArgs = QCoreApplication::arguments();
QMessageBox::information(NULL, QStringLiteral("ReceiveMessage"), cmdLineArgs.join(" "));