Qt实现命令行参数功能示例:QCommandLineParser

目标是实现 --name string --path string有这两个参数的功能。

示例代码

  1. .pro文件
cpp 复制代码
qmake
QT -= gui
QT += core
CONFIG += c++17 console
CONFIG -= app_bundle

SOURCES += main.cpp
  1. .cpp示例文件
cpp 复制代码
#include <QCoreApplication>
#include <QCommandLineParser>
#include <QCommandLineOption>
#include <QDebug>
#include <QSet>
#include <QFileInfo>   // 新增:用于检查路径是否存在

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
    QCoreApplication::setApplicationName("drawtool");
    QCoreApplication::setApplicationVersion("1.0.0");

    QCommandLineParser parser;
    parser.addHelpOption();
    parser.addVersionOption();

    QCommandLineOption nameOption(QStringList() << "name", 
                                  "Name of the drawing (required). Available: shape1, shape2, shape3.",
                                  "name");
    parser.addOption(nameOption);

    QCommandLineOption pathOption(QStringList() << "path",
                                  "Output path for the drawing (required).",
                                  "path");
    parser.addOption(pathOption);

    parser.process(app);

    if (!parser.isSet(nameOption) || !parser.isSet(pathOption)) {
        parser.showHelp(1);
    }

    QString name = parser.value(nameOption);
    QString path = parser.value(pathOption);

    // 验证 name 是否在允许的集合内
    QSet<QString> allowedNames = {"shape1", "shape2", "shape3"};
    if (!allowedNames.contains(name)) {
        qCritical() << "Error: Invalid name '" << name << "'. Allowed values: shape1, shape2, shape3.";
        return 1;
    }

    // ========== 新增:检查路径是否存在 ==========
    QFileInfo pathInfo(path);
    if (!pathInfo.exists()) {
        qCritical() << "Error: Path does not exist:" << path;
        return 1;
    }

    // 可选:如果是文件路径,检查其父目录是否可写;如果是目录路径,检查是否可写
    // 这里仅做存在性检查,不区分文件还是目录
    // 如需进一步检查,可使用 pathInfo.isDir() / pathInfo.isFile() 等

    // 模拟绘制过程
    qDebug() << "Drawing:" << name;
    qDebug() << "Output path:" << path;
    qDebug() << "Done.";

    return 0;
}

运行示例

cpp 复制代码
# 正常使用
./drawtool --name shape1 --path /tmp/output.png

# 缺少必选参数 → 自动显示帮助并退出
./drawtool --name shape1

# 无效的 name 值
./drawtool --name invalid --path ./out.png

# 查看帮助
./drawtool --help

# 查看版本
./drawtool --version

通过 IDE 设置调试参数的方法

  1. Qt Creator
    打开项目后,进入左侧 Projects 模式(或按 Ctrl+5)。

在 Build & Run 下,选择当前使用的 Kit(如 Desktop Qt 6.x.x MinGW 64-bit)。

切换到 Run 标签页。

在 Arguments 输入框中,直接填写参数,例如:-opt1 -opt2 --verbose input.txt。

保存后,点击调试按钮(F5)启动,程序就会带上这些参数运行。

小提示:如果同时有 Release 和 Debug 两种配置,注意左上角切换为 Debug 模式后再设置。

  1. Visual Studio(配合 Qt Tools)
    在解决方案资源管理器中,右键点击项目 → 属性。

展开 配置属性 → 调试。

在右侧 命令参数 一行中输入需要的参数。

确保顶部配置选为 Debug,然后按 F5 启动调试。

相关推荐
懂点Tech1 小时前
ctfshow MISC入门图片篇(信息附加):misc41解题思路
开发语言·python
catchadmin2 小时前
PHP 8.7 协程新提案 让跨协程代码共享请求身份
开发语言·php
念何架构之路3 小时前
go-grpc设计思想
开发语言·后端·golang
catoop3 小时前
API Key 设计与安全生成方案:结构拆解、数据库设计与 Java 实现
java·数据库·安全
Web极客码3 小时前
我用 Claude 分析 Redis 哨兵日志,实现跨机房数据不一致自动对齐
数据库·redis·php
库库的数据库笔记3 小时前
国产信创数据库的MySQL兼容性深度对比解析
大数据·数据库·mysql·oceanbase·政务
酷炫码神3 小时前
Day 10|Pinia 状态管理:把散落在各组件的数据,收进一个全局仓库
android·开发语言·javascript
姚远Oracle ACE4 小时前
为什么无法连接到 PostgreSQL?
数据库·postgresql
ss2734 小时前
AI时代首先数据库-PostgreSQL实战笔记 | 22 PostgreSQL实例与集群
数据库·笔记·postgresql