Qt 之命令行参数

作者: 一去、二三里
个人微信号: iwaleon
微信公众号: 高效程序员

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

更多参考

<think>好的,用户想在QT的调试模式下设置命令行参数。首先,我需要回忆一下QT开发中调试的相关知识。根据引用[3]提到的,可以通过左下方的显示器位置切换Debug或Release模式,但用户需要的是设置调试时的命令行参数。 在QT Creator中,调试时传递命令行参数通常需要在项目配置里设置。我应该先考虑项目运行配置的位置。用户可能需要在项目设置中找到运行选项,那里有一个“命令行参数”输入框,可以添加需要的参数。这个步骤可能比较直观,但需要指导用户具体在哪里找到这个设置。 另外,引用[1]提到QT提供了QCommandLineParser类来解析命令行参数,所以用户可能在代码中已经使用了这个类,现在需要测试不同参数的情况。这时候设置命令行参数对调试来说就很重要了。 还有一种方法是直接修改运行配置。比如,在项目的运行设置中,除了命令行参数,还可以设置工作目录和环境变量。需要提醒用户正确填写参数,并注意参数之间的空格分隔。 可能用户会遇到问题,比如参数没有生效,这时候需要检查是否在调试模式下正确配置了参数。或者,用户可能混淆了调试模式和直接运行程序时的参数设置,需要明确说明是在项目设置中配置,而不是在代码里。 还需要确认是否有其他方法,比如通过命令行启动调试时传递参数,但通常QT Creator提供了图形界面来设置,这样更方便。另外,引用[2]提到的编译器参数可能不太相关,但需要确保用户不会混淆编译参数和运行时参数。 总结步骤应该是:打开项目设置,选择运行,找到命令行参数输入框,填入所需参数,然后启动调试。同时提醒用户关于QCommandLineParser的使用,确保代码中正确解析这些参数。可能还需要提到,如果有多个执行目标,需要为每个配置单独设置参数。</think>### QT调试模式下设置命令行参数的方法 在QT Creator中为调试模式设置命令行参数,可通过以下步骤实现: #### 方法1:通过项目运行配置 1. **打开项目配置** - 右键点击项目名称 -> 选择"构建设置" - 或通过顶部菜单:项目 -> 构建设置 2. **配置运行参数** - 左侧导航栏选择"运行" - 在"命令行参数"输入框中填入需要的参数,如:`--verbose --input=test.txt` - 确保上方的执行目标选择的是当前调试目标 3. **切换调试模式** - 左下方工具栏确认处于Debug模式(显示器图标显示Debug)[^3] - 点击绿色三角按钮启动调试 ![QT运行参数设置示意图](https://via.placeholder.com/600x400?text=QT+Run+Settings+Example) #### 方法2:通过启动配置 1. 顶部菜单:运行 -> 打开运行配置 2. 选择对应的可执行文件配置 3. 在"参数"字段输入命令行参数 4. 使用F5启动调试会话 #### 参数解析建议 建议配合QT提供的$QCommandLineParser$类进行参数解析[^1],示例代码: ```cpp QCoreApplication app(argc, argv); QCommandLineParser parser; parser.addHelpOption(); parser.addVersionOption(); QCommandLineOption verboseOption("v", "verbose mode"); parser.addOption(verboseOption); parser.process(app); ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一去丶二三里

有收获,再打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值