简述

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"

这里,我们也可以使用cmd来进行测试:

其实,这就是我们所说的进程通信,利用进程cmd.exe启动进程TestArguments.exe并将Json对象传递给它。

更多参考

Qt之命令行参数的更多相关文章

  1. Qt 解析命令行参数

    #include <QGuiApplication> #include <QQmlApplicationEngine> #include <QQuickView> ...

  2. 3.QT中QCommandLineParser和QCommandLineOption解析命令行参数

     1  新建项目 main.cpp #include <QCoreApplication> #include <QCommandLineParser> #include & ...

  3. QT解析命令行(QCommandLineOption和QCommandLineParser类)

    Qt从5.2版开始提供了两个类QCommandLineOption和QCommandLineParser来解析应用的命令行参数. 一.命令行写法命令行:"-abc" 在QComma ...

  4. python处理命令行参数

    直接从命令行执行py文件的时候如果带有参数,如何获取这些参数,如何解析? http://blog.chinaunix.net/uid-20786165-id-3182268.html sys.argv ...

  5. .NET Core采用的全新配置系统[5]: 聊聊默认支持的各种配置源[内存变量,环境变量和命令行参数]

    较之传统通过App.config和Web.config这两个XML文件承载的配置系统,.NET Core采用的这个全新的配置模型的最大一个优势就是针对多种不同配置源的支持.我们可以将内存变量.命令行参 ...

  6. Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数

    特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2. $# 传递给脚本或函数的参数个数. $* 传 ...

  7. powershell脚本,命令行参数传值,并绑定变量的例子

    这是小技巧文章,所以文章不长.但原创唯一,非常重要.我搜了下,还真没有人发 powershell怎样 [命令行 参数 绑定],所以我决定写成博客. 搜索关键字如下: powershell 命令行 参数 ...

  8. VS2013 带命令行参数的调试问题 解决方案

    int main(int argc,char* argv[]) argc是命令行总的参数个数,argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数命令行后面跟的用户输入的参数 比如:  ...

  9. 使用getopt()处理命令行参数

    假设有一程序 testopt,其命令行选项参数有: -i            选项 -l            选项 -r           选项 -n <值> 带关联值的选项 则处理 ...

随机推荐

  1. Constraint.constant动画效果

    在autolayout里改动constant时调用animateWithDuration,发现没有动画效果怎么办?在block里加一句[self.view layoutIfNeeded]就OK了

  2. html5的postmessage实现js前端跨域訪问及调用解决方式

    关于跨域訪问.使用JSONP的方法.我前面已经demo过了.详细见http://supercharles888.blog.51cto.com/609344/856886,HTML5提供了一个很强大的A ...

  3. hdoj 2795 Billboard 【线段树 单点更新 + 维护区间最大值】

    Billboard Time Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  4. UVA 294 - Divisors 因子个数

    Mathematicians love all sorts of odd properties of numbers. For instance, they consider 945 to be an ...

  5. poj--2631--Roads in the North(树的直径 裸模板)

    Roads in the North Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2389   Accepted: 117 ...

  6. Spark RDD概念学习系列之Pair RDD的action操作

    不多说,直接上干货! Pair RDD的action操作 所有基础RDD 支持的行动操作也都在pair RDD 上可用

  7. jsoup HTML parser hello world examples--转

    原文地址:http://www.mkyong.com/java/jsoup-html-parser-hello-world-examples/ Jsoup, a HTML parser, its “j ...

  8. 鲜为人知的 Windows 技能

    IE/Edge 竟然可以转换图片格式 SVG 转 PNG.SVG 转 BMP 在图片上点击右键,选择"图片另存为" Windows/Office 屏幕录制 office 竟然带有屏 ...

  9. Django后台创建

    1.首先创建Django工程 创建Django有两种方法我用的是pycharm的创建 2.查看url.py 如下 from django.contrib import admin from djang ...

  10. 从EntityFramework转换EntityFrameworkCore的正确姿势(DBFirst)

    今天有一个小任务:要把一个数据的数据搬运到另一个数据库(两个数据库的数据结构很不一样). 决定用.net core  console app来跑,并且采用entityframework 去做数据CRU ...