Qt之命令行参数

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 简述在 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对象传递给它。

更多参考

目录
相关文章
|
7月前
QT自定义信号,信号emit,信号参数注册
使用signals声明返回值是void在需要发送信号的地方使用emit 信号名字(参数)进行发送在需要链接的地方使用connect进行链接ct进行链接。
77 0
QT自定义信号,信号emit,信号参数注册
|
测试技术
QT --- VS2017+Qt5.12 编译报错【E2512 功能测试宏的参数必须是简单标识符 】的解决方法
QT --- VS2017+Qt5.12 编译报错【E2512 功能测试宏的参数必须是简单标识符 】的解决方法
598 0
|
SQL 数据库 数据库管理
Qt操作Sqlite类封装,及命令行导入csv文件到Sqlite数据库
Qt操作Sqlite类封装,及命令行导入csv文件到Sqlite数据库
|
7月前
|
API
QT中使用 WinExec API 参数不支持中文路径的解决办法
在QT中使用WinExec时,发现如果调用外部程序,如果路径或者参数含有中文路径,可能导致无法打开应用程序或者无法使用参数,解决办法,下面是简单的解决办法
212 0
|
存储 编解码 计算机视觉
项目实战:Qt+OpenCV操作摄像头拍照、调节参数和视频录制
项目实战:Qt+OpenCV操作摄像头拍照、调节参数和视频录制
Qt通过QProcess启动进程并传递命令行参数
Qt通过QProcess启动进程并传递命令行参数
773 0
|
编译器
Qt信号参数中使用QVariantList时编译问题
今天调试代码时遇到一个奇怪的问题,不过一般感觉比较奇怪的问题,最后查到原因时,原因都比较简单!
207 0
|
Ubuntu Linux Windows
项目实战:Qt终端命令模拟工具 v1.0.0(实时获取命令行输出,执行指令,模拟ctrl+c中止操作)
在Qt软件中实现部分终端控制命令行功能,使软件内可以又好的模拟终端控制,提升软件整体契合度。
项目实战:Qt终端命令模拟工具 v1.0.0(实时获取命令行输出,执行指令,模拟ctrl+c中止操作)
|
存储 编解码 关系型数据库
案例分享:Qt激光加工焊接设备信息化软件研发(西门子PLC,mysql数据库,用户权限控制,界面设计,参数定制,播放器,二维图,rgv小车,期限控制,参数调试等)
国产大型机床中Qt上位机激光焊接系统软件案例分享,介绍了Qt在国产化机床上的各种应用案例,并附上案例的具体功能界面供大家学习
案例分享:Qt激光加工焊接设备信息化软件研发(西门子PLC,mysql数据库,用户权限控制,界面设计,参数定制,播放器,二维图,rgv小车,期限控制,参数调试等)
|
Linux Python
linux qt 项目中QProcess调用命令行命令执行python脚本
linux qt 项目中QProcess调用命令行命令执行python脚本
linux qt 项目中QProcess调用命令行命令执行python脚本