Question

Je suis un programmeur C # qui a commencé à utiliser Ubuntu il y a environ 2 ans. Je veux apprendre la programmation graphique en C ou C ++. Je n'aime pas vraiment le mono, ça a tendance à planter sur mon système. J'ai une compréhension de base de C ++. Je n'ai jamais travaillé en C, mais ça a l'air cool. Quelle boîte à outils devrais-je apprendre / utiliser? Donnez Pro / Cont de chacun. Merci!

Était-ce utile?

La solution

Etant donné que C ++ vous est plus familier, GTKmm vous conviendra peut-être mieux, car vous pouvez utiliser des idiomes tels que RAII. Malheureusement, GTKmm est un peu incomplet et manque quelques-unes des pièces les moins utilisées de GTK.

GTK + seul, cependant, expose essentiellement un modèle objet similaire à ce que vous trouvez en C ++, mais avec uniquement des fonctions en C. Des tâches telles que la construction et la destruction en C ++ sont effectuées explicitement dans l'API C et les instances de widgets sont gérées exclusivement via des pointeurs.

Essayez les deux et voyez lequel correspond le mieux à votre projet.

Autres conseils

Je pourrais être accusé de partialité car je contribue à contribuer à gtkmm, mais j’étais un utilisateur d’abord, alors ... En tout cas, je recommanderais vivement gtkmm si vous êtes à l’aise avec C ++. La gestion de la mémoire est beaucoup plus facile avec gtkmm qu'avec GTK + car les objets comptés par référence sont gérés automatiquement avec des pointeurs intelligents. Vous pouvez également instancier des objets en tant que variables automatiques (par exemple, sur la pile) et déterminer leur durée de vie en fonction de leur étendue. Donc, en pratique, il est beaucoup plus facile d'éviter les fuites de mémoire avec gtkmm qu'avec GTK +.

Un autre énorme avantage de gtkmm par rapport à GTK + (à mon avis) est l’utilisation d’un cadre de signalisation de type sûr. Dans GTK +, vous devez constamment faire en sorte que les éléments soient des indicateurs de vide, puis les utiliser comme vous le souhaitez. Dans gtkmm, vous n'avez pas besoin de faire cela, et vous pouvez tirer parti du compilateur qui impose la sécurité de type sur vos gestionnaires de signaux.

Un autre gros avantage par rapport à C / GTK + est la facilité à dériver de nouvelles classes. Dans GTK +, vous devez écrire beaucoup de code standard et ré-implémenter les éléments que vous obtenez gratuitement en C ++ dans le cadre du langage (par exemple, héritage, constructeurs, destructeurs, etc.). C’est plus fastidieux et plus sujet aux erreurs.

greyfade a mentionné que gtkmm est incomplet et qu'il a raison dans une certaine mesure - gtkmm ne couvre pas absolument tout dans l'API GTK + (même si elle est terriblement proche). Mais dans la pratique, cela ne pose pas de problème car vous pouvez toujours utiliser l'API C / GTK + directement à partir de votre code gtkmm. Cette compatibilité C est un énorme avantage du C ++ par rapport à quelque chose comme les liaisons C # ou Python où vous n’auriez aucune alternative si la liaison ne couvrait pas une partie de l’API.

Les seules vraies raisons de choisir GTK + par rapport à gtkmm (IMO) sont que gtkmm a un peu de charge supplémentaire puisqu'il s'agit d'un wrapper placé au-dessus de la bibliothèque C (mais il ne s'agit généralement que d'un appel de fonction impact négligeable), ou si vous détestez ou ne pouvez pas utiliser C ++.

Si vous êtes un programmeur C #, pourquoi ne pas jeter un coup d'oeil à Vala ?

J'utilise pygtk pour la plupart de mes applications d'interface graphique Linux, mais Python était tout simplement trop lent pour le projet sur lequel je travaille en ce moment. J'essayais donc de choisir l'un de GTK + et GTKmm. Puis j'ai rencontré Vala.

C'est un nouveau langage et la documentation est donc assez limitée pour le moment, mais je pense qu'il possède le meilleur des deux mondes: la syntaxe C # avec la vitesse C.

Comme beaucoup l'ont dit, Gtkmm vous fournit une bonne gestion de la mémoire, des objets comptés, etc. Il tombe dans un seul département. Documentation. L’ensemble du projet Gtkmm souffre de la "non-documentation" phénomènes, où la documentation publiée (et republiée sur des sites tiers) est simplement une analyse javadoc des fichiers d’en-tête.

Je voulais juste que vous sachiez dans quoi vous vous engageriez. Par exemple, le a perdu de sa vie, mais a pris de la profondeur .

Avez-vous regardé QT?
C'est beau design C ++, multi-plateforme et LGPL

Je pense que la meilleure façon d’aller serait d’apprendre gtkmm! Une fois que vous avez terminé avec les bases de gtkmm, GTK + devrait être assez simple à apprendre (à condition de connaître C et d’être à l'aise avec les pointeurs).

Si vous ne connaissez pas le C, vous pouvez l’apprendre rapidement en lisant Le langage de programmation C de Dennis Ritchie

Je vous recommande d’apprendre gtkmm d’abord car il est spécialement conçu pour le langage C ++, qui est un peu similaire à C # car ils sont tous deux orientés objet, donc gtkmm sera relativement facile à apprendre en premier lieu avec GTK +.

Après gtkmm, vous pouvez passer à GTK +

La plupart des sociétés open source utilisent GTK + plutôt que gtkmm. GTK + vaut donc la peine d’être appris!

scroll top