Ich habe diesen Code:QT5 QCommandLineParser erforderlichen Werte
parser.addOption(requiredValueOption);
parser.addOption(booleanOption);
if (!parser.parse(app->arguments())) {
qDebug() << parser.errorText();
parser.showHelp(1);
}
Wenn ich es so nennen:
./app --required-value-option value
Es funktioniert.
Wenn ich es so nennen:
./app --required-value-option
ich eine Fehlermeldung „fehlenden Wert nach ...“, die
erwartet wirdAber wenn ich es so nennen:
./app --required-value-option --boolean-option
Die Zeichenfolge --boolean-option
wird als Wert für --required-value-option
interpretiert !!! Das ist nicht das, was ich erwarte. Dies sollte einen Fehler auslösen.
Wie analysiert man die Optionen korrekt mit den erforderlichen Werten mit QCommandLineParser?
UPD: Wenn Sie einige erforderliche Werte für Optionen in Ihren Qt-Anwendungen verwenden - Sie können es testen.
UPD2: Aktuelles Verhalten zum Beispiel: --no-gui Boolesche Option und --output-file erforderliche Dateioption. Führen Sie es als Affe:
app --output-file --no-gui
Wow! Die Anwendung startet mit gui und zeigt "--no-gui datei existiert nicht". Gute Arbeit!
UPD3: Ok. Ich möchte die registrierten Optionen als Optionen und nicht als Werte für vorherige Optionen interpretieren. Beispiel: --no-gui kann ein gültiger Dateiname sein, aber da dies eine registrierte Option ist, sollte der Parser sie nicht als Wert verwenden.
Wie soll Qt wissen, dass '--boolean-option' kein gültiges Wertargument für die' --erforderliche-Wert-Option' Option ist? Sie müssen prüfen, ob die Option einen gültigen Wert enthält, und wenn nicht, eine sinnvolle Fehlermeldung ausgeben und beenden. – peppe
@peppe --boolean-option Dies ist OPTION, da mit Einzel- oder Doppelstrich gestartet wurde. Warum muss ich nach allen booleschen Optionen suchen? z.B. --boolean-option1 --boolean-option2 -b -c -def --boolean-optionN. Das ist ein Witz? Das ist Arbeit für Parser. – Deep
@peppe und !!! Dieser Parser boolean Option essen und sagen, ist nicht gesetzt! Ich kann es direkt nach dem Parse nicht überprüfen. – Deep