diff --git a/src/corelib/tools/qcommandlineparser.cpp b/src/corelib/tools/qcommandlineparser.cpp index 45831d093d7..21de967a80d 100644 --- a/src/corelib/tools/qcommandlineparser.cpp +++ b/src/corelib/tools/qcommandlineparser.cpp @@ -1159,6 +1159,7 @@ QString QCommandLineParserPrivate::helpText(bool includeQtOptions) const text += nl; if (!options.isEmpty()) text += QCommandLineParser::tr("Options:") + nl; + QStringList optionNameList; optionNameList.reserve(options.size()); qsizetype longestOptionNameString = 0; @@ -1179,6 +1180,10 @@ QString QCommandLineParserPrivate::helpText(bool includeQtOptions) const optionNameList.append(optionNamesString); longestOptionNameString = qMax(longestOptionNameString, optionNamesString.size()); } + + for (const PositionalArgumentDefinition &arg : positionalArgumentDefinitions) + longestOptionNameString = qMax(longestOptionNameString, arg.name.size()); + ++longestOptionNameString; const int optionNameMaxWidth = qMin(50, int(longestOptionNameString)); auto optionNameIterator = optionNameList.cbegin(); diff --git a/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp b/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp index 374c397f9b1..fca0435abd7 100644 --- a/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp +++ b/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp @@ -102,8 +102,21 @@ void tst_QCommandLineParser::testPositionalArguments() { QCoreApplication app(empty_argc, empty_argv); QCommandLineParser parser; + const QString exeName = QCoreApplication::instance()->arguments().first(); // e.g. debug\tst_qcommandlineparser.exe on Windows + QString expectedNoPositional = + "Usage: " + exeName + "\n" + "\n"; + + QCOMPARE(parser.helpText(), expectedNoPositional); QVERIFY(parser.parse(QStringList() << "tst_qcommandlineparser" << "file.txt")); QCOMPARE(parser.positionalArguments(), QStringList() << QStringLiteral("file.txt")); + + parser.addPositionalArgument("file", "File names", ""); + QString expected = + "Usage: " + exeName + " \n" + "\n" + "Arguments:\n" + " file File names\n"; } void tst_QCommandLineParser::testBooleanOption_data() @@ -160,7 +173,18 @@ void tst_QCommandLineParser::testOptionsAndPositional() QCoreApplication app(empty_argc, empty_argv); QCommandLineParser parser; + const QString exeName = QCoreApplication::instance()->arguments().first(); // e.g. debug\tst_qcommandlineparser.exe on Windows + const QString expectedHelpText = + "Usage: " + exeName + " [options] input\n" + "\n" + "Options:\n" + " -b a boolean option\n" + "\n" + "Arguments:\n" + " input File names\n"; + parser.setOptionsAfterPositionalArgumentsMode(parsingMode); + parser.addPositionalArgument("input", "File names"); QVERIFY(parser.addOption(QCommandLineOption(QStringLiteral("b"), QStringLiteral("a boolean option")))); QVERIFY(parser.parse(args)); QCOMPARE(parser.optionNames(), expectedOptionNames); @@ -168,6 +192,7 @@ void tst_QCommandLineParser::testOptionsAndPositional() QTest::ignoreMessage(QtWarningMsg, "QCommandLineParser: option not expecting values: \"b\""); QCOMPARE(parser.values("b"), QStringList()); QCOMPARE(parser.positionalArguments(), expectedPositionalArguments); + QCOMPARE(parser.helpText(), expectedHelpText); } void tst_QCommandLineParser::testMultipleNames_data()