diff options
author | Marc Mutz <marc.mutz@kdab.com> | 2014-07-30 15:47:15 +0200 |
---|---|---|
committer | Marc Mutz <marc.mutz@kdab.com> | 2014-08-06 22:17:22 +0200 |
commit | 7f78d547ca843ad58b016b72418f5b9ab47c8148 (patch) | |
tree | 575f902ebf83a973521f55b4d2158a473c3abe6e /src/corelib/tools/qcommandlineparser.cpp | |
parent | a2ad0ba630da3552b3c2d3d2f09db0a43e4fcc9d (diff) |
QCommandLineParser: support extremely concise option configuration in C++11
The goal of this commit to make the code in the test work:
QCommandLineParser parser;
parser.addOptions({
{ "a", "The A option." },
{ { "v", "verbose" }, "The verbose option." },
{ { "i", "infile" }, "The input file.", "value" },
});
For this, QCommandLineParser needs a version of addOption that can
take a list of options. That's what addOptions() is for.
More importantly, the QCommandLineOption ctors mustn't be explicit.
OTOH, any implicit conversion from QString or QStringList to
QCommandLineOption is also undesirable.
To solve this dilemma, add new QCommandLineOption ctors that just
take one argument and are explicit, and make the existing ctors
implicit. In order to avoid ambiguities, remove the default values
of their resp. 2nd arguments. The new ctors are by intention not
\since 5.4, as they are completely transparent to the user.
Et voila, even better than getopt_long(3).
[ChangeLog][QtCore][QCommandLineParser] Added addOptions() method.
Change-Id: I5e779f3406cd0f6c8ec6ecbf6c8074af226de300
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/tools/qcommandlineparser.cpp')
-rw-r--r-- | src/corelib/tools/qcommandlineparser.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/corelib/tools/qcommandlineparser.cpp b/src/corelib/tools/qcommandlineparser.cpp index 168701d13c..f503ed7452 100644 --- a/src/corelib/tools/qcommandlineparser.cpp +++ b/src/corelib/tools/qcommandlineparser.cpp @@ -179,6 +179,10 @@ QStringList QCommandLineParserPrivate::aliases(const QString &optionName) const Example: \snippet code/src_corelib_tools_qcommandlineparser_main.cpp 0 + If your compiler supports the C++11 standard, the three addOption() calls in + the above example can be simplified: + \snippet code/src_corelib_tools_qcommandlineparser_main.cpp cxx11 + Known limitation: the parsing of Qt options inside QCoreApplication and subclasses happens before QCommandLineParser exists, so it can't take it into account. This means any option value that looks like a builtin Qt option, will be treated by @@ -342,6 +346,24 @@ bool QCommandLineParser::addOption(const QCommandLineOption &option) } /*! + \since 5.4 + + Adds the options \a options to look for while parsing. + + Returns \c false if adding any of the options failed; otherwise returns \c false. + + Cf. addOption() for when it may fail. +*/ +bool QCommandLineParser::addOptions(const QList<QCommandLineOption> &options) +{ + // should be optimized (but it's no worse than what was possible before) + bool result = true; + for (QList<QCommandLineOption>::const_iterator it = options.begin(), end = options.end(); it != end; ++it) + result &= addOption(*it); + return result; +} + +/*! Adds the \c{-v} / \c{--version} option, which displays the version string of the application. This option is handled automatically by QCommandLineParser. |