/QtArgumentParser

The QCoreApplication argument parcer

Primary LanguageC++GNU Lesser General Public License v2.1LGPL-2.1

QtArgumentParser

About

The QCoreApplication argument parser.

Website: https://github.com/AlekseyDurachenko/QtArgumentParser

Copyright (c) 2013-2014 Aleksey Durachenko (unless explicitly stated otherwise).

Usage

Source code:

#include <QtArgumentParser>
#include <QCoreApplication>
#include <iostream>

int main(int argc, char **argv)
{
    QCoreApplication args(argc, argv);

    QtArgumentParser parser(args.arguments());
    parser.add("-i", QtArgumentParser::String);
    parser.add("-o", QtArgumentParser::String);
    parser.add("-n", QtArgumentParser::Integer);
    parser.add("-d", QtArgumentParser::Double);
    parser.add("-f", QtArgumentParser::Flag);
    parser.add("-x", QtArgumentParser::Variant,
            QStringList() << "Variant" << "SomeCode" << "Unknow" << "None");

    if (!parser.parse())
    {
        std::cout << "can not parse the arguments" << std::endl;
        std::cout << parser.errorString().toStdString() << std::endl;
        return -1;
    }

    QVariantMap map = parser.result();
    if (!map.contains("-i") || !map.contains("-o"))
    {
        std::cout << "arguments \"-i\" and \"-o\" are required" << std::endl;
        return -1;
    }

    std::cout << "The arguments:" << std::endl;
    foreach (const QString &key, map.keys())
    {
        switch (map.value(key).type())
        {
        case QVariant::String:
            std::cout << "  " << key.toStdString()
                      << " = "<< map.value(key).toString().toStdString()
                      << std::endl;
            break;
        case QVariant::Int:
        case QVariant::LongLong:
            std::cout << "  " << key.toStdString()
                      << " = "<< map.value(key).toLongLong()
                      << std::endl;
            break;
        case QVariant::Double:
            std::cout << "  " << key.toStdString()
                      << " = "<< map.value(key).toDouble()
                      << std::endl;
            break;
        case QVariant::Bool:
            std::cout << "  " << key.toStdString()
                      << " = "<< ((map.value(key).toBool())?("true"):("false"))
                      << std::endl;
            break;
        default: ;
        }
    }

    std::cout << "The unused values:" << std::endl;
    foreach (const QString &value, parser.unused())
        std::cout << "  * " << value.toStdString() << std::endl;

    return 0;
}

Usage:

you_app -i input_file.ext -o output_file.ext -n 10 -d 6.66 -f -x None unused_file_1 unused_file_2

License

LGPLv2.1+.