Cosa dovrei scegliere: GTK + o Qt? [chiuso]


89

Qualcuno può suggerire quali sono gli usi migliori per quelle biblioteche oggi? È solo GUI o hanno anche supporto per database, XML, networking, threading, ecc.?

Stavo leggendo di loro e ho pensato di iniziare a impararne / usarne uno.

Qual è il più comune? Qual è la differenza tra loro? Perché sceglieresti uno piuttosto che l'altro?


20
In origine, c'erano molte polemiche sul modello di licenza Qt che era completamente GPL o commerciale, mentre GTK + era LGPL (quindi quest'ultimo era più facile da usare in combinazione con il tuo prodotto closed source). Ma ora Qt è disponibile anche come LGPL IIRC, quindi non è più un vero motivo per sceglierne uno o l'altro.
Roalt

3
Si potrebbe anche guardare a questa domanda per lo più legati: stackoverflow.com/questions/1801074/...
Caleb Huitt - cjhuitt

4
E ancora una buona domanda chiusa su stackoverflow. Voglio aggiungere che se hai bisogno di un buon widget HTML integrato devi usare GTK ora (dopo che QT 5.2 è passato a un set di funzionalità ridotto drasticamente / inutilizzabile) o utilizzare QT e incorporare Chrome CEF che aggiunge molte cose, complicazioni e 20 MB alla tua app.
Lothar,

Risposte:


95

Dato che sembri indirizzare principalmente Linux, la scelta dipende principalmente dal linguaggio di programmazione che desideri utilizzare.

Se codifichi in C, ovviamente scegli GTK +

Se codifichi in C ++, scegli Qt, altrimenti avrai bisogno di Gtkmm (un wrapper C ++ su GTK +)

Se scrivi in Python, sia GTK + che Qt hanno collegamenti per il linguaggio: vedi PyGtk , PyQt e PySide (quello lanciato dalla stessa Nokia).

Se si codifica in Java, Qt non è più un'opzione praticabile imho poiché Nokia ha interrotto Qt Jambi (i collegamenti Java per Qt).

Inoltre, Qt è di prim'ordine per quanto riguarda la sua API QGraphicsScene di scenegraph , il suo motore di scripting basato su Javascript Core (il motore che alimenta WebKit), la sua macchina a stati e il framework delle animazioni e l' interfaccia utente dichiarativa .

GTK + non offre molto anche se puoi utilizzare Clutter insieme ad esso.

Se stai esaminando specificamente le funzionalità DB, XML (GTK + ha un parser per un sottoinsieme di XML) e thread (GTK + ha GLib ), Qt offrirà tutto ciò in QtSql , QtXml e QtConcurrent .

Tutto sommato, direi che Qt è una scelta sicura. Ma GTK + è anche molto capace.

Non sono sicuro che otterrai una risposta chiarissima alla tua domanda, il che spiega perché alcune persone continuano a preferire Gnome a KDE o viceversa. Scegli quello che funziona meglio per te.

PS: prevedi di scegliere come target anche Symbian, quindi scegli Qt.

EDIT: Qualcosa che è anche eccezionale con Qt è QtWebView: porta Chromium nella tua applicazione Qt per visualizzare i contenuti web. Altri stanno incorporando contenuti web nella loro applicazione utilizzando ad esempio Awesomium o Berkelium.


Non dimenticare che QtScript è alimentato da JavaScriptCore, che è attualmente il motore JavaScript più veloce grazie a SquirrelFish Extreme.
CMircea

1
Per quanto riguarda la tua modifica, c'è WebKitGtk + per GTK +. A meno che uno non sia sostanzialmente più maturo dell'altro, non credo che l'esistenza di QtWebKit si qualifichi come un vantaggio rispetto a GTK +.
Matteo

Se codifichi in Ruby, cerca QtRuby .
José Andias

