Projet

Général

Profil

Gestion des arguments

La classe QCommandLineParser permet de gérer de manière efficace les arguments d'une application.
Cette classe n'est disponible qu'à partir de Qt 5.2.
Cette classe et son implémentation sont intégrés dans la classe AbulEduApplicationV1.
Elle fournit des services de base pour une "abuleduapp" :
- la possibilité de s'identifier en ligne de commande (-u user -p motDePasse)
- l'intégration d'une aide basique (-h)

Il est possible d'intégrer ses propres options, qui seront directement intégrées dans l'aide.
Démonstration par l'exemple.

Exemple

Faites un projet minimal regroupant la classe AbulEduApplicationV1 (ainsi que les classes nécessaires... J'ai ce qu'il faut dans un coin, si vous le souhaitez je peux le mettre en ligne dans un dépôt bazaar).
Voici un main minimal :


#include "abuleduapplicationv1.h" 
#include "abuledudisableloggerv1.h" 

int main(int argc, char *argv[])
{
    AbulEduApplicationV1 a(argc, argv, "appName", "appVersion", "organizationDomain", "organizationName", "unitVersion");
    a.initCommandLineParser();

    return a.exec();
}

Lancez votre application avec l'argument "-h" pour afficher l'aide :

./src/abuledu-application-minimal -h
Usage: ./src/abuledu-application-minimal [options]

Options:
  -h, --help                     Displays this help.
  -v, --version                  Displays version information.
  -n, --nolog                    No debug and No log.
  -u, --user <user@provider.xx>  The user mail adress for authentification.
                                 This option must be followed by the --pass
                                 option
  -p, --password <secretpass>    The user passworword for authentification.

Vous avez là les options par défaut apportées par la classe AbulEduApplicationV1.

Reprenons ce code en ajoutant une option qui ne sera disponible que dans notre application.


#include "abuleduapplicationv1.h" 
#include "abuledudisableloggerv1.h" 

int main(int argc, char *argv[])
{
    AbulEduApplicationV1 a(argc, argv, "appName", "appVersion", "organizationDomain", "organizationName", "unitVersion");

    // Ajout de l'option (cf documentation officielle Qt #QCommandLineOption)
    QCommandLineOption testOption(QStringList()<< "t" << "test",
                                  QCoreApplication::translate("main",
                                                              "The test Parameter."),
                                  QCoreApplication::translate("main", "testoption"), "");

    // On récupère le QCommandLineParser et on lui ajoute l'option définie plus haut
    a.getAbeCommandLineParser()->addOption(testOption);

    // On appelle l'initialisation du QCommandLineParser (à faire après l'ajout des options désirées)
    a.initCommandLineParser();

    // On peut tester si l'option est définie ou pas =)
    if(a.getAbeCommandLineParser()->isSet(testOption)){
        qDebug() ;
        qDebug() << "L'option test est active, la valeur est :" 
                 << a.getAbeCommandLineParser()->value(testOption);

    }

    return a.exec();
}

Et voilà, c'est aussi simple que ça :).
L'aide est directement intégrée avec son usage (merci QCommandLineParser).

On appelle son application avec l'option que nous venons de définir.

./src/abuledu-application-minimal -t toto
AbulEduLoggingV1 : log file exist
[D] ../../abuleduapplicationmin/src/main.cpp @ 18 L'option test est active, la valeur est  "toto" 

Appelons l'aide maintenant

./src/abuledu-application-minimal -h*
Usage: ./src/abuledu-application-minimal [options]

Options:
  -t, --test <testoption>        The test Parameter.
  -h, --help                     Displays this help.
  -v, --version                  Displays version information.
  -n, --nolog                    No debug and No log.
  -u, --user <user@provider.xx>  The user mail adress for authentification.
                                 This option must be followed by the --pass
                                 option
  -p, --password <secretpass>    The user passworword for authentification.

On voit que notre option est référencée dans l'aide !

C'est gagné. A vous de définir le comportement adéquat de votre application suivant les différentes options que vous définissez (dans le main) :

   if(a.getAbeCommandLineParser()->isSet(monOption)) 
   {
     ....
   }

Redmine Appliance - Powered by TurnKey Linux