Qt之命令行参数

简介: 简述 在 Qt之进程间通信(QProcess)一节,我们讲解了如何通过QProcess来进行进程间的通信。主要通过启动外部程序,然后通过命令行的方式传递参数。 这里,我们可以通过Qt Creator来设置命令行参数Arguments,来设置需要用到的信息。也可以用来测试其它进程传参功能。 简述 设置参数 解析 更多参考 设置参数 选择:项目 -&
+关注继续查看

简述

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对象传递给它。

更多参考

目录
相关文章
|
3月前
Qt通过QProcess启动进程并传递命令行参数
Qt通过QProcess启动进程并传递命令行参数
199 0
|
3月前
Qt5中关于beginMoveRows函数的坑
Qt5中关于beginMoveRows函数的坑
33 0
|
6月前
Qt QStandardItemModel(2.超级详细函数)
简介: 本文详细的介绍了TextEdit控件的各种操作,例如:获取内容、输入控件字符、保持在最后一行添加(自动滚屏)、定时关闭、添加数据换行、向鼠标位置插入一行字符、设置字体颜色属性等操作。 本系列QT全面详解文章目前共有十五篇,本系列文章较为详细的讲述了QT控件的基础操作和使用,也谢谢大家的关注、点赞、收藏。
93 0
Qt QStandardItemModel(2.超级详细函数)
|
6月前
|
存储 数据管理 数据处理
Qt QStandardItemModel(1.超级详细用法)
本文详细的介绍了TextEdit控件的各种操作,例如:获取内容、输入控件字符、保持在最后一行添加(自动滚屏)、定时关闭、添加数据换行、向鼠标位置插入一行字符、设置字体颜色属性等操作。 本系列QT全面详解文章目前共有十五篇,本系列文章较为详细的讲述了QT控件的基础操作和使用,也谢谢大家的关注、点赞、收藏。
342 0
Qt QStandardItemModel(1.超级详细用法)
|
8月前
|
数据库 C++
Qt实现程序启动动画
Qt实现程序启动动画
|
编译器 C++
Qt&Vtk-002-第一个VtkQt程序
本文将是Qt与Vtk结合的第一个程序,主要就是将Vtk与Qt结合,但是呢,也不完全算是Qt与Vtk结合的程序,这里并没有用到QVTKOpenglWidget,仅仅是用了Qt编译器,还可以说是纯C++的项目,只是没有用CMake来管理代码。
263 0
Qt&Vtk-002-第一个VtkQt程序
Qt-QSplashScreen-程序启动动画
Qt-QSplashScreen-程序启动动画
270 0
Qt-QSplashScreen-程序启动动画
Qt-QML-关于两个平级的qml文件中的函数调用问题
Qt-QML-关于两个平级的qml文件中的函数调用问题
220 0
Qt-QML-关于两个平级的qml文件中的函数调用问题
推荐文章
更多