Was soll ich wählen: GTK + oder Qt? [geschlossen]

87

Kann jemand vorschlagen, wie diese Bibliotheken heute am besten genutzt werden können? Ist es nur eine grafische Benutzeroberfläche oder unterstützen sie auch Datenbank, XML, Netzwerk, Threading usw.?

Ich las über sie und überlegte, einen von ihnen zu lernen / zu benutzen.

Was ist das häufigste? Was ist der Unterschied zwischen ihnen? Warum sollten Sie einen über den anderen wählen?

Idan
quelle
20
Ursprünglich gab es viele Kontroversen über das Qt-Lizenzmodell, das entweder eine vollständige GPL oder ein kommerzielles Modell war, während GTK + LGPL war (letzteres war also in Kombination mit Ihrem Closed-Source-Produkt einfacher zu verwenden). Jetzt ist Qt aber auch als LGPL IIRC erhältlich. Das ist also kein wirklicher Grund mehr, sich für das eine oder andere zu entscheiden.
Roalt
3
Sie können sich auch diese meist verwandte Frage ansehen
Caleb Huitt - cjhuitt
4
Und wieder eine gute Frage zum Stackoverflow. Ich möchte hinzufügen, dass Sie, wenn Sie ein gut integriertes HTML-Widget benötigen, jetzt GTK verwenden müssen (nachdem QT 5.2 zu einem dramatisch / unbrauchbar reduzierten Funktionsumfang übergegangen ist) oder QT verwenden und die Chrome CEF einbetten müssen, die viele Dinge, Komplikationen und Probleme hinzufügt 20 MB zu Ihrer App.
Lothar

Antworten:

93

Da Sie anscheinend hauptsächlich auf Linux abzielen, hängt die Auswahl hauptsächlich von der Programmiersprache ab, die Sie verwenden möchten.

Wenn Sie in C codieren, wählen Sie natürlich GTK +

Wenn Sie in C ++ codieren, wählen Sie Qt, andernfalls benötigen Sie Gtkmm (einen C ++ - Wrapper über GTK +).

Wenn Sie in Python codieren, haben sowohl GTK + als auch Qt Bindungen für die Sprache: siehe PyGtk , PyQt und PySide (das von Nokia selbst gestartete).

Wenn Sie in Java codieren, ist Qt imho keine praktikable Option mehr, da Nokia Qt Jambi (die Java-Bindungen für Qt) eingestellt hat.

Darüber hinaus ist Qt in Bezug auf die QGraphicsScene- API für Szenegraphen , die über Javascript Core (die WebKit-Engine) basierende Skript-Engine, das Framework für Zustandsmaschinen und Animationen sowie die deklarative Benutzeroberfläche erstklassiger .

GTK + bietet nicht so viel, obwohl Sie Clutter dazu verwenden können.

Wenn Sie sich speziell mit DB-, XML- (GTK + hat einen Parser für eine Teilmenge von XML) und Threading-Funktionen (GTK + hat GLib ) befassen , bietet Qt all das in QtSql , QtXml und QtConcurrent .

Alles in allem würde ich sagen, dass Qt eine sichere Wahl ist. Aber GTK + ist auch sehr fähig.

Ich bin mir nicht sicher, ob Sie eine kristallklare Antwort auf Ihre Frage erhalten, was erklärt, warum manche Leute Gnome immer wieder KDE vorziehen oder umgekehrt. Wählen Sie, was für Sie am besten funktioniert.

PS: Ich habe vor, auch Symbian als Ziel festzulegen und dann Qt zu wählen.

BEARBEITEN: Etwas, das auch bei Qt großartig ist, ist QtWebView: Es bringt Chromium in Ihre Qt-Anwendung, um Webinhalte anzuzeigen. Andere binden Webinhalte beispielsweise mit Awesomium oder Berkelium in ihre Anwendung ein.

Gregory Pakosz
quelle
Vergessen Sie nicht, dass QtScript von JavaScriptCore unterstützt wird, der derzeit dank SquirrelFish Extreme die schnellste JavaScript-Engine ist.
CMircea
1
In Bezug auf Ihre Bearbeitung gibt es WebKitGtk + für GTK +. Sofern einer nicht wesentlich reifer als der andere ist, ist die Existenz von QtWebKit meines Erachtens kein Vorteil gegenüber GTK +.
Matthew
Wenn Sie in Ruby codieren, suchen Sie nach QtRuby .
José Andias
5
gtkmmist groß, die ganze Kraft von GTK + , aber unter Verwendung von tatsächlichen durch die moderne Definition C ++, den sauberste, lesbar GUI - Code produziert ich tatsächlich, die gerade gesehen ... habe erträglich , weil , wenn ich versuche , die GUI - Programmierung zu lernen zum ersten Mal gestartet, es war die Ordentlichkeit gtkmm, die meinen Lebenswillen wiederherstellte. Zum Glück hat sich Beharrlichkeit ausgezahlt, und ich habe herausgefunden, dass es extrem leistungsfähig ist, und es hat mich ermutigt, mehr in C ++ 14 als in C ++ 03 einzusteigen. Außerdem ist es von demselben Hauptbetreuer seit über einem Jahrzehnt AFAICT gut gewartet. Ich bin nur ein Fan, keine Zugehörigkeit usw.
underscore_d
3
Oh ... die Symbian-Tage ...
Daka
41