5
gtkmmè fantastico, tutta la potenza di GTK + ma usando l' attuale C ++ secondo la definizione moderna, producendo il codice GUI più pulito e leggibile che abbia mai visto ... in realtà, solo il più sopportabile , perché quando ho iniziato a provare a imparare la programmazione GUI, era la pulizia di gtkmmciò che ripristinava la mia voglia di vivere. Per fortuna, la perseveranza ha dato i suoi frutti e ho scoperto che è estremamente potente e mi ha incoraggiato a ottenere di più in C ++ 14 rispetto a C ++ 03. Inoltre, è ben mantenuto, dallo stesso manutentore principale per oltre un decennio AFAICT. Sono solo un fan, nessuna affiliazione, ecc.
underscore_d

3
Oh ... i giorni Symbian ...
daka

42

Ho già usato GTK +, QT e wxWidgets. Ecco un breve riassunto:

Per il mio primo progetto di interfaccia utente multipiattaforma ho deciso di optare per wxWidgets principalmente perché all'epoca la licenza non era restrittiva come quella di QT (QT era GPL e solo per Linux) e aveva un'interfaccia utente specifica per piattaforma (a differenza di GTK). Il progetto ha funzionato bene, ma ci sono stati alcuni problemi nel farlo compilare ed eseguire correttamente su altre piattaforme - a volte alcuni eventi sono stati attivati ​​in modo diverso e così via. Anche GDI in wxWidgets era piuttosto lento.

Successivamente ho usato GTK per un progetto diverso in Python. Per questo ho usato le associazioni Python e tutto è andato più o meno senza intoppi. Non mi è piaciuto molto il fatto che l'interfaccia utente non sembrasse nativa su Windows e Mac e anche quando avvii un'app GTK + il debug emette sempre un sacco di avvisi CRITICI che sembrano ignorare. :S

Infine, ho realizzato un progetto QT molto semplice ora che Nokia lo ha acquisito ed è stato brillante. Il migliore dei tre. Prima di tutto, se non sei un vecchio scolaro che preferisce VI o Emacs, QtCreator è geniale. Adoro VI e l'ho usato per anni, ma preferisco di gran lunga QtCreator per i progetti C ++ QT. Per quanto riguarda la libreria mi è piaciuta molto anche la documentazione e le API fornite. QT ha un concetto di slot e segnali che introducono nuove parole chiave C ++ e un preprocessore. Fondamentalmente, dopo aver letto un tutorial, lo otterrai facilmente e inizierai ad amarlo. Ora sto sviluppando iPhone e mi sembra un po 'il paradigma dell'interfaccia utente di Cocoa / Interface Builder.

Riepilogo: preferirei QT a mani basse. La licenza è abbastanza buona e l'SDK e la documentazione sono davvero carini.


13
Considero positivo che le applicazioni GTK + abbiano lo stesso aspetto su piattaforme diverse in quanto significa che non devo spendere settimane extra per capire come far sì che le mie interfacce utente si organizzino esattamente con ogni toolkit nativo. Inoltre - when you launch a GTK+ app it always debug outputs loads of CRITICAL warnings which seem fine to ignore. :S- no, non è così, a meno che tu non stia facendo qualcosa di sbagliato, il che non va bene. Non ho mai visto un avviso critico che non derivasse da un mio oops e non fosse estremamente facile da risolvere utilizzando il codice corretto. E ho nessun messaggi di debug, nemmeno gli avvertimenti
underscore_d

25

Non ho mai usato GTK, ma dalla mia esperienza personale con Qt:

È molto più di una semplice GUI. È un intero framework applicativo. La pensavo come le librerie Java per C ++. Fornisce tutto ciò di cui parli: database, XML, networking e threading e altro ancora. Fornisce anche cose come contenitori e iteratori e controparti per una serie di librerie boost.

La cosa che mi ha colpito di più quando ho iniziato a usare Qt è stata la documentazione estremamente ampia. Ottieni un programma chiamato Qt Assistant, che fornisce documentazione API completamente indicizzata e ricercabile sul desktop, oltre a numerosi esempi di codice ed esercitazioni. Ho scoperto che faceva una grande differenza nella ricerca sul Web ogni volta per le informazioni sulle API. Accesso molto rapido quando è necessario ricordare una firma del metodo.

