320 votes

Comment construire une interface utilisateur graphique en C++ ?

Jusqu'à présent, tous mes programmes en C++ ont été réalisés à l'aide de l'interface en ligne de commande et le seul autre langage que je maîtrise est le PHP, qui ne prend pas en charge les interfaces graphiques.

Par où commencer pour programmer une interface utilisateur graphique en C++ ? Comment en créer une ?

5 votes

Cela dépend. Quel type de système d'exploitation visez-vous ? De nombreux cadres d'interface graphique sont spécifiques au système d'exploitation.

3 votes

Quel système d'exploitation / plateforme ? Ou, si vous êtes intéressé par l'écriture d'applications GUI multiplateformes, veuillez le dire - ces choses font une grande différence. énorme différence pour C++...

1 votes

Cela n'a pas vraiment d'importance. Mais prenons l'exemple de Windows XP.

204voto

Breton Points 9625

En gros, le système de fenêtrage d'un système d'exploitation expose certains appels API que vous pouvez exécuter pour effectuer des tâches telles que la création d'une fenêtre ou l'ajout d'un bouton à la fenêtre. En fait, vous obtenez une série 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, sa suite de fichiers d'en-tête, ses appels d'API et sa propre façon de faire les choses. Il existe également des boîtes à outils multiplateformes comme GTK , Qt y wxWidgets qui vous aident à créer des programmes qui fonctionnent partout. Ils y parviennent en ayant les mêmes appels d'API sur chaque plate-forme, mais une implémentation différente pour les fonctions d'API qui font appel aux appels d'API du système d'exploitation natif.

Une chose qu'ils auront tous en commun, et qui sera différente d'un programme CLI, est ce qu'on appelle une boucle d'événement. L'idée de base est un peu compliquée et difficile à résumer, mais en gros, cela signifie qu'il ne se passe pas grand-chose dans votre classe principale/fonction principale, sauf.. :

  • vérifier la file d'attente des événements s'il y a de nouveaux événements
  • s'il y en a, distribuer ces événements aux gestionnaires appropriés
  • lorsque vous avez terminé, redonnez le contrôle au système d'exploitation (généralement à l'aide d'une fonction spéciale "sleep", "select" ou "yield").
  • alors la fonction yield reviendra lorsque le système d'exploitation aura terminé, et vous aurez un nouveau tour de boucle.

Il existe de nombreuses ressources sur la programmation par événement. Si vous avez une quelconque expérience de JavaScript, il s'agit de 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 sur les événements existants, votre seul travail consiste à écrire et à enregistrer des gestionnaires.

Vous devez garder à l'esprit que la programmation des interfaces graphiques est incroyablement compliquée et difficile, en général. Si vous en avez la possibilité, il est en fait beaucoup plus facile d'intégrer un serveur web dans votre programme et d'avoir une interface basée sur HTML/web. La seule exception que j'ai rencontrée est le programme d'Apple intitulé Cacao + Xcode + Le logiciel est composé d'un générateur d'interface et de tutoriels qui en font l'environnement le plus facile d'accès pour les débutants en programmation d'interface graphique que j'aie jamais vu.

3 votes

