Application Qt avec interface graphique optionnelle

Je vais écrire un programme utilisant Qt pour certains traitements d’image et je veux qu’il puisse s’exécuter en mode non-gui (mode démon?). Je suis inspiré par le lecteur VLC, qui est un programme “généralement” d’interface graphique, dans lequel vous pouvez le configurer à l’aide d’une interface graphique, mais vous pouvez également l’exécuter dans non-gui option non-gui graphique lorsqu’il fonctionne sans interface graphique. Ensuite, il utilise un fichier de configuration créé en mode graphique.

La question est comment devrait être une telle conception de programme? Devrait-il y avoir un kernel de programme, indépendant de l’interface graphique et dépendant d’options, connecté à l’interface graphique?

Oui, vous pouvez utiliser une option “headless” ou “gui” pour le binary en utilisant QCommandLineParser . Notez qu’il n’est disponible qu’à partir de la version 5.3, mais que le chemin de la migration est assez fluide dans la série majeure si vous ne l’utilisez toujours pas.

main.cpp

 #include  #include  #include  #include  #include  int main(int argc, char **argv) { QApplication application(argc, argv); QCommandLineParser parser; parser.setApplicationDescription("My program"); parser.addHelpOption(); parser.addVersionOption(); // A boolean option for running it via GUI (--gui) QCommandLineOption guiOption(QSsortingngList() << "gui", "Running it via GUI."); parser.addOption(guiOption); // Process the actual command line arguments given by the user parser.process(application); QLabel label("Runninig in GUI mode"); if (parser.isSet(guiOption)) label.show(); else qDebug() << "Running in headless mode"; return application.exec(); } 

main.pro

 TEMPLATE = app TARGET = main QT += widgets SOURCES += main.cpp 

Construire et exécuter

 qmake && make && ./main qmake && make && ./main --gui 

Usage

  Usage: ./main [options] My program Options: -h, --help Displays this help. -v, --version Displays version information. --gui Running it via GUI. 

Vous pouvez passer un argument à votre application lorsque vous commencez à afficher en mode graphique ou non. Par exemple, si vous passez le paramètre -non-gui lors de l’exécution en ligne de commande, l’application ne doit pas afficher la fenêtre principale et doit effectuer d’autres opérations:

 int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; bool GUIMode=true; int num = qApp->argc() ; for ( int i = 0; i < num; i++ ) { QString s = qApp->argv()[i] ; if ( s.startsWith( "-non-gui" ) ) GUIMode = false; } if(GUIMode) { w.show(); } else { //start some non gui functions } return a.exec(); }