Quelles sont les différences entre Gtk+ et Qt?

beaucoup de gens semblent avoir une opinion sur ce qui est mieux. Je ne demande pas vraiment ces opinions, ce que j'aimerais savoir ce sont les détails: quelles sont les choses qui font qu'une boîte à outils graphique est différente d'une autre, et quelles sont les différences entre Qt et Gtk+?

17
demandé sur Matthew 2009-11-26 04:25:38

3 réponses

Je ne peux pas parler directement à Gtk+, mais à mon travail précédent j'ai utilisé Gtkmm, et à mon travail actuel j'utilise Qt. Les deux sont C++, donc à cet égard ils sont cohérents, mais Gtkmm n'est/n'était qu'un wrapper du code Gtk+, qui est en direct C.

au moment où j'ai changé de travail, je me souviens que l'une des principales différences dans le code D'assurance-chômage était la façon dont les deux boîtes à outils traitaient les mises en page. J'ai pensé que Gtk faisait mieux, que Qt faisait mieux. Les deux vous permettent d'obtenir vos widgets où vous voulez eux, finalement.

déboguer avec Gtkmm a été un peu pénible, parce que les classes n'ont généralement rien fait d'autre que de tenir un pointeur vers une structure et d'appeler les 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 paramètres, au moins par rapport à la version de Gtkmm que j'utilisais. Les choses pour rendre le filetage, la communication inter-processus, et le réseautage plus facile sont tous appréciés quand vous avez besoin de ajouter une nouvelle dimension à votre programme. Ils ont aussi leurs conteneurs, si vous voulez les utiliser, qui je pense ont une interface plus propre que les conteneurs STL -- mais ils font à peu près la même chose à la fin, donc c'est un léger avantage.

le mécanisme signal / slot entre Gtkmm et Qt est différent. Qt s'appuie sur une étape supplémentaire dans le 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 slots doit hériter d'un QObject, et L'héritage de QObject doit être le premier, sans structure de diamant. Il est donc difficile de définir une interface abstraite qui émet un signal, par exemple. Du côté positif, ils sont intrinsèquement conscients des problèmes de filetage, et convertiront la connexion signal/slot en une connexion basée sur l'événement si nécessaire. Gtkmm utilise des signaux SigC, qui sont des classes C++ simples, et qui me semblent utiles dans une plus grande variété de situations. Aussi, seuls les objets qui font une connexion pour hériter de la classe de base magique, si je me souviens bien. De Plus, puisque les fentes sont des objets, vous pouvez les utiliser comme très agréable adaptable foncteur d'objets.

je suis sûr qu'il y a d'autres différences, mais c'est ce que je me souviens maintenant. Gardez à l'esprit que ma dernière expérience avec Gtkmm était il y a environ 3 ans, donc certains de ces éléments peuvent avoir changé MAINTENANT.

22
répondu Caleb Huitt - cjhuitt 2009-11-26 15:11:54

pour comprendre les différences, il est préférable de comprendre l'histoire.

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

le GIMP commençait à être développé et à l'époque les outils de fenêtre n'étaient pas à la hauteur de ce dont les développeurs avaient besoin, ils ont donc commencé à écrire la trousse 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, en raison des problèmes potentiels de licence avec QT, Gnome a été lancé et a décidé d'utiliser la bibliothèque GTK+.

Maintenant, si vous regardez l' Qt Design et conception GTK entrées sur Wikipédia, vous pouvez commencer à voir les différences entre les systèmes.

notez que QT est appelé:

cadre de développement d'applications multiplateformes

alors que GTK+ est appelé:

croix-plate-forme de widget toolkit pour créer des interfaces graphiques utilisateur.

si ces entrées doivent être crues alors je pense que c'est ce que nous pourrions les différences majeures entre les deux, mais je dirais que c'est une assez fine ligne dans le monde d'aujourd'hui.

14
répondu Wayne 2009-11-26 02:15:20

tout d'abord, vous pouvez utiliser Gtk+ à partir de C. Qt est C++ seulement.

de plus, les applications Gtk+ ont tendance à avoir des dialogues qui changent constamment, avec un bouton de fermeture. Qt tend à être le long des lignes de Ok / Apply / Cancel. Cependant, je ne sais pas dans quelle mesure cela est appliqué au niveau de la boîte à outils.

pour ce qui est de la programmation, Je ne sais pas quel mécanisme de rappel Gtk utilise, mais le mécanisme signal-slots de Qt déchire complètement.

5
répondu György Andrasek 2009-11-26 01:39:52