• Qt之命令行参数


    简述

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

    更多参考

  • 相关阅读:
    inline,inline-block 水平方向无法对齐
    Html语义化标签
    IAP15W4K58S4引脚定义 STC15
    74HC245引脚定义 使用方法
    74HC238引脚定义 使用方法
    HC595驱动数码管
    ICMP重定向 Redirect netwox libpcap netwag
    ARP攻击 winpcap
    打开Visual Studio 2017报错:未能正确加载“VSTS for Database Professionals Sql Server Data-tier Application”包
    dos编码格式 cmd编码 dos中文显示
  • 原文地址:https://www.cnblogs.com/itrena/p/5938283.html
Copyright © 2020-2023  润新知