2016-02-14 3 views
0

J'écris un code, et je voudrais le faire en deux variantes - avec l'interface texte (TUI) implémentée avec ncurses, et avec l'interface graphique implémentée avec Qt5. Ainsi, en passant un argument dans la ligne de commande, je peux choisir quelle version exécuter - avec GUI ou TUI (par exemple, comme avec YaST dans openSUSE). Le reste du code, y compris les entrées provenant du clavier, doit être indépendant de l'interface choisie (interface utilisateur ou interface graphique). Comme je le vois, la façon optimale d'implémenter un tel programme est d'utiliser des classes distinctes pour l'entrée, pour l'interface utilisateur, etc. Donc, quelle que soit la version que je lance le code, la classe manipulant l'entrée doit être la même les données à la classe d'interface, qui peut être une interface utilisateur ou une interface graphique, en fonction du lancement de l'application. Le problème est que pour ncurses il semble impossible de détacher l'entrée de la sortie. Fondamentalement, ce que je veux, c'est pouvoir toujours utiliser la sortie de ncurses (fenêtres, panneaux, etc.), mais effectuer une entrée avec une autre bibliothèque. Quelqu'un sait comment résoudre cela? En outre, quelles bibliothèques C/C++ d'entrée puis-je utiliser pour lire l'événement de clavier dans n'importe quel mode (terminal ou interface graphique)?Comment remplacer/désactiver l'entrée ncurses?

+0

Je suggère soit d'avoir deux builds pour votre programme, un pour gui et un pour cli, ou de détecter la situation différente, et de remettre le programme à QT ou en ligne de commande dès que possible. Essayer de généraliser cela sera probablement plus difficile que sa valeur. –

+0

Je me demande comment cela a été implémenté dans YaST (et d'autres applications mono-build qui peuvent fonctionner à la fois avec des interfaces ncurses et GUI, selon la situation). Ont-ils différents gestionnaires d'entrée pour chaque interface? – Maximko

+0

Je suis raisonnablement sûr que ces applications ne sont pas un seul exécutable, mais le même code source compilé avec différentes options [pour le texte et gui], et un shell-script (ou binaire) qui décide lequel utiliser. –

Répondre

0

Vous n'avez pas besoin d'utiliser les fonctions d'entrée de ncurses (telles que wgetch) lorsque vous utilisez ncurses pour la sortie.

Quelques programmes font (Midnight Commander, vi-like-Emacs) parce qu'ils utilisent des entrées en grande partie sont pas résolus à des touches spéciales en utilisant ncurses, comme

  • la évasion caractère par lui-même (vi-like -Emacs), ou
  • le code de la souris dans Midnight Commmander (qui utilise select pour surveiller plusieurs entrées).

Gestion des différents sortie flux peuvent effectivement être plus difficile, car les utilisent des informations sur l'apparence de votre programme sur l'écran d'ordinateur. Les entrées n'occupent généralement pas plus d'une ligne ou plus de l'écran. Dans vi-like-Emacs, le programme utilise un pilote de terminal qui sait comment travailler avec un type spécifique de périphérique (émulateur de terminal, X windows, Win32 GUI), et le programme est compilé et lié avec ce pilote . Ce serait bien de pouvoir basculer entre les pilotes au moment de l'exécution, mais les nuances de manipulation de la souris sont plus difficiles à prendre en compte que les entrées au clavier et les mises à jour de l'écran.