2009-12-11 13 views
64

Qualcuno può suggerire quali sono gli usi migliori per queste librerie oggi? È solo GUI, o hanno anche database, XML, networking, threading, ecc.Cosa dovrei scegliere: GTK + o Qt?

Stavo leggendo di loro, e ho preso in considerazione l'idea di iniziare a imparare/usare uno di loro.

Qual è il più comune? Qual è la differenza tra loro? Perché dovresti sceglierne uno rispetto all'altro?

+17

In origine, c'era un sacco di polemiche circa il modello di licenza Qt che era o pieno GPL o commerciali, mentre GTK + era LGPL (così quest'ultimo era più facile da usare in combinazione con il prodotto closed source). Ma ora Qt è disponibile anche come LGPL IIRC, quindi non è più una vera ragione per sceglierne uno o l'altro. – Roalt

+3

Si potrebbe anche guardare a questa domanda per lo più correlata: http://stackoverflow.com/questions/1801074/what-are-the-differences-between-gtk-and-qt –

+1

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 usare QT e incorporare il Chrome CEF che sta aggiungendo molte cose, complicazione e 20 MB alla tua app. – Lothar

risposta

75

Come sembra che tu prenda di mira principalmente Linux, la scelta dipende in gran parte dal linguaggio di programmazione che si desidera utilizzare.

Se il codice in C, poi, ovviamente, andare per GTK +

Se il codice in C++, andare per Qt, altrimenti sarà necessario Gtkmm (A ++ involucro su GTK + C)

Se il codice in Python , sia GTK + che Qt hanno collegamenti per la lingua: vedere PyGtk, PyQt e PySide (quello lanciato dalla stessa Nokia).

Se si esegue il codice in Java, Qt non è più un'opzione valida come Nokia discontinued Qt Jambi (i collegamenti Java per Qt).

Inoltre, Qt è più alto livello in merito alla sua scenegraph QGraphicsScene API, il suo motore di scripting costruito sopra JavaScript core (WebKit motore alimentazione), la sua macchina a stati e quadro animazioni, e il declarative UI.

GTK + non offre molto, sebbene sia possibile utilizzare Clutter insieme a esso.

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

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

Non sono sicuro che otterrete una risposta chiara per la domanda, il che spiega perché alcune persone continuano a preferire Gnome su KDE o viceversa. Scegli ciò che funziona meglio per te.

PS: Ho intenzione di indirizzare anche Symbian, quindi andare a Qt.

MODIFICA: Qualcosa che è anche bello con Qt è QtWebKit: porta WebKit nella tua applicazione Qt. Altri incorporano WebKit nella loro applicazione usando ad esempio Awesomium o Berkelium.

+0

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

+0

Per quanto riguarda la modifica, c'è WebKitGtk + per GTK +. A meno che uno non sia sostanzialmente più maturo dell'altro, non penso che l'esistenza di QtWebKit sia un vantaggio rispetto a GTK +. –

+0

