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

相关推荐
2501_9418752820 分钟前
从配置中心到动态管理的互联网工程语法演进与多语言实践分享
开发语言·python
hfywmsj44 分钟前
广州餐饮铺位招租决策模型:多因子选址系统设计
开发语言·人工智能·python·广州餐饮铺位招租
努力的lpp3 小时前
php反序列化一(大白话版)
开发语言·web安全·php·ctf·反序列化
菜鸟~noob2333 小时前
【电子战】第03篇:CFAR(恒虚警)处理【含matlab代码】
开发语言·matlab
三8443 小时前
redis防御加固与安全基线
数据库·redis·安全·应急响应·防御
lhldsg3 小时前
全民健身解决方案小程序开发:从0到1的技术实战
java·数据库·需求分析
泡海椒4 小时前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法
java·开发语言·python
hqyjzsb4 小时前
零 AI 项目经验,学 Python 转型 AI 的正确顺序是什么?
开发语言·人工智能·python·算法·职场和发展·数据挖掘·数据分析
IT大白鼠4 小时前
MySQL 分布式集群系列 · 第四篇——实操部署指南:从零搭建生产级 MySQL NDB 集群
数据库·分布式·mysql