標籤:
簡述
在 Qt之處理序間通訊(QProcess)一節,我們講解了如何通過QProcess來進行進程間的通訊。主要通過啟動外部程式,然後通過命令列的方式傳遞參數。
這裡,我們可以通過Qt Creator來設定命令列參數Arguments,來設定需要用到的資訊。也可以用來測試其它進程傳參功能。
設定參數
選擇:項目 -> 構建和運行 -> 運行,在Arguments輸入框中輸入需要傳遞的參數。
為了示範,我傳遞了一個Json對象:{\"UserName\":\"Qter\",\"Password\":\"123456\"}。
解析
定義一個結構體,儲存命令列參數對應的值,可根據需要,自行擴充。
struct UserInfo{ QString strUserName; // 使用者名稱 QString strPassword; // 密碼};
通過parseArguments來解析命令列參數,主要解析之前設定的Json對象。
#include <QApplication>#include <QJsonDocument>#include <QJsonObject>#include <qDebug>UserInfo g_userInfo = {"", ""};void parseArguments(){ // 擷取命令列參數 QStringList arguments = QCoreApplication::arguments(); qDebug() << "Arguments : " << arguments; if (arguments.count() < 2) return; QString strJson = arguments.at(1); qDebug() << "Json : " << strJson; // 解析Json對象 QJsonParseError jsonError; QJsonDocument doucment = QJsonDocument::fromJson(strJson.toLocal8Bit(), &jsonError); if (jsonError.error != QJsonParseError::NoError) return; if (doucment.isObject()) { QJsonObject obj = doucment.object(); QJsonValue value; if (obj.contains("UserName")) { value = obj.take("UserName"); if (value.isString()) g_userInfo.strUserName = value.toString(); } if (obj.contains("Password")) { value = obj.take("Password"); if (value.isString()) g_userInfo.strPassword = value.toString(); } }}int main(int argc, char *argv[]){ QApplication a(argc, argv); // 解析命令列參數 parseArguments(); // 測試輸出 qDebug() << "UserName : " << g_userInfo.strUserName; qDebug() << "Password : " << g_userInfo.strPassword; Widget w; w.show(); return a.exec();}
輸出資訊如下:
Arguments : ("E:\\Qt\\Test\\build-TestArguments-Desktop_Qt_5_5_1_MSVC2013_32bit-Debug\\debug\\TestArguments.exe", "{\"UserName\":\"Qter\",\"Password\":\"123456\"}")
Json : "{\"UserName\":\"Qter\",\"Password\":\"123456\"}"
UserName : "Qter"
Password : "123456"
更多參考
Qt之命令列參數