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)) { .... }