" il est en fait beaucoup plus facile d'intégrer un serveur web dans votre programme et d'avoir une interface basée sur le html/web. " Cela dépend. Si vous voulez faire des choses fantaisistes (interface utilisateur complexe, contrôles personnalisés, animations, etc. Si vous voulez simplement une interface graphique typique (avec les contrôles habituels et une sensation native), non.

184voto

vog Points 3334

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

En particulier Qt a de bons tutoriels et des outils qui vous aideront à démarrer. Profitez-en !

Notez, cependant, que vous devez éviter la spécificité de la plate-forme comme l'API Win32 ou MFC. Cela vous lie inutilement à une plate-forme spécifique, sans aucun avantage.

25 votes

Personnellement, je pense que programmer avec l'API Win32 est magnifique. Je l'aime beaucoup plus que l'utilisation de Qt, et c'est en soi un avantage. Mais ce n'est peut-être que moi.

7 votes

Mon expérience personnelle est exactement le contraire. L'API Win32 m'a causé plus de tracas que toute autre API.

21 votes

@mrduclaw, "Je pense que programmer selon l'API Win32 est magnifique". J'ESSAIE à tout prix d'écrire du code portable. (veuillez noter que j'ai utilisé le mot "essayer" car il y a des exceptions...) Comment le fait d'écrire du code non portable peut-il être considéré comme "beau" ?

78voto

Kirill V. Lyadvinsky Points 47627

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

  1. Installer Créateur Qt

    enter image description here

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

    enter image description here

  3. Construisez-le.

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

Maintenant, tu es prêt à lire beaucoup de documentation pour créer quelque chose de plus compliqué que l'application GUI "Hello world".

0 votes

Dans le passé, j'ai eu des problèmes avec d'autres interfaces graphiques qui n'étaient pas assez conviviales pour les débutants. Mais, Qt a de très bons tutoriels. Merci pour la recommandation !

26voto

KTC Points 6022

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

  • Interagir directement avec le système d'exploitation via son API, qui pour Microsoft Windows est l'appel surprise API Windows . La référence définitive pour l'interface WinAPI est l'ouvrage de Microsoft intitulé Site web MSDN . Un tutoriel en ligne populaire pour les débutants est le suivant Tutoriel de programmation de l'API Win32 de theForger . Le livre classique à ce sujet est celui de Charles Petzold. Programmation de Windows, 5e édition .

  • Utilisez une bibliothèque spécifique à la plateforme (à la fois en termes de système d'exploitation et de compilateur) telle que MFC qui intègre l'interface WinAPI dans une classe C++. La référence pour cela est à nouveau MSDN. Un livre classique à ce sujet est celui de Jeff Prosise. Programmer Windows avec MFC, 2ème édition . Si vous utilisez, par exemple, CodeGear C++ Builder, vous avez le choix entre les options suivantes VCL .

  • Utilisez une bibliothèque multiplateforme telle que GTK+ (wrapper C++ : gtkmm ), Qt , wxWidgets ou FLTK qui enveloppent l'API du système d'exploitation spécifique. L'avantage de ces logiciels est qu'en général, votre programme peut être compilé pour différents systèmes d'exploitation sans avoir à modifier les codes sources. Comme cela a déjà été mentionné, ils ont chacun leurs propres forces et faiblesses. L'une des considérations à prendre en compte lors du choix de l'un d'entre eux est sa licence. Pour les exemples donnés, GTK+ & gtkmm sont sous licence LGPL, Qt est sous diverses licences dont une option propriétaire, wxWidgets est sous sa propre licence wxWindows (avec un renommage en licence wxWidgets), et FLTK est sous LGPL avec exception. Pour les références, les tutoriels et les livres, consultez le site web de chacun d'entre eux pour plus de détails.

11 votes

MFC est diabolique. Je préférerais utiliser l'API WIN si je n'avais pas d'autre choix.

0 votes

19voto

Spidey Points 1417

Puisque j'ai déjà été là où vous êtes en ce moment, je pense pouvoir vous "répondre".

Le fait est qu'il n'existe 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 des fenêtres. La bonne nouvelle, c'est qu'il existe de nombreuses bibliothèques qui traitent de ces limitations et font abstraction des différences d'architecture dans une API multiplateforme unique. Les bibliothèques suggérées précédemment, GTK et Qt, font partie de ces bibliothèques.

Mais même ceux-ci sont un peu trop compliquée, car de nombreux nouveaux concepts, types de données, espaces de noms et classes sont introduits, tout à la fois. C'est pourquoi ils sont généralement fournis avec un éditeur graphique WYSIWYG. Ils rendent possible la programmation de logiciels avec des interfaces graphiques.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X