95 votes

Que dois-je choisir ? GTK+ ou Qt ?

Quelqu'un peut-il suggérer les meilleures utilisations de ces bibliothèques aujourd'hui ? S'agit-il seulement d'interfaces graphiques, ou ont-elles aussi un support pour les bases de données, le XML, les réseaux, le threading, etc ?

J'ai lu des articles à leur sujet et j'ai envisagé de commencer à en apprendre/utiliser un.

Quelle est la plus courante ? Quelle est la différence entre eux ? Pourquoi choisiriez-vous l'un plutôt que l'autre ?

20 votes

À l'origine, le modèle de licence de Qt était très controversé : il s'agissait d'une licence GPL complète ou d'une licence commerciale, tandis que GTK+ était sous LGPL (ce dernier était donc plus facile à utiliser en combinaison avec votre produit à source fermée). Mais aujourd'hui, Qt est également disponible sous LGPL, donc ce n'est plus une raison réelle de choisir l'un ou l'autre.

3 votes

Vous pouvez également consulter cette question connexe : stackoverflow.com/questions/1801074/

6 votes

Et encore une fois une bonne question fermée sur stackoverflow. Je voudrais ajouter que si vous avez besoin d'un bon widget HTML intégré, vous devez utiliser GTK maintenant (après que QT 5.2 soit passé à un ensemble de fonctionnalités réduites de façon dramatique et inutilisable) ou utiliser QT et intégrer le CEF de Chrome qui ajoute beaucoup de choses, de complications et 20MB à votre application.

103voto

Gregory Pakosz Points 35546

Comme vous semblez viser principalement Linux, le choix dépend essentiellement du langage de programmation que vous souhaitez utiliser.

Si vous codez en C, optez évidemment pour GTK+.

Si vous codez en C++, optez pour Qt, sinon vous aurez besoin de Gtkmm (un wrapper C++ sur GTK+)

Si vous codez en Python, GTK+ et Qt ont tous deux des liens pour ce langage : voir PyGtk , PyQt y PySide (celle lancée par Nokia elle-même).

Si vous codez en Java, Qt n'est plus une option viable à mon avis car Nokia a abandonné Qt Jambi (les liaisons Java pour Qt).

En outre, Qt est plus performant en ce qui concerne son diagramme de scène. QGraphicsScene son moteur de script construit sur Javascript Core (le moteur de WebKit), sa machine à états et son cadre d'animation, ainsi que l'API interface utilisateur déclarative .

GTK+ n'offre pas grand-chose, bien que vous puissiez utiliser Clutter à côté de lui.

