QCommandLineOption ohne default value

Verschiedenes zu Qt
Antworten
lespaul
Beiträge: 87
Registriert: 11. August 2011 10:07

QCommandLineOption ohne default value

Beitrag von lespaul »

Hi Leute,

ich habe ein QCommandLineOption wo ich eine mögliche Ausgabedatei eingeben kann. Mein Programm schreibt auf jeden Fall was auf die Kommandozeile. Wenn ich die Option

Code: Alles auswählen

-o outfile.txt
benutze, möchte ich diese zusätzlich auch in eine Datei schreiben. Wenn kein -o gesetzt ist, soll auch keine Datei beschrieben werden, auch keine default. Der Konstruktor von QCommandLineOption verlang eine const QString & defaultValue = QString()

Code: Alles auswählen

QCommandLineOption out_opt(QStringList() << "o" << "output",
            QCoreApplication::translate("main", "Output file."),
            QCoreApplication::translate("main", "outfile"), // value name
            QCoreApplication::translate("main", "default_file.txt")   // default value
        );
Gelöst habe ich es so:

Code: Alles auswählen

QCommandLineOption out_opt(QStringList() << "o" << "output",
            QCoreApplication::translate("main", "Output file."),
            QCoreApplication::translate("main", "outfile"), // value name
            QCoreApplication::translate("main", "")   // default value
        );
mit einem leeren string in der Defaultzeile und späterer if outfile.isEmpty() abfrage.

1. Frage: Geht das nicht eleganter, oder ist das schon der eleganteste Weg?
2. Frage: Ich habe ein paar Schalter wo nur -d zB setze (ohne value).

Code: Alles auswählen

    QStringList parser_args = parser.positionalArguments();
    parser_args << parser.value(out_opt);
    if (parser.isSet(duration_opt)) parser_args << "d";
    //..
    callOtherProcess(parser_args);
Dort gucke ich dann, ob parser_args ein 'd' enthält. Das finde ich auch nicht sehr elegant??

Thnx und viele Grüße
Lespaul
veeman
Beiträge: 278
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: QCommandLineOption ohne default value

Beitrag von veeman »

Zu 1.
Drei mal darfst du raten was der Ausdruck bei den Parametern hinter dem Gleich bedeutet:

Code: Alles auswählen

QCommandLineOption(const QStringList & names, const QString & description, const QString & valueName = QString(), const QString & defaultValue = QString())
... damit wird ein Standardwert festgelegt wenn der Parameter nicht angegeben wird... du kannst Ihn also einfach weglassen und immer noch mit isEmpty prüfen.

Zu 2.
Warum zum Teufel baust du eine neue Stringliste zusamen?
Die Klasse QCommandLineParser ist doch genau dafür da um einen vorhanden String (Liste) zu zerlegen um dann die Gesetzen Optionen einfach zu überprüfen.
lespaul
Beiträge: 87
Registriert: 11. August 2011 10:07

Re: QCommandLineOption ohne default value

Beitrag von lespaul »

Naja, so ganz schein es nicht zu funzen. Ich habe eine switch -d mit:
myprog.exe -d 9.2342342

Code: Alles auswählen

  QCommandLineOption* double_opt = new QCommandLineOption(QStringList() << "d" << "double", QCoreApplication::translate("main", "get a double number."));
  parser->addOption(*double_opt);
und dann später im Code:

Code: Alles auswählen

  // calculate just one single request
  if ( mt_Parser->isSet("d") ) {
    double t = mt_Parser->value("d").toDouble();
    mt_Request = mt_Parser->value("d");
  }
Die If-Bedingung greift jedoch ist hinterher mein t = 0 und mein mt_Request = ""

Probiert habe ich auch Hochkommas etc..:
myprog.exe -d "9.2342342"
Was mache ich falsch?
veeman
Beiträge: 278
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: QCommandLineOption ohne default value

Beitrag von veeman »

Wenn du noch einen Wert hinter der Option erwartest dann musst du noch einen Valuename beim erstellen von QCommandLineOption vergeben.

Code: Alles auswählen

QCommandLineOption("d", "get a double number", "value");
Antworten