Non sono sicuro di quale sia il più comune; probabilmente è difficile da misurare con precisione. Sono certamente entrambi popolari. Poiché Gnome è il desktop predefinito di Ubuntu e Gnome si trova sopra GTK, ovviamente ha un utilizzo diffuso. Ovviamente anche KDE è molto popolare. Nokia sta spingendo pesantemente Qt nello spazio mobile: il loro sistema operativo Maemo, utilizzato ad esempio sul nuovo N900, presto passerà a Qt come toolkit predefinito (attualmente è GTK.) Credo che Qt diventerà presto anche il toolkit predefinito per Symbian OS.

Non ho usato Qt Creator, ma ho sentito molte cose positive al riguardo. È un IDE C ++ con evidente integrazione pesante con Qt. Ha anche una falsa emulazione vim che è sempre bella se ti piace quel genere di cose!

Qt usa qmake per la configurazione della build. L'ho trovato molto più bello che dover scrivere i tuoi makefile. Non so cosa usi GTK per la creazione.

Un paio di cose che ho trovato un po 'scoraggiante con Qt all'inizio sono stati i suoi grandi usi delle macro del preprocessore. Il sistema di segnali / slot fornisce un bel meccanismo per il passaggio di eventi / messaggi nella tua applicazione, ma sembra un po 'come una magia che potrebbe non essere facilmente trasportabile su un altro toolkit se lo desideri. Inoltre, il moc (compilatore meta-oggetto), anche se non sono del tutto sicuro di quello che fa, sembra anche un po 'troppo come la magia che si svolge dietro le quinte.

Tutto sommato, però, consiglierei Qt, in particolare se stai imparando. Ha una documentazione davvero straordinaria, un bel IDE e forum occupati. Sarai in grado di creare app C ++ molto rapidamente con esso, in particolare con QML in arrivo 4.7.


9

Probabilmente dipende da cosa vuoi fare. Consiglierei Qt, perché è più di una GUI, ha dei bei collegamenti Python (così come Gtk) e le stesse librerie GUI sono (soggettivamente parlando) più piacevoli di Gtk.

Gtk è d'altra parte più comune nel mondo Linux, quindi probabilmente puoi ottenere più aiuto sul web. La ragione per la diffusione di Gtk probabilmente ha più a che fare con Gnome e Ubuntu, piuttosto che con meriti tecnici, ma se vuoi che il tuo software si fonda bene con questi due, lo otterrai più facilmente con Gtk.


7

Qt per uno ha sicuramente un solido DB, rete, supporto per i thread, ecc ... Fa molto di più della semplice GUI multipiattaforma (e la maggior parte lo fa abbastanza bene).

Lo consiglierei su GTK +.


3

Basta aggiungere i vantaggi di QT ad altre risposte .. QT ha un'ottima documentazione, il suo creatore IDE e GUI e migliora il C ++ con alcuni nuovi concetti come slot / segnali (fondamentalmente eventi).

Non sono uno sviluppatore GTK, quindi non posso confrontarli con il mondo GTK :(


11
Per Gtk, esiste anche un creatore di GUI Glade ( glade.gnome.org ).
davidbe

3

Qt. Non è solo orientato agli oggetti, è "buono" orientato agli oggetti. È basato su un "sottoinsieme" di C ++ che non si basa sull'oscurità di C ++ (ma ti è permesso di restare con loro, se ti piace il masochismo;)).

Ha un forte slancio ora che Nokia lo ha acquistato (in realtà Nokia l'ha fatto ~ 2/3 anni fa). Sarà in tutti i dispositivi mobili Nokia E Intel (smartphone, netbook, tablet).

È la spina dorsale di KDE, quindi è molto maturo, ma è progettato in un modo molto flessibile, che rende possibile supportare OGGI tutte le "cose ​​interessanti" più recenti che un framework GUI più che semplice dovrebbe avere.

Fallo.


5
Sottoinsieme? Più come un superset, considerando qmake e moc.
rr-

1

Sembra anche che Nokia stia per usare Qt ovunque, come su Maemo


1

Se desideri che la tua app venga eseguita su iOS, Android, Blackberry, altre piattaforme mobili, Windows, Mac OSX e Linux, usa Qt.

qt-project.org

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.