Ich habe schon einmal GTK +, QT und wxWidgets verwendet. Hier ist eine kurze Zusammenfassung:

Für mein erstes plattformübergreifendes UI-Projekt habe ich mich für wxWidgets entschieden, hauptsächlich weil die Lizenz zu diesem Zeitpunkt nicht so restriktiv war wie die von QT (QT war GPL und nur für Linux) und eine plattformspezifische UI hatte (im Gegensatz zu GTK). Das Projekt hat gut geklappt, aber es gab einige Probleme, die dazu führten, dass es auf anderen Plattformen kompiliert und ordnungsgemäß ausgeführt wurde - manchmal wurden einige Ereignisse anders ausgelöst und so weiter. Auch GDI in wxWidgets war ziemlich langsam.

Als nächstes habe ich GTK für ein anderes Projekt in Python verwendet. Dafür habe ich die Python-Bindungen verwendet und alles hat mehr oder weniger reibungslos geklappt. Die Tatsache, dass die Benutzeroberfläche unter Windows und Mac nicht nativ aussah, hat mir nicht ganz gefallen. Auch wenn Sie eine GTK + -App starten, werden beim Debuggen immer eine Menge KRITISCHER Warnungen ausgegeben, die in Ordnung zu ignorieren scheinen. : S.

Schließlich habe ich ein sehr einfaches QT-Projekt durchgeführt, nachdem Nokia es erworben hat und brillant war. Das beste der drei. Zunächst einmal ist QtCreator brillant, wenn Sie kein alter Schüler sind, der VI oder Emacs bevorzugt. Ich liebe VI wirklich und habe es jahrelang benutzt, aber ich bevorzuge QtCreator für C ++ QT-Projekte. In Bezug auf die Bibliothek hat mir auch die Dokumentation und die bereitgestellten APIs sehr gut gefallen. QT hat ein Konzept von Slots und Signalen, die neue C ++ - Schlüsselwörter und einen Präprozessor einführen. Grundsätzlich erhalten Sie nach dem Lesen eines Tutorials es leicht und werden es lieben. Ich mache jetzt iPhone Dev und es fühlt sich ein bisschen wie das UI-Paradigma von Cocoa / Interface Builder an.

Zusammenfassung: Ich würde mich zweifellos für QT entscheiden. Die Lizenz ist ziemlich gut und das SDK und die Dokumentation wirklich gut.

rui
quelle
12
Ich finde es positiv, dass GTK + -Anwendungen auf verschiedenen Plattformen gleich aussehen, da ich keine zusätzlichen Wochen damit verbringen muss, herauszufinden, wie sich meine Benutzeroberflächen mit jedem nativen Toolkit genau richtig anordnen. Auch - when you launch a GTK+ app it always debug outputs loads of CRITICAL warnings which seem fine to ignore. :S- nein, tut es nicht, es sei denn, Sie machen etwas falsch, was nicht in Ordnung ist. Ich habe noch nie eine kritische Warnung gesehen, die nicht von mir selbst stammt und mit dem richtigen Code nicht einfach zu beheben ist. Und ich bekomme keine Debug-Meldungen, nicht einmal Warnungen
underscore_d
25

Ich habe GTK noch nie benutzt, aber aus meiner persönlichen Erfahrung mit Qt:

Es ist viel mehr als eine einfache GUI. Es ist ein ganzes Anwendungsframework. Früher habe ich es als die Java-Bibliotheken für C ++ angesehen. Es bietet alles, was Sie erwähnen - Datenbank, XML, Netzwerk und Threading und mehr. Es bietet auch Dinge wie Container und Iteratoren sowie Gegenstücke zu einer Reihe von Boost-Bibliotheken.

Was mich am meisten beeindruckt hat, als ich anfing, Qt zu verwenden, war die äußerst umfangreiche Dokumentation. Sie erhalten ein Programm namens Qt Assistant, das eine vollständig indizierte und durchsuchbare API-Dokumentation auf Ihrem Desktop sowie zahlreiche Codebeispiele und Tutorials bietet. Ich fand, dass es einen großen Unterschied machte, jedes Mal im Internet nach API-Informationen zu suchen. Sehr schneller Zugriff, wenn Sie sich eine Methodensignatur merken müssen.

