Que dois-je choisir: GTK + ou Qt? [fermé]


89

Quelqu'un peut-il suggérer quelles sont les meilleures utilisations de ces bibliothèques aujourd'hui? S'agit-il simplement d'une interface graphique ou ont-ils également un support de base de données, XML, réseau, thread, etc.?

J'étais en train de lire à leur sujet et j'ai envisagé de commencer à apprendre / à utiliser l'un d'entre eux.

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


20
À l'origine, il y avait beaucoup de controverse sur le modèle de licence Qt qui était soit entièrement GPL soit commercial, tandis que GTK + était LGPL (ce dernier était donc plus facile à utiliser en combinaison avec votre produit à source fermée). Mais maintenant, Qt est également disponible en tant que LGPL IIRC, ce n'est donc plus une vraie raison de choisir l'un ou l'autre.
Roalt

3
Vous pouvez également consulter cette question principalement liée: stackoverflow.com/questions/1801074/…
Caleb Huitt - cjhuitt

4
Et encore une bonne question fermée sur stackoverflow. Je veux ajouter que si vous avez besoin d'un bon widget HTML intégré, vous devez utiliser GTK maintenant (après le passage de QT 5.2 à un ensemble de fonctionnalités considérablement réduit / inutilisable) ou utiliser QT et intégrer le Chrome CEF qui ajoute beaucoup de choses, des complications et 20 Mo dans votre application.
Lothar

Réponses:


95

Comme vous semblez cibler principalement Linux, le choix dépend principalement 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 des liaisons pour le langage: voir PyGtk , PyQt et PySide (celui lancé par Nokia eux-mêmes).

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

De plus, Qt est plus haut de gamme en ce qui concerne son API QGraphicsScene , son moteur de script construit sur Javascript Core (le moteur alimentant WebKit), sa machine d'état et son framework d'animations, et l' interface utilisateur déclarative .

GTK + n'offre pas grand-chose bien que vous puissiez utiliser Clutter avec lui.

Si vous recherchez spécifiquement les fonctionnalités DB, XML (GTK + a un analyseur pour un sous-ensemble de XML) et de threading (GTK + a GLib ), Qt offrira tout cela dans QtSql , QtXml et QtConcurrent .

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

Je ne suis pas sûr que vous obtiendrez une réponse claire à 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: Je prévois de cibler également Symbian, alors optez pour Qt.

EDIT: Quelque chose qui est également génial avec Qt est QtWebView: il introduit Chromium dans votre application Qt pour afficher le contenu Web. D'autres incorporent du contenu Web dans leur application en utilisant par exemple Awesomium ou Berkelium.


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

1
Concernant votre édition, il existe WebKitGtk + pour GTK +. À moins que l'un ne soit sensiblement 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 +.
Matthew

Si vous codez en Ruby, recherchez QtRuby .
José Andias

5
gtkmmc'est génial, toute la puissance de GTK + mais en utilisant le C ++ réel selon la définition moderne, produisant le code GUI le plus propre et le plus lisible que j'ai vu ... en fait, juste le plus supportable , parce que quand j'ai commencé à essayer d'apprendre la programmation GUI, c'était la propreté de gtkmmcela qui a restauré ma volonté de vivre. Heureusement, la persévérance a porté ses fruits, et j'ai découvert que c'était extrêmement puissant, et cela m'a encouragé à devenir plus dans C ++ 14 que C ++ 03. En outre, il est bien entretenu, par le même mainteneur principal depuis plus d'une décennie AFAICT. Je suis juste un fan, pas d'affiliation, etc.
underscore_d

3
Oh ... les jours Symbian ...
daka

42

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 GPL et uniquement pour Linux) et qu'elle avait une interface utilisateur spécifique à la plate-forme (contrairement à GTK). Le projet a bien fonctionné, mais il y avait pas mal de problèmes pour le compiler et l'exécuter correctement sur d'autres plates-formes - parfois, certains événements étaient déclenchés différemment, etc. De plus, GDI dans wxWidgets était assez lent.

Ensuite, j'ai utilisé GTK pour un projet différent en python. Pour cela, j'ai utilisé les liaisons python et tout s'est déroulé plus ou moins bien. Je n'aimais pas vraiment le fait que l'interface utilisateur ne paraissait pas native sur Windows et Mac et aussi lorsque vous lancez une application GTK +, elle débogue toujours des charges d'avertissements CRITIQUES qui semblent bien ignorer. : S

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

Résumé: J'irais pour QT haut la main. La licence est plutôt bonne et le SDK et la documentation vraiment sympas.