Si vous recherchez spécifiquement les bases de données, le XML (GTK+ dispose d'un analyseur syntaxique pour un sous-ensemble de XML) et le threading (GTK+ dispose de GLib ), alors Qt offrira tout cela en QtSql , QtXml y QtConcurrent .

Dans l'ensemble, je dirais que Qt est un choix sûr. Mais GTK+ est également très compétent.

Je ne suis pas sûr que vous obtiendrez une réponse claire et nette à votre question, ce qui explique pourquoi certaines personnes continuent de préférer Gnome à KDE ou vice-versa. Choisissez ce qui vous convient le mieux.

PS : Si vous envisagez de cibler également Symbian, optez pour Qt.

EDIT : Une autre chose qui est aussi très bien avec Qt est QtWebView : il introduit Chromium dans votre application Qt pour afficher du contenu web. D'autres intègrent du contenu web dans leurs applications en utilisant par exemple Awesomium ou Berkelium.

0 votes

N'oubliez pas que QtScript est alimenté par JavaScriptCore, qui est actuellement le moteur JavaScript le plus rapide grâce à SquirrelFish Extreme.

1 votes

En ce qui concerne votre édition, il existe WebKitGtk+ pour GTK+. À moins que l'un soit substantiellement plus mature que l'autre, je ne pense pas que l'existence de QtWebKit puisse être considérée comme un avantage par rapport à GTK+.

0 votes

Si vous codez en Ruby chercher QtRuby .

44voto

rui Points 4282

J'ai déjà utilisé GTK+, QT et wxWidgets. Voici un bref résumé :

Pour mon premier projet d'interface utilisateur multiplateforme, j'ai décidé d'opter pour wxWidgets, principalement parce qu'à l'époque, la licence n'était pas aussi restrictive que celle de QT (QT était sous licence GPL et seulement pour Linux) et qu'il avait une interface utilisateur spécifique à la plateforme (contrairement à GTK). Le projet a bien fonctionné mais il y a eu quelques problèmes pour le compiler et le faire fonctionner correctement sur d'autres plates-formes - parfois certains événements étaient déclenchés différemment et ainsi de suite. De plus, la GDI dans wxWidgets était assez lente.

Ensuite, j'ai utilisé GTK pour un autre projet en python. Pour cela, j'ai utilisé les bindings python et tout a fonctionné plus ou moins bien. Je n'ai pas apprécié le fait que l'interface utilisateur n'ait pas l'air native sous Windows et Mac, et que lorsque vous lancez une application GTK+, elle émet toujours des tas d'avertissements CRITIQUES qu'il est bon d'ignorer :S.

Enfin, j'ai fait un projet QT très simple maintenant que Nokia l'a acquis et il était brillant. Le meilleur des trois. Tout d'abord, si vous n'êtes pas de la vieille école qui préfère VI ou Emacs, QtCreator est brillant. J'aime vraiment VI et l'ai utilisé pendant des années mais je préfère de loin QtCreator pour les projets C++ QT. En ce qui concerne la bibliothèque, j'ai également beaucoup aimé la documentation et les API fournies. QT a un concept de slots et de signaux qui introduit de nouveaux mots-clés C++ et un préprocesseur. En gros, après avoir lu un tutoriel, vous l'aurez facilement et vous commencerez à l'aimer. Je fais maintenant du développement iPhone et cela ressemble un peu au paradigme d'interface utilisateur de Cocoa/Interface Builder.

Résumé : Je choisirais QT sans hésiter. La licence est très bonne et le SDK et la documentation sont très intéressants.

15 votes

Je considère que c'est un point positif que les applications GTK+ aient le même aspect sur différentes plates-formes, car cela signifie que je ne dois pas passer des semaines supplémentaires à chercher comment faire en sorte que mes interfaces utilisateur s'arrangent exactement comme il faut avec chaque boîte à outils native. Aussi - when you launch a GTK+ app it always debug outputs loads of CRITICAL warnings which seem fine to ignore. :S - Non, ça ne l'est pas, à moins que tu fasses quelque chose de mal, ce qui est no bien. Je n'ai jamais vu un avertissement critique qui ne provenait pas d'une erreur de ma part et qui n'était pas extrêmement facile à corriger en utilisant un code correct. Et je reçois pas de des messages de débogage, même pas des avertissements

26voto

ngm Points 2748

Je n'ai jamais utilisé GTK, mais d'après mon expérience personnelle de l'utilisation de Qt :

C'est bien plus qu'une simple interface graphique. C'est un cadre d'application complet. J'avais l'habitude de le considérer comme les bibliothèques Java pour C++. Il fournit tout ce que vous avez mentionné - base de données, XML, mise en réseau et threading, et plus encore. Il fournit également des éléments tels que les conteneurs et les itérateurs, ainsi que des contreparties à un certain nombre de bibliothèques Boost.

Ce qui m'a le plus impressionné lorsque j'ai commencé à utiliser Qt, c'est sa documentation extrêmement complète. Vous disposez d'un programme appelé Qt Assistant, qui fournit une documentation API entièrement indexée et consultable sur votre bureau, ainsi que de nombreux exemples de code et tutoriels. J'ai trouvé que cela faisait une grande différence par rapport à la recherche d'informations sur les API sur le Web à chaque fois. Un accès très rapide lorsque vous devez vous souvenir de la signature d'une méthode.

Je ne suis pas sûr de savoir lequel est le plus courant ; il est probablement difficile de le mesurer avec précision. Ils sont certainement tous deux populaires. Comme Gnome est le bureau par défaut d'Ubuntu, et que Gnome repose sur GTK, il est évidemment très utilisé. Bien sûr, KDE est également très populaire. Nokia pousse fortement Qt dans l'espace mobile - leur Maemo OS, utilisé sur le nouveau N900 par exemple, va bientôt passer à Qt comme boîte à outils par défaut (actuellement, c'est GTK). Je crois que Qt deviendra aussi bientôt la boîte à outils par défaut pour Symbian OS.

Je n'ai pas utilisé Qt Creator, mais j'ai entendu beaucoup de bonnes choses à son sujet. C'est un IDE C++ avec une forte intégration évidente avec Qt. Il dispose également d'une fausse émulation de Vim, ce qui est toujours agréable si vous aimez ce genre de choses !

Qt utilise qmake pour la configuration de la construction. Je trouve cela beaucoup plus agréable que de devoir écrire ses propres makefiles. Je ne sais pas ce que GTK utilise pour la construction.

Une ou deux choses que j'ai trouvées un peu rebutantes avec Qt au début, c'est son utilisation intensive des macros de préprocesseur. Le système de signal/slots fournit un mécanisme agréable pour le passage d'événements/messages dans votre application, mais cela ressemble un peu à de la magie qui peut ne pas être facilement portable dans une autre boîte à outils si vous le souhaitez un jour. De même, le moc (meta-object compiler), bien que je ne sois pas tout à fait sûr de ce qu'il fait, donne aussi un peu trop l'impression d'être de la magie en coulisse.

Dans l'ensemble, cependant, je recommande Qt, en particulier si vous êtes en train d'apprendre. Il dispose d'une documentation vraiment étonnante, d'un IDE agréable et de forums très fréquentés. Vous serez en mesure de construire des applications C++ très rapidement avec lui, en particulier avec le QML à venir dans 4.7.

8voto

Slartibartfast Points 5469

Cela dépend probablement de ce que vous voulez faire. Je recommanderais Qt, parce que c'est plus qu'une interface graphique, qu'il y a de bons liens avec Python (tout comme Gtk), et que les bibliothèques d'interface graphique elles-mêmes sont (subjectivement parlant) plus agréables que Gtk.

Gtk est d'un autre côté plus commun dans le monde linux, donc vous pouvez probablement obtenir plus d'aide sur le web. La raison de la généralisation de Gtk a probablement plus à voir avec Gnome et Ubuntu, plutôt qu'avec les mérites techniques, mais si vous voulez que votre logiciel s'intègre bien à ces deux-là, vous y arriverez plus facilement avec Gtk.

7voto

ChristopheD Points 38217

Qt, pour sa part, dispose d'une base de données solide, d'un réseau, d'un support de threads, etc... Il fait beaucoup plus qu'une simple interface graphique multiplateforme (et il fait la plupart des choses assez bien).

Je le recommande plutôt que GTK+.

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