Domanda

Molte persone sembrano avere un'opinione su quale sia meglio. Non sto davvero chiedendo queste opinioni, quello che mi piacerebbe sapere sono i dettagli: quali sono le cose che rendono un toolkit grafico diverso da un altro e quali di queste differenze hanno Qt e Gtk +?

È stato utile?

Soluzione

Non posso parlare direttamente con Gtk +, ma nel mio lavoro precedente ho usato Gtkmm, e nel mio lavoro attuale utilizzo Qt. Entrambi sono C ++, quindi a questo proposito sono coerenti, ma Gtkmm è / era solo un wrapper per il codice Gtk +, che è esattamente in C.

All'epoca in cui ho cambiato lavoro, ricordo che una delle principali differenze nel codice dell'interfaccia utente era il modo in cui i due toolkit gestivano i layout. Alcune parti ho pensato che Gtk avesse fatto meglio, altre ho pensato che Qt avesse fatto meglio. Entrambi ti consentono di ottenere i tuoi widget dove li desideri, eventualmente.

Il debug con Gtkmm è stato un po 'una seccatura, perché le classi generalmente non facevano altro che tenere un puntatore a una struttura e chiamare funzioni Gtk +. Quel livello extra di indiretto potrebbe essere fastidioso.

Qt ha più codice accessorio che può essere utile in varie impostazioni, almeno rispetto alla versione di Gtkmm che stavo usando. Le cose per semplificare il threading, la comunicazione tra processi e il networking sono tutte apprezzate quando è necessario aggiungere una nuova dimensione al programma. Hanno anche i loro contenitori, se si desidera utilizzare quelli, che a mio avviso hanno un'interfaccia più sana rispetto ai contenitori STL, ma alla fine fanno la stessa cosa, quindi è un leggero vantaggio.

Il meccanismo di segnale / slot tra Gtkmm e Qt è diverso. Qt si basa su un ulteriore passo nel processo di compilazione per generare meta informazioni, che utilizza per il suo segnale / slot. Un oggetto che utilizza segnali o slot deve ereditare da un QObject e l'ereditarietà QObject deve essere il primo, senza struttura a diamante. Ciò rende difficile definire un'interfaccia astratta che emette un segnale, ad esempio. Tra i lati positivi, sono intrinsecamente consapevoli dei problemi di threading e, se necessario, convertiranno la connessione segnale / slot in una connessione basata su eventi. Gtkmm usa segnali SigC, che sono semplici classi C ++, e per me sembrano essere utili in una più ampia varietà di situazioni. Inoltre, solo gli oggetti che creano una connessione devono ereditare dalla classe base magica, come ricordo. Inoltre, poiché gli slot sono oggetti, puoi usarli anche come oggetti funzione adattabili molto belli.

Sono sicuro che ci sono altre differenze, ma è quello che ricordo ora. Ricorda che la mia ultima esperienza con Gtkmm è stata di circa 3 anni fa, quindi alcuni di questi articoli potrebbero essere cambiati ormai.

Altri suggerimenti

Per capire le differenze, è meglio capire la storia.

QT è stato sviluppato come un'interfaccia utente e ha avuto alcuni problemi di licenza all'inizio quando KDE ha iniziato a essere sviluppato. KDE ha scelto QT poiché all'epoca non c'era molta scelta (Motif, Tcl / Tk per citarne alcuni)

Il GIMP stava iniziando a essere sviluppato e all'epoca i Window Toolkit non erano all'altezza di ciò di cui avevano bisogno gli sviluppatori, quindi hanno iniziato a scrivere il Gimp Tool Kit (GTK). Dopo qualche tempo è stato deciso di riscrivere GTK e renderlo Object Orientated (GTK +).

Anche in questo periodo, a causa dei potenziali problemi di licenza con QT, Gnome è stato avviato e ha deciso di utilizzare la libreria GTK +.

Ora se guardi il QT Design e il GTK Design su Wikipedia, puoi iniziare a vedere alcune delle differenze tra i sistemi.

Si noti che QT è indicato come:

  

framework di sviluppo di applicazioni multipiattaforma

mentre GTK + è indicato come:

  

Toolkit di widget multipiattaforma per la creazione di interfacce utente grafiche.

Se si devono credere a queste voci, penso che sia quello che potremmo avere le maggiori differenze tra i due, ma direi che è una linea abbastanza sottile nel mondo di oggi.

Innanzitutto, puoi usare Gtk + da C. Qt è solo C ++.

Inoltre, le applicazioni Gtk + tendono ad avere dialoghi che cambiano in modo persistente, con un pulsante di chiusura. Qt tende ad essere lungo le linee di Ok / Applica / Annulla. Non so quanto di tutto ciò sia applicato a livello di toolkit.

Per quanto riguarda la programmazione, non so quale meccanismo di callback utilizza Gtk, ma il meccanismo di slot di segnali di Qt è assolutamente incredibile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top