接收程序启动参数的标准方法是使用 QCoreApplication::arguments() 配合 QCommandLineParser。你不需要在 Qt 6 中做任何特殊设置,直接在 main 函数里把 argc 和 argv 传给 QApplication/QCoreApplication,参数就会被自动捕获。

方案一:

#include <QApplication>
#include <QCommandLineParser>
#include <QCommandLineOption>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    
    // 1. 设置应用基本信息(帮助/版本会自动调用)
    QCoreApplication::setApplicationName("my-qt-app");
    QCoreApplication::setApplicationVersion("1.0");

    // 2. 创建解析器
    QCommandLineParser parser;
    parser.setApplicationDescription("Qt6 命令行工具示例");
    
    // 3. 添加内置帮助/版本选项(-h, --help, -v, --version)
    parser.addHelpOption();
    parser.addVersionOption();

    // 4. 定义布尔开关:-v 或 --verbose
    QCommandLineOption verboseOption(QStringList() << "v" << "verbose",
                                     "输出详细信息");
    parser.addOption(verboseOption);

    // 5. 定义带值参数:-f <file> 或 --file <file>
    QCommandLineOption fileOption(QStringList() << "f" << "file",
                                  "指定输入文件",
                                  "文件名");  // “文件名”是提示语
    parser.addOption(fileOption);

    // 6. 定义位置参数(不带横杠的纯参数)
    parser.addPositionalArgument("input", "待处理的文件");

    // 7. 正式解析(核心一步)
    parser.process(app);

    // 8. 读取结果
    bool verbose = parser.isSet(verboseOption);
    QString fileName = parser.value(fileOption);
    QStringList positionalArgs = parser.positionalArguments();

    // 业务逻辑...
    
    return app.exec();
}

方案二: 

#include <QApplication>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    
    QStringList args = QCoreApplication::arguments();
    // args[0] 永远是程序自身的路径
    for (int i = 1; i < args.size(); ++i) {
        qDebug() << "参数" << i << ":" << args[i];
    }
    
    // 假设调用: ./myapp document.txt
    if (args.size() > 1) {
        QString fileName = args[1]; // 直接取
    }
    
    return app.exec();
}

 

标签: none

添加新评论