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

270

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

Par où commencer avec la programmation de l'interface utilisateur graphique en C ++? Comment en créer un?

waiwai933
la source
4
Ça dépend. Quel type de système d'exploitation visez-vous? De nombreux frameworks GUI sont spécifiques au système d'exploitation.
Michael Ratanapintha
3
Quel OS / plateforme? Ou, si vous êtes intéressé par l'écriture d'applications GUI multiplateformes, dites-le - ces choses font une énorme différence pour C ++ ...
Shog9
3
PHP prend en charge l'écriture de programmes GUI. Il n'y a aucune raison pour laquelle vous ne pouvez pas exécuter de programmes PHP à partir de la ligne de commande, et il existe des bibliothèques gui comme PHP-GTK gtk.php.net et PHP-Qt php-qt.org qui peuvent vous aider. Vous pouvez également évaluer pourquoi vous avez besoin c ++. L'écriture d'interfaces graphiques en c ++ est plus difficile que dans de nombreux autres langages, et vous pourriez être en mesure de regrouper votre code c ++ dans des bibliothèques appelables depuis Python ou C # ou PHP ou quelque chose d'un peu plus facile à coder pour les interfaces graphiques.
kibibu
6
Votre question est si large que je pense que vous ne voulez pas seulement les noms des boîtes à outils ou même juste quelques tutoriels. Vous voulez des livres , ceux qui vous donnent plus que des API ou des exemples, qui vous donnent réellement des concepts. KTC en recommande quelques-uns ci-dessous, mais je suggère, quelle que soit la boîte à outils que vous choisissez de commencer à jouer, assurez-vous d'en trouver une sur laquelle vous pouvez également lire.
quark
6
"L'écriture d'interfaces graphiques en c ++ est plus difficile que dans de nombreuses autres langues" Sur quoi basez-vous cette affirmation?
piotr

Réponses:

164

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. Fondamentalement, vous obtenez une suite de fichiers d'en-tête et vous pouvez appeler des fonctions dans ces bibliothèques importées, tout comme vous le feriez avec stdlib et printf.

Chaque système d'exploitation est livré avec sa propre boîte à outils GUI, sa suite de fichiers d'en-tête et ses appels d'API, ainsi que sa propre façon de faire. Il existe également des boîtes à outils multiplateformes comme GTK , Qt et wxWidgets qui vous aident à créer des programmes qui fonctionnent n'importe où. Ils y parviennent en ayant les mêmes appels API sur chaque plate-forme, mais une implémentation différente pour les fonctions API qui appellent les appels API natifs du système d'exploitation.

Une chose qu'ils auront tous en commun, qui sera différente d'un programme CLI, est ce qu'on appelle une boucle d'événement. L'idée de base est quelque peu compliquée et difficile à compresser, mais cela signifie essentiellement qu'il n'y a 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
  • le cas échéant, envoyez ces événements aux gestionnaires appropriés
  • lorsque vous avez terminé, cédez le contrôle au système d'exploitation (généralement avec une sorte d'appel spécial de fonction "veille" ou "sélection" ou "rendement")
  • alors la fonction yield 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 basée sur les événements. Si vous avez une expérience avec 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 sur les événements qui existent, votre seul travail consiste à écrire et à enregistrer des gestionnaires.

Vous devez garder à l'esprit que la programmation GUI 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 simplement un serveur Web intégré à votre programme et d'avoir une interface HTML / Web. La seule exception que j'ai rencontrée est le constructeur d'interface Cocoa + Xcode + d' Apple + des didacticiels qui en font facilement l'environnement le plus accessible pour les personnes nouvelles en programmation GUI que j'ai vues.

Breton
la source
1
« il est en fait beaucoup plus facile d’intégrer simplement un serveur Web intégré dans votre programme et d’avoir une interface HTML / Web. » Cela dépend. Si vous voulez faire des trucs fantaisistes (interface utilisateur complexe, contrôles personnalisés, animations, etc.), oui. Si vous voulez simplement une interface graphique typique (avec les contrôles habituels et une sensation native), non.
Acorn
167

Il existe de nombreuses bibliothèques GUI portables gratuites , chacune avec ses propres forces et faiblesses:

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

Notez cependant que vous devez éviter les fonctionnalités spécifiques à la plate-forme telles que l'API Win32 ou MFC. Cela vous lie inutilement sur une plate-forme spécifique avec presque aucun avantage.