Ich bin mir nicht sicher, welches am häufigsten vorkommt. das ist wahrscheinlich schwer genau zu messen. Sie sind sicherlich beide beliebt. Da Gnome der Standard-Desktop von Ubuntu ist und Gnome auf GTK basiert, ist es offensichtlich weit verbreitet. Natürlich ist KDE auch sehr beliebt. Nokia treibt Qt im mobilen Bereich stark voran - das Maemo-Betriebssystem, das beispielsweise auf dem neuen N900 verwendet wird, wird bald auf Qt als Standard-Toolkit umsteigen (derzeit ist es GTK). Ich glaube, Qt wird bald auch das Standard-Toolkit für Symbian OS.

Ich habe Qt Creator nicht verwendet, aber ich habe viele gute Dinge darüber gehört. Es ist eine C ++ - IDE mit offensichtlich starker Integration in Qt. Es hat auch eine gefälschte Vim-Emulation, die immer schön ist, wenn Sie so etwas mögen!

Qt verwendet qmake für die Build-Konfiguration. Ich fand das viel schöner, als eigene Makefiles schreiben zu müssen. Ich weiß nicht, was GTK zum Bauen verwendet.

Ein paar Dinge, die ich anfangs mit Qt etwas abschreckend fand, waren die großen Verwendungen von Präprozessor-Makros. Das Signal- / Slots-System bietet einen nützlichen Mechanismus für die Weitergabe von Ereignissen / Nachrichten in Ihrer Anwendung, fühlt sich jedoch ein bisschen wie Magie an, die möglicherweise nicht einfach auf ein anderes Toolkit übertragen werden kann, wenn Sie dies jemals möchten. Auch der moc (Meta-Objekt-Compiler) fühlt sich, obwohl ich nicht ganz sicher bin, was er tut, ein bisschen zu sehr nach Magie an, die sich hinter den Kulissen abspielt.

Alles in allem würde ich Qt empfehlen, besonders wenn Sie lernen. Es hat wirklich erstaunliche Dokumentation und eine schöne IDE und vielbeschäftigte Foren. Sie können damit sehr schnell C ++ - Apps erstellen, insbesondere mit der QML in 4.7.

ngm
quelle
9

Es hängt wahrscheinlich davon ab, was Sie tun möchten. Ich würde Qt empfehlen, da es mehr als nur eine GUI ist, schöne Python-Bindungen hat (Gtk auch) und die GUI-Bibliotheken selbst (subjektiv) angenehmer sind als Gtk.

Gtk ist dagegen in der Linux-Welt häufiger anzutreffen, sodass Sie wahrscheinlich mehr Hilfe im Web erhalten können. Der Grund für die Verbreitung von Gtk hat wahrscheinlich mehr mit Gnome und Ubuntu zu tun als mit technischen Vorzügen. Wenn Sie jedoch möchten, dass Ihre Software gut zu diesen beiden passt, können Sie dies mit Gtk leichter erreichen.

Slartibartfast
quelle
7

Qt hat mit Sicherheit eine solide DB-, Netzwerk-, Threading-Unterstützung usw. Es bietet viel mehr als nur eine plattformübergreifende Benutzeroberfläche (und das meiste davon ist recht gut).

Ich würde es über GTK + empfehlen.

ChristopheD
quelle
3

Hinzufügen von QT-Vorteilen zu anderen Antworten. QT verfügt über eine hervorragende Dokumentation, einen eigenen IDE- und GUI-Ersteller und erweitert C ++ um einige neue Konzepte wie Slots / Signale (im Grunde Ereignisse).

Ich bin kein GTK-Entwickler, daher kann ich diese nicht mit der GTK-Welt vergleichen :(

Gregor Petrin
quelle
11
Für Gtk gibt es auch einen GUI-Ersteller Glade ( glade.gnome.org ).
Davidbe
3

Qt. Es ist nicht nur objektorientiert, es ist "gut" objektorientiert. Es basiert auf einer "Teilmenge" von C ++, die nicht auf der Dunkelheit von C ++ beruht (aber Sie dürfen sich daran halten, wenn Sie Masochismus mögen;)).

Es hat eine starke Dynamik, seit Nokia es gekauft hat (tatsächlich hat Nokia es vor ungefähr 2/3 Jahren getan). Es wird in allen mobilen Geräten von Nokia UND Intel (Smartphones, Netbooks, Tablets) enthalten sein.

Es ist das Rückgrat von KDE, also sehr ausgereift, aber es ist sehr flexibel gestaltet, so dass HEUTE die neuesten "coolen Sachen" unterstützt werden können, die ein mehr als nur GUI- Framework haben sollte.

Tue es.

Detro
quelle
5
Teilmenge? Eher wie eine Obermenge, wenn man qmake und moc berücksichtigt.
rr-
1

Es sieht auch so aus, als würde Nokia Qt überall einsetzen, wie bei Maemo

jlru
quelle
1

Wenn Sie möchten, dass Ihre App unter iOS, Android, Blackberry, anderen mobilen Plattformen, Windows, Mac OSX und Linux ausgeführt wird, verwenden Sie Qt.

qt-project.org

trusktr
quelle