Question

Beaucoup de gens semblent avoir une opinion sur ce qui est préférable. Je ne demande pas vraiment ces opinions, mais j'aimerais savoir quels sont les détails: qu'est-ce qui différencie une boîte à outils graphiques d'une autre, et laquelle de ces différences Qt et Gtk + ont-ils?

Était-ce utile?

La solution

Je ne peux pas parler directement à Gtk +, mais lors de mon précédent emploi, j’utilisais Gtkmm et, lors de mon emploi actuel, j’utilisais Qt. Les deux sont en C ++, ils sont donc cohérents à cet égard, mais Gtkmm n’est / n’était qu’une enveloppe pour le code Gtk +, qui est en C droit.

Au moment où je changeais de travail, je me souviens que l'une des principales différences dans le code de l'interface utilisateur était la manière dont les deux kits d'outils traitaient les présentations. Certaines parties, je pensais que Gtk avait fait mieux, d’autres, je pensais que Qt était meilleur. Les deux vous permettent d’obtenir vos widgets où vous le souhaitez, éventuellement.

Déboguer avec Gtkmm était un peu pénible, car les classes ne faisaient généralement rien sauf détenir un pointeur sur une structure et appeler des fonctions Gtk +. Ce niveau supplémentaire d’indirection pourrait être gênant.

Qt a plus de code auxiliaire qui peut être utile dans différents contextes, du moins par rapport à la version de Gtkmm que j’utilisais. Les choses pour faciliter le filetage, la communication inter-processus et la mise en réseau sont toutes appréciées lorsque vous devez ajouter une nouvelle dimension à votre programme. Ils ont également leurs conteneurs, si vous souhaitez utiliser ceux-ci, qui, je pense, ont une interface plus saine que les conteneurs STL - mais ils ont à peu près la même chose au final, donc c'est un léger avantage.

Le mécanisme signal / emplacement entre Gtkmm et Qt est différent. Qt s'appuie sur une étape supplémentaire du processus de compilation pour générer des méta-informations, qu'il utilise pour ses signaux / slots. Un objet utilisant des signaux ou des emplacements doit hériter d'un QObject, et l'héritage QObject doit être le premier, sans structure en losange. Cela rend difficile la définition d'une interface abstraite qui émet un signal, par exemple. Du côté positif, ils sont intrinsèquement conscients des problèmes de threading et convertissent la connexion signal / emplacement en une connexion basée sur événement si nécessaire. Gtkmm utilise les signaux SigC, qui sont des classes simples C ++, et me semblent utiles dans une plus grande variété de situations. De plus, seuls les objets qui établissent une connexion doivent hériter de la classe de base magique, si je me souviens bien. De plus, étant donné que les emplacements sont des objets, vous pouvez également les utiliser comme de très beaux objets de foncteur adaptables.

Je suis sûr qu'il y a d'autres différences, mais c'est ce dont je me souviens maintenant. N'oubliez pas que ma dernière expérience avec Gtkmm remonte à il y a environ 3 ans. Certains de ces éléments ont peut-être déjà changé.

Autres conseils

Pour comprendre les différences, il vaut mieux comprendre l'histoire.

QT a été développé en tant qu'UI et avait quelques problèmes de licence au début, lorsque KDE a commencé à être développé. KDE a choisi QT car il n’y avait pas beaucoup de choix à l’époque (Motif, Tcl / Tk pour en nommer quelques-uns)

Le logiciel GIMP commençait à être développé et, à ce moment-là, les kits d’outils de Windows ne répondaient pas à tous les besoins des développeurs, ils ont donc commencé à écrire le kit d’outils Gimp (GTK). Après un certain temps, il a été décidé de réécrire GTK et de le rendre orienté objet (GTK +).

Également à cette époque également, en raison de problèmes de licence potentiels avec QT, Gnome a été lancé et a décidé d'utiliser la bibliothèque GTK +.

Maintenant, si vous regardez le QT Design et le GTK Design entrées sur Wikipedia, vous pouvez commencer à voir certaines des différences entre les systèmes.

Notez que QT est appelé:

  

cadre de développement d'applications multiplates-formes

alors que GTK + est appelé:

  

Boîte à outils de widgets multiplateformes pour la création d'interfaces utilisateur graphiques.

Si l’on en croit ces entrées, alors je pense que c’est ce que nous pourrions faire des différences majeures entre les deux, mais je dirais que c’est une ligne assez fine dans le monde actuel.

Tout d’abord, vous pouvez utiliser Gtk + à partir de C. Qt n’est que C ++.

De plus, les applications Gtk + ont tendance à avoir des boîtes de dialogue qui changent constamment, avec un bouton de fermeture. Qt a tendance à ressembler à Ok / Appliquer / Annuler. Cependant, je ne sais pas dans quelle mesure cela est appliqué au niveau de la boîte à outils.

En ce qui concerne la programmation, je ne sais pas quel mécanisme de rappel utilise Gtk, mais le mécanisme des signaux-slots de Qt est absolument fantastique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top