web-dev-qa-db-fra.com

Comment créer une interface utilisateur graphique en C ++?

Jusqu'à présent, tous mes programmes C++ utilisaient l'interface de ligne de commande et le seul autre langage que j'ai expérimenté est PHP, qui ne prend pas en charge les interfaces graphiques.

Où dois-je commencer avec la programmation d'interface utilisateur graphique en C++? Comment en créer un?

238
waiwai933

Essentiellement, le système de fenêtrage d'un système d'exploitation expose certains appels d'API que vous pouvez effectuer pour effectuer des tâches telles que créer une fenêtre ou placer un bouton sur la fenêtre. En gros, vous obtenez une suite de fichiers d'en-tête et vous pouvez appeler des fonctions dans ces bibliothèques importées, comme vous le feriez avec stdlib et printf.

Chaque système d'exploitation est livré avec sa propre boîte à outils d'interface graphique, une suite de fichiers d'en-tête et des appels d'API, ainsi que leur propre façon de faire les choses. Il existe également des boîtes à outils multiplateformes, telles que les widgets gtk, qt et wx, qui vous aident à créer des programmes qui fonctionnent n'importe où. Pour ce faire, ils ont les mêmes appels d'API sur chaque plate-forme, mais une implémentation différente pour les fonctions d'API qui appellent les appels d'API natifs du système d'exploitation.

Un point commun à tous, qui sera différent d'un programme CLI, est ce qu'on appelle une boucle d'événement. L'idée de base là-bas est un peu compliquée et difficile à compresser, mais cela signifie essentiellement que peu de choses entrent dans votre classe/fonction principale, sauf:

  • vérifier la file d'attente des événements s'il y a de nouveaux événements
  • si tel est le cas, envoyez ces événements aux gestionnaires appropriés
  • lorsque vous avez terminé, accordez de nouveau le contrôle au système d'exploitation (généralement avec une sorte d'appel de fonction spécial "veille" ou "sélection" ou "rendement")
  • alors la fonction de rendement reviendra lorsque le système d'exploitation sera terminé, et vous aurez un autre tour de la boucle.

Il existe de nombreuses ressources sur la programmation événementielle. Si vous avez une expérience de JavaScript, c'est la même idée de base, sauf que vous, le scripteur, n'avez aucun accès ou contrôle sur la boucle d'événements elle-même, ou quels événements il y a, votre seul travail est d'écrire et d'enregistrer des gestionnaires.

Gardez à l'esprit que la programmation par interface graphique est incroyablement compliquée et difficile en général. Si vous en avez la possibilité, il est beaucoup plus simple d'intégrer un serveur Web intégré à votre programme et de disposer d'une interface HTML/Web. La seule exception que j'ai rencontrée concerne les didacticiels Cocoa + xcode + Interface Builder + d'Apple, qui en font facilement l'environnement le plus accessible que je connaisse pour les débutants en matière de programmation d'interface graphique.

140
Breton

Il y a beaucoup de bibliothèques portables gratuites, chacun avec ses propres forces et faiblesses:

Surtout Qt a de bons tutoriels et des outils qui vous aideront à démarrer. Prendre plaisir!

Notez cependant que vous devriez éviter la plate-forme spécifique des fonctionnalités telles que l'API Win32 ou MFC. Cela vous lie inutilement sur une plate-forme spécifique sans presque aucun avantage.

154
vog

Algorithme indépendant du système d'exploitation " Création d'applications GUI en C++ en trois étapes ":

  1. Installer Qt Creator

    enter image description here

  2. Créer un nouveau projet (application Qt Widgets)

    enter image description here

  3. Construit le.

Félicitations, vous avez votre première interface graphique en C++.

Vous êtes maintenant prêt à lire beaucoup de documentation pour créer quelque chose de plus compliqué que l’application graphique "Hello world".

70