13
Je considère positif que les applications GTK + se ressemblent sur différentes plates-formes, car cela signifie que je n'ai pas à passer des semaines supplémentaires à trouver comment faire en sorte que mes interfaces utilisateur s'organisent exactement 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, ce n'est pas le cas, sauf si vous faites quelque chose de mal, ce qui n'est pas bien. Je n'ai jamais vu une seule fois un avertissement critique qui ne provenait pas d'un oops de ma part et qui n'ait pas été extrêmement facile à corriger en utilisant un code correct. Et je ne reçois aucun message de débogage, pas même d'avertissement
underscore_d

25

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

C'est bien plus qu'une simple interface graphique. C'est tout un cadre d'application. J'avais l'habitude de penser que c'était les bibliothèques Java pour C ++. Il fournit tout ce que vous mentionnez - base de données, XML, mise en réseau et threading, etc. Il fournit également des éléments tels que des conteneurs et des itérateurs, ainsi que des équivalents à un certain nombre de bibliothèques boost.

Ce qui m'a le plus impressionné lorsque j'ai commencé à utiliser Qt, c'est la documentation extrêmement complète. Vous obtenez 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 en recherchant chaque fois sur le Web des informations sur l'API. Accès très rapide lorsque vous devez vous souvenir d'une signature de méthode.

Je ne sais pas lequel est le plus courant; c'est probablement difficile à mesurer avec précision. Ils sont certainement tous les deux populaires. Comme Gnome est le bureau par défaut d'Ubuntu et que Gnome se trouve au-dessus de GTK, il est évidemment largement utilisé. Bien sûr, KDE est également très populaire. Nokia pousse fortement Qt dans l'espace mobile - leur système d'exploitation Maemo, utilisé sur le nouveau N900 par exemple, va bientôt passer à Qt comme boîte à outils par défaut (actuellement, c'est GTK.) Je pense que Qt deviendra également 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 a également une fausse émulation vim qui est toujours agréable si vous aimez ce genre de chose!

Qt utilise qmake pour la configuration de la construction. J'ai trouvé cela beaucoup plus agréable que d'avoir à écrire vos propres makefiles. Je ne sais pas ce que GTK utilise pour la construction.

Au début, certaines choses que j'ai trouvées un peu décevantes avec Qt étaient ses grandes utilisations des macros de préprocesseur. Le système signal / slots fournit un mécanisme intéressant pour le passage d'événements / messages dans votre application, mais cela ressemble un peu à de la magie qui peut ne pas être facilement transférable vers une autre boîte à outils si vous le souhaitez. De plus, le moc (compilateur de méta-objets), bien que je ne sois pas tout à fait sûr de ce qu'il fait, ressemble aussi un peu trop à la magie qui se déroule dans les coulisses.

Dans l'ensemble, cependant, je recommanderais Qt, en particulier si vous apprenez. Il a une documentation vraiment incroyable et un bel IDE, et des forums occupés. Vous serez en mesure de créer des applications C ++ très rapidement avec lui, en particulier avec le QML à venir dans 4.7.


9

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

Gtk est en revanche plus courant dans le monde Linux, vous pouvez donc 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 des mérites techniques, mais si vous voulez que votre logiciel se marie bien avec ces deux-là, vous y parviendrez plus facilement avec Gtk.


7

Qt a certainement une base de données solide, un réseau, un support de thread, etc. Il fait beaucoup plus que simplement une interface graphique multiplateforme (et il le fait assez bien pour la plupart).

Je le recommanderais sur GTK +.


3

Il suffit d'ajouter des avantages QT à d'autres réponses. QT a une excellente documentation, son propre créateur d'IDE et d'interface graphique et améliore le C ++ avec de nouveaux concepts comme les slots / signaux (essentiellement des événements).

Je ne suis pas un développeur GTK, donc je ne peux pas les comparer au monde GTK :(


11
Pour Gtk, il existe également un créateur d'interface graphique Glade ( glade.gnome.org ).
davidbe

3

Qt. Ce n'est pas seulement orienté objet, il est "bon" orienté objet. Il est basé sur un "sous-ensemble" de C ++ qui ne repose pas sur l'obscurité du C ++ (mais vous êtes autorisé à vous en tenir à eux, si vous aimez le masochisme;)).

Il a une forte dynamique maintenant que Nokia l'a acheté (en fait, Nokia l'a fait il y a environ 2/3 ans). Ce sera dans tous les appareils mobiles Nokia ET Intel (smartphones, netbooks, tablettes).

C'est l'épine dorsale de KDE, donc il est très mature, mais il est conçu de manière très flexible, ce qui permet de supporter AUJOURD'HUI tous les derniers "trucs sympas" qu'un framework plus que juste-GUI devrait avoir.

Fonce.


5
Sous-ensemble? Plus comme un superset, compte tenu de qmake et moc.
rr-

1

Il semble également que Nokia est sur le point d'utiliser Qt partout, comme sur Maemo


1

Si vous souhaitez que votre application s'exécute sur iOS, Android, Blackberry, d'autres plates-formes mobiles, Windows, Mac OSX et Linux, utilisez Qt.

qt-project.org

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.