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 启动调试。

相关推荐
云淡风轻~窗明几净2 小时前
ubuntu的lazarus的Tline/TeaLine组件的构思
linux·数据库·ubuntu
知识分享小能手2 小时前
MongoDB入门学习教程,从入门到精通,MongoDB备份完全指南(23)
数据库·学习·mongodb
无巧不成书02182 小时前
Java异常体系与处理全解:核心原理、实战用法、避坑指南
java·开发语言·异常处理·java异常处理体系
源来猿往2 小时前
mysql转postgresql【平移】
数据库·mysql·postgresql
爱学习的小囧2 小时前
VMFS与NFS性能对比(含场景适配+实操建议)
运维·数据库·自动化·esxi·虚拟化
byte轻骑兵2 小时前
Apache IoTDB 技术特性与大数据时序数据库选型实践
大数据·数据库·人工智能·物联网·时序数据库
Dream of maid2 小时前
Mysql(7)子查询
android·数据库·mysql
学习中的DGR2 小时前
[极客大挑战 2019]BabySQL 1新手解题过程
数据库·web安全·网络安全
大尚来也2 小时前
Go性能调优实战:用pprof精准定位瓶颈
开发语言