Étant donné le commentaire de "exemple de Windows XP", vos options sont les suivantes:

  • Interagissez directement avec le système d'exploitation via son API, qui pour Microsoft Windows est un appel surprise API Windows . La référence définitive pour WinAPI est le site Web MSDN de Microsoft . Le didacticiel en ligne pour débutants le plus populaire est le didacticiel de programmation de l'API Win32 de Forger . Le livre classique pour cela est celui de Charles Petzold Programming Windows, 5e édition .

  • Utilisez une bibliothèque spécifique à la plate-forme (à la fois en termes de système d’exploitation et de compilateur) telle que MFC , qui encapsule l’indicateur WinAPI dans la classe C++. La référence pour cela est encore MSDN. Le livre classique de Jeff Prosise , Programmation Windows avec MFC, 2e édition . Si vous utilisez, par exemple, CodeGear C++ Builder, l’option ici est VCL .

  • Utilisez une bibliothèque multiplate-forme telle que GTK + (wrapper C++: gtkmm ) , ( Qt , wxWidgets , ou FLTK qui enveloppe l'API du système d'exploitation spécifique. Les avantages de ceux-ci sont qu'en général, votre programme pourrait être compilé pour différents systèmes d'exploitation sans avoir à changer les codes source. Comme cela a déjà été mentionné, ils ont chacun leurs forces et leurs faiblesses. Une considération lors de la sélection de celui à utiliser est sa licence. Pour les exemples donnés, GTK + est une licence sous LGPL, Qt est sous diverses licences, y compris une option propriétaire, wxWidgets est sous sa propre licence wxWindows (renommée wxWidgets License) et FLTK est sous LGPL avec une exception. Pour référence, tutoriel et livres, reportez-vous au site Web de chacun pour plus de détails.

23
KTC

Depuis que je suis déjà où vous êtes en ce moment, je pense pouvoir vous "répondre".

Le fait est qu'il n'y a pas de moyen facile de créer une interface graphique. Les interfaces graphiques dépendent fortement du code spécifique à la plate-forme et au système d'exploitation. C'est pourquoi vous devriez commencer à lire la documentation de votre plate-forme/système d'exploitation cible sur les API de gestion de fenêtres. La bonne chose à faire est qu’il existe de nombreuses bibliothèques qui traitent de ces limitations et des différences d’architecture abstraite en une seule API multiplate-forme. Celles proposées précédemment, GTK et QT, font partie de ces bibliothèques.

Mais même ceux-ci sont un peu TROP compliqués, car de nombreux nouveaux concepts, types de données, espaces de nom et classes sont introduits en même temps. Pour cette raison, ils sont généralement fournis avec un éditeur WYSIWYG à interface graphique. Ils permettent à peu près tout logiciel de programmation avec interfaces graphiques.

Pour résumer, il existe également des "environnements" non libres pour le développement d'interface graphique tels que Visual Studio de Microsoft. Pour ceux qui ont des antécédents d’expérience Delphi, Visual Studio est peut-être plus familier. Il existe également des alternatives gratuites à l'environnement complet Visual Studio fourni par Microsoft: Visual Studio Express , ce qui est amplement suffisant pour démarrer le développement d'une interface graphique.

18
Spidey

J'ai trouvé un site Web avec un tutoriel "simple": http://www.winprog.org/tutorial/start.html

14
ZippyV

Qt est le meilleur.

6
ufukgun

Il est facile de créer une interface graphique Windows .NET en C++.

Voir le tutoriel suivant de MSDN . Vous pouvez télécharger tout ce dont vous avez besoin (Visual C++ Express) pour gratuit .

Bien sûr, vous vous attachez à .NET, mais si vous vous contentez de jouer ou si vous n’avez besoin que d’une application Windows, tout ira bien (la plupart des gens ont encore Windows ... pour le moment).

3
Justicle

J'utilise FLTK car QT n'est pas gratuit. Je ne choisis pas wxWidgets car mon premier test avec un simple programme hello world produit un exécutable de 24 Mo, fltk 0,8 Mo ...

3
pernecker