vog
la source
25
Personnellement, je pense que la programmation de l'API Win32 est magnifique. Je l'aime beaucoup plus que l'utilisation de Qt, et c'est en soi un avantage. Mais c'est peut-être juste moi.
mrduclaw
6
Mon expérience personnelle est exactement le contraire. L'API Win32 m'a causé plus de tracas que toute autre API.
vog
17
@mrduclaw, "Je pense que la programmation de l'API Win32 est magnifique". J'ESSAYE à tout prix d'écrire du code portable. (veuillez noter que j'ai utilisé le mot "essayer" car il y a des exceptions ...) En quoi l'écriture de code non portable est-elle considérée comme "belle"?
Trevor Boyd Smith,
11
@Trevor Boyd Smith: Des objectifs différents, je suppose. Presque aucun du code que j'ai jamais écrit professionnellement n'aurait pu être multiplateforme, donc cela n'a jamais été un problème pour moi.
mrduclaw
1
La question à un million de dollars est que les gars qui fabriquent des entraîneurs de jeux fournissent juste de petits exe et leurs programmes ont une belle interface utilisateur, donc je me demande comment ils construisent l'interface utilisateur, ils ne fournissent pas ces librairies tierces avec?
user889030
74

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

  1. Installer Qt Creator

    entrez la description de l'image ici

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

    entrez la description de l'image ici

  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".

Kirill V. Lyadvinsky
la source
Dans le passé, j'avais eu des problèmes avec d'autres interfaces graphiques qui n'étaient pas assez conviviales pour les débutants. Mais, Qt a d'excellents tutoriels. Merci pour la recommandation!
JD
23

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

  • Interagissez directement avec le système d'exploitation via son API, qui pour Microsoft Windows est une surprise surprise appelée Windows API . La référence définitive pour WinAPI est le site Web MSDN de Microsoft . Un didacticiel en ligne populaire pour les débutants est le didacticiel de programmation API Win32 de Forger . Le livre classique pour cela est la programmation Windows de Charles Petzold , 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 enveloppe WinAPI dans la classe C ++. La référence pour cela est à nouveau MSDN. Un livre classique pour cela est la programmation de Jeff Prosise Windows avec MFC, 2e édition . Si vous utilisez, par exemple, CodeGear C ++ Builder, l'option ici est VCL .

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

KTC
la source
9
Le MFC est mauvais. Je préférerais utiliser l'API WIN si je n'avais pas d'autre choix.
the_drow
@the_drow Qu'en est-il de sourceforge.net/projects/win32-framework
Jerry Jeremiah
18

Puisque je suis déjà là où vous êtes en ce moment, je pense que je peux 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 de la plate-forme et du code spécifique 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 chose est: il existe de nombreuses bibliothèques qui traitent ces limitations et différences d'architecture abstraite en une seule API multi-plateforme. Ceux suggérés auparavant, GTK et Qt, sont quelques-unes 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 noms et classes sont introduits en même temps. Pour cette raison, ils sont fournis avec un éditeur GUI WYSIWYG. Ils rendent à peu près possible un logiciel de programmation 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 une expérience en Delphi , Visual Studio peut être plus familier. Il existe également des alternatives gratuites à l'environnement Visual Studio complet fourni par Microsoft: Visual Studio Express , qui est plus que suffisant pour démarrer le développement de l'interface graphique.

Spidey
la source
15

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

ZippyV
la source
8
Cela présente l'API Win32, une approche de très bas niveau de la programmation GUI qui vous relie à la plate-forme Windows. Je ne recommanderais pas cela.
vog
17
C'est une option valable. Je suis d'accord que ce n'est peut-être pas le meilleur endroit pour commencer, mais cela ne mérite pas un vote négatif.
Emil H
1
Je sais que ce n'est pas la solution idéale, mais cela aide à apprendre comment fonctionne le système GUI dans Windows. J'ai lu ce tutoriel il y a quelques années et maintenant je sais ce qu'est la boucle de message et comment elle fonctionne. Lorsque vous travaillez avec Winforms dans .net, cette connaissance peut être utile.
ZippyV
7
Si vous allez écrire des applications de bureau, rien ne peut remplacer la façon dont le système d'exploitation se rend réellement et interagit avec l'utilisateur. Si vous utilisez simplement une bibliothèque sans comprendre les principes fondamentaux, vous ne comprendrez jamais vraiment ce qui se passe. Apprendre un peu la programmation de bas niveau de win32 gui sera du temps bien dépensé.
Jim In Texas
@Jim au Texas: je suis d'accord, mais ce "peu de bas niveau" devrait être appris après les bases, donc je trouve toujours cette recommandation inappropriée pour les débutants.
vog
3

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

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

Bien sûr, vous vous liez à .NET, mais si vous ne faites que jouer ou si vous n'avez besoin que d'une application Windows, tout ira bien (la plupart des gens ont encore Windows ... pour l'instant).

Justicle
la source
3

J'utilise FLTK car Qt n'est pas gratuit. Je ne choisis pas wxWidgets , car mon premier test avec un simple Hello, World! programme produit un exécutable de 24 Mo, FLTK 0,8 Mo ...

pernecker
la source
4
En raison des changements de licence QT, je prévois de passer à QT
pernecker
2
Mon propre programme wxWidgets est de 5,9 Mo, même avec toutes les bibliothèques liées à l'intérieur
msangel