2017-04-08 1 views
-1

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 wird

Aber 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.

+0

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

+0

@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

+0

@peppe und !!! Dieser Parser boolean Option essen und sagen, ist nicht gesetzt! Ich kann es direkt nach dem Parse nicht überprüfen. – Deep

Antwort

1

Ok, ich antworte für die Selbstfrage.

Zuerst müssen Sie nur boolesche Optionen hinzufügen und analysieren. Fileshared Flags (Ich speichere es als Bitmaske und überprüfe es später).

Fügen Sie dann weitere Optionen mit Werten hinzu und parsen Sie noch eins.

Jetzt haben Sie boolesche Optionen und analysierte Optionen mit Werten analysiert.

Komplett!