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

相关推荐
欢呼的太阳4 小时前
数据库设计Step by Step (10)——范式化
服务器·数据库·oracle
喜欢的名字被抢了5 小时前
MySQL基础入门:从零理解数据库与SQL
数据库·mysql·教程
Elastic 中国社区官方博客6 小时前
如何比较两个 Elasticsearch 索引并找出缺失的文档
大数据·运维·数据库·elasticsearch·搜索引擎
西门吹-禅6 小时前
java springboot N+1问题
java·开发语言·spring boot
DLYSB_6 小时前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?
java·网络·数据库·报警灯
儒雅的大叔6 小时前
MySQL数据库InnoDB数据恢复工具使用总结
数据库·mysql·adb
skywalk81636 小时前
设计并实现段言的 C FFI 绑定机制 @Trae
c语言·开发语言·python·编程
观远数据7 小时前
ChatBI选型对比:从意图识别到SQL修复,六个维度打分决定是否值得投产
数据库·人工智能·sql
嘉&年华7 小时前
【第008篇】通过dexp和dimp命令导出和导入dmp文件(适用于达梦数据库)
数据库·sql
IT笔记8 小时前
【Rust】Rust Match 模式匹配详解
java·开发语言·rust