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

相关推荐
z落落18 分钟前
C# ToCharArray + foreach遍历 + String与StringBuilder
开发语言·c#
学代码的真由酱33 分钟前
Java多用户一对一网页聊天室-测试报告
java·开发语言·功能测试·测试
人道领域36 分钟前
【LeetCode刷题日记】669.修剪二叉搜索树
开发语言·python·算法
JAVA面经实录9171 小时前
Hibernate面试题库
数据库·oracle·hibernate
xiaoshuaishuai81 小时前
C# AvaloniaUI动态显示图片
开发语言·c#
迷枫7121 小时前
DM8 目录结构与常用排查入口梳理
服务器·数据库
日光明媚1 小时前
一步生成视频!One-Forcing:DMD + 零成本 GAN,训练 200 步超越多步 SOTA
android·开发语言·kotlin
2301_803538952 小时前
Java读取Word图片的两种实用方法
java·开发语言·word
Mr.Daozhi2 小时前
RAG 进阶实战:跑通 Demo 后我连续翻了 6 次车,逐一修复才真正可用(含 Gradio Web 版)
前端·数据库·langchain·大模型·gradio·rag·科研工具
小程故事多_803 小时前
Claude Code自定义workflow skills用法
数据库·人工智能·智能体