Se esegui il codice ** Ruby **, cerca [QtRuby] (http://en.wikipedia.org/wiki/QtRuby). –

6

Qt per uno ha un solido DB, rete, supporto per il thread, ecc. Fa molto di più della semplice interfaccia grafica multipiattaforma (e lo fa abbastanza bene).

Lo raccomanderei su GTK +.

8

Probabilmente dipende da ciò che si vuole fare. Consiglierei Qt, perché è più di una GUI, ha dei bind in Python (così come Gtk), e le librerie GUI sono (soggettivamente parlando) più piacevoli di Gtk.

Gtk è invece più comune nel mondo linux, quindi è possibile ottenere più aiuto sul web.La ragione per la diffusione di Gtk probabilmente ha più a che fare con Gnome e Ubuntu, piuttosto che meriti tecnici, ma se vuoi che il tuo software si amalgami bene con questi due, lo raggiungerai più facilmente con Gtk.

3

Solo aggiungendo vantaggi QT ad altre risposte .. QT ha una grande documentazione, il suo IDE & GUI creator e migliora C++ con alcuni nuovi concetti come slot/segnali (fondamentalmente eventi).

Io non sono uno sviluppatore GTK, quindi non posso confrontare quelli al mondo GTK :(

+7

Per Gtk, esiste anche un creatore della GUI Glade (http://glade.gnome.org/). – davidbe

20

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

è molto, molto più della semplice interfaccia grafica, è un intero framework applicativo: pensavo ad esso come alle librerie Java per C++, fornisce tutto ciò che si menziona - database, XML, networking e threading e altro ancora. Fornisce anche cose come contenitori e iteratori e controparti di un certo numero di librerie di boost

La cosa che mi ha colpito di più quando si inizia a utilizzare Qt was t Ha una documentazione estremamente ampia. Si ottiene un programma chiamato Qt Assistant, che fornisce documentazione API completamente indicizzata e ricercabile sul desktop, oltre a numerosi esempi di codice e tutorial. Ho riscontrato che ha fatto una grande differenza per la ricerca sul Web ogni volta per le informazioni 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 in cima a GTK, ovviamente ha un utilizzo diffuso. Certo, anche KDE è molto popolare. Nokia sta spingendo pesantemente Qt nello spazio mobile - il loro sistema operativo Maemo, ad esempio sul nuovo N900, ad esempio, passerà presto a Qt come toolkit predefinito (attualmente è GTK.) Credo che anche Qt diventerà presto il toolkit predefinito per Sistema operativo Symbian.

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

Qt utilizza qmake per la configurazione di build. Ho trovato questo molto più bello di dover scrivere i tuoi makefile. Non so cosa GTK usi per la costruzione.

Un paio di cose che ho trovato un po 'scoraggiante con Qt all'inizio erano i suoi grandi usi delle macro del preprocessore. Il sistema signal/slots fornisce un buon meccanismo per il passaggio di eventi/messaggi nell'applicazione, ma sembra un po 'magico che potrebbe non essere facilmente trasferibile su un altro toolkit se lo si desidera. Anche il moc (compilatore di meta-oggetti), anche se non sono del tutto sicuro di quello che fa, si sente anche un po 'troppo simile alla magia che accade dietro le quinte.

Tutto sommato, tuttavia, consiglierei Qt, in particolare se stai imparando. Ha una documentazione davvero incredibile e un IDE carino e forum molto affollati. Sarai in grado di creare applicazioni C++ molto rapidamente con esso, in particolare con il QML in arrivo in 4.7.

32

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

Per il mio primo progetto dell'interfaccia utente multipiattaforma ho deciso di andare per wxWidgets principalmente perché al momento la licenza non era così restrittiva come QT (QT era GPL e solo per Linux) e aveva una piattaforma specifica UI (a differenza di GTK). Il progetto ha funzionato bene, ma ci sono stati alcuni problemi che lo hanno portato a compilare e funzionare 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 i binding Python e tutto ha funzionato più o meno agevolmente. Non mi piaceva il fatto che l'interfaccia utente non fosse nativa su Windows e Mac e anche quando lanci un'applicazione GTK + esegue sempre il debug di output 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 il VI o l'Emacs, QtCreator è geniale. Amo davvero 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 in C++ e un preprocessore. Fondamentalmente, dopo aver letto un tutorial lo avrai facilmente e inizierai ad amarlo. Ora sto facendo iPhone Dev e sembra un po 'come il paradigma UI di Cocoa/Interface Builder.

Riassunto: I'd go QT down. La licenza è abbastanza buona e l'SDK e la documentazione sono davvero carini.

+7

Ritengo positivo che le applicazioni GTK + abbiano lo stesso aspetto su piattaforme diverse in quanto ciò significa che non devo dedicare settimane extra a capire come far sì che le mie UI si sistemino esattamente con ogni toolkit nativo. Inoltre - 'quando lanci un'applicazione GTK + esegue sempre il debug di output di avvisi CRITICI che sembrano ignorare. : S'- no, non è così, a meno che tu non stia facendo qualcosa di sbagliato, che è ** non ** bene. Non ho mai visto un avvertimento critico che non derivasse da uno oops del mio e non era estremamente facile da risolvere usando il codice corretto. E ricevo _no_ messaggi di debug, nemmeno gli avvisi –

1

Sembra inoltre che Nokia sta per usare Qt ovunque, come su Maemo

3

Qt. Non è solo orientato agli oggetti, è "buono" orientato agli oggetti. Si basa su un "sottoinsieme" di C++ che non si basa sull'oscurità di C++ (ma è consentito attenersi a loro, se ti piace il masochismo;)).

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

E 'la spina dorsale di KDE, quindi è molto maturo, ma è progettato in modo molto flessibile, che permette di sostenere OGGI tutte le ultime "cose ​​interessanti" che un quadro più-then-just-GUI avrebbe dovuto.

Vai per questo.

+4

Sottoinsiemi? Più come il superset, considerando qmake e moc. –

1

Se si desidera eseguire l'app su iOS, Android, Blackberry, altre piattaforme mobili, Windows, Mac OSX e Linux, utilizzare Qt.

qt-project.org

Problemi correlati