2009-03-15 11 views
8

Sono un programmatore C# che ha iniziato a usare Ubuntu circa 2 anni fa. Sto volendo imparare la programmazione GUI in C o C++. Non mi piace molto il mono, tende a schiantarsi sul mio sistema. Ho una conoscenza di base di C++. Non ho mai lavorato in C, ma sembra fantastico. Quale toolkit dovrei imparare/usare? Dai Pro/Cont di ciascuno. Grazie!Devo imparare GTK + o GTKMM?

+0

OMG, per favore prova Qt ... –

risposta

12

Poiché il C++ ti è più familiare, potresti trovare GTKmm più adatto, dato che puoi usare espressioni come RAII. Sfortunatamente, GTKmm è un po 'incompleto e mancano alcune delle parti meno utilizzate di GTK.

GTK + da solo, tuttavia, espone essenzialmente un modello di oggetto simile a quello che si trova in C++, ma con solo funzioni C. Cose come la costruzione e la distruzione in C++ vengono fatte esplicitamente nell'API C e le istanze dei widget sono gestite esclusivamente tramite puntatori.

Provare entrambi e vedere quale si adatta meglio al vostro progetto.

2

Hai guardato QT?
E 'bello C disegno ++, cross-platform e LGPL

+0

Sì, mi piace un po 'ma non lo faccio (se questo ha un senso). – Kredns

+7

Sì, lo so cosa intendi. Voglio dire non proprio –

+0

@Iraimbilanja: Bello! – Kredns

29

potrei essere accusato di parzialità dal momento che aiutano contribuire alla gtkmm, ma ero un utente in primo luogo, quindi ... In ogni caso, vi consiglio vivamente gtkmm se sei a tuo agio con il C++. La gestione della memoria è molto più semplice con gtkmm che con GTK + perché gli oggetti conteggiati di riferimento sono gestiti automaticamente con puntatori intelligenti. È anche possibile creare un'istanza di oggetti come variabili automatiche (ad esempio nello stack) e determinare la durata della vita in base al loro ambito. Quindi, in pratica, è molto più facile evitare perdite di memoria con gtkmm che con GTK +.

Altro enorme vantaggio di gtkmm su GTK + (a mio parere) è l'utilizzo di un quadro di segnali di tipo sicuro. In GTK +, devi costantemente passare le cose come puntatori void e poi lanciarli intorno al tipo che pensi che dovrebbero essere. In gtkmm, non hai bisogno di farlo, e puoi approfittare del compilatore che impone la sicurezza del tipo sui tuoi gestori di segnale.

Un altro grande vantaggio rispetto a C/GTK + è la facilità di derivare nuove classi. In GTK +, è necessario scrivere molto codice boilerplate e sostanzialmente ri-implementare le cose che si ottengono gratuitamente in C++ come parte del linguaggio (ad esempio ereditarietà, costruttori, distruttori, ecc.). Questo è più noioso e soggetto a errori.

greyfade ha detto che gtkmm è incompleto, e ha ragione in una certa misura - gtkmm non copre assolutamente tutto nell'API GTK + (anche se diventa terribilmente vicino). Ma in pratica questo non è un problema perché puoi sempre usare l'API C/GTK + direttamente dal tuo codice gtkmm. Questa compatibilità con C è un enorme vantaggio di C++ su qualcosa come C# o collegamenti Python in cui non avresti alternative se l'associazione non coprisse parte dell'API.

Gli unici veri motivi per scegliere GTK + su gtkmm (IMO) sono che gtkmm ha un piccolo sovraccarico in quanto è un wrapper in cima alla libreria C (ma questa è generalmente solo una chiamata a una funzione, che sta per hanno un impatto trascurabile), o se odiate o non potete usare C++.

+0

+1 per quello !!!! –

16

Se sei un programmatore C#, perché non dai uno sguardo allo Vala?

Io uso pygtk per la maggior parte delle mie applicazioni GUI Linux, ma Python era semplicemente troppo lento per il progetto su cui sto lavorando in questo momento, quindi stavo cercando di scegliere uno tra GTK + e GTKmm. Poi ho incontrato Vala.

È un linguaggio piuttosto nuovo, e quindi la documentazione è piuttosto limitata al momento, ma penso che abbia il meglio di entrambi i mondi: sintassi C# con velocità C.

2

Penso che il modo migliore per andare sarebbe prima imparare gtkmm! Dopo aver terminato le basi di gtkmm, GTK + dovrebbe essere abbastanza semplice da imparare (a patto che tu conosca C e sia a tuo agio con i puntatori).

Nel caso in cui non si conosce C, si può imparare in fretta, leggendo The C Programming Language da Dennis Ritchie

vi consiglio di imparare gtkmm prima perché è appositamente progettato per C++, che è in qualche modo simile a C# poiché entrambi sono orientati agli oggetti, quindi gtkmm sarà relativamente facile da apprendere prima di GTK +.

Dopo gtkmm, si può passare a GTK +

maggior parte delle aziende open source usare GTK + piuttosto che gtkmm, così GTK + è worthwile da imparare!

+0

Quando ho fatto il grande passo per insegnare a me stesso la programmazione GUI, 'gtkmm' è stata la prima libreria della GUI che ho guardato dove non mi sono immediatamente rincantucciato in un orrore sconcertato (incluso GTK +). Il fatto che stavo insegnando a me stesso C++ 11 al momento, e 'gtkmm' fa uno sforzo concertato per usare una versione in lingua moderna (ancora una volta, a differenza di GTK +) ha aggiunto molto all'appello. E sì, come hai detto tu, una volta avevo usato 'gtkmm' per capire come funzionano i modelli GUI - e per la necessità di riportare alcuni piccoli bug in GTK + ;-) - quest'ultimo ha reso infinitamente più senso quando guardato di nuovo. Ora, lo apprezzo quasi! ;-) –

3

Come molti hanno già detto, Gtkmm fornisce una buona gestione della memoria, oggetti conteggio di riferimento, ecc. Documentazione. L'intero progetto Gtkmm soffre del fenomeno "non documentato", in cui la documentazione pubblicata (e ripubblicata su siti di terze parti) è semplicemente una scansione javadoc dei file di intestazione.

Volevo solo che tu sapessi in cosa ti piacerebbe entrare. Ad esempio, lo Scrolled Window è una delle classi meglio documentate in Gtkmm.

+0

Per la precisione, i documenti per le librerie 'mm' (' gtkmm', 'glibmm') sono scritti nelle intestazioni, ma ciò che viene scritto lì viene tipicamente generato convertendo i documenti dalle funzioni C in GTK +/GLib/etc. File '.c' nel punto di avvolgimento (costruzione). Tuttavia, questo può essere sovrascritto e documenti personalizzati scritti, ad esempio quando i documenti C contengono molti C-ismi che non si convertono bene. Ovviamente, se vedi qualcosa che manca o è mal convertito, allora patch su intestazioni 'mm' o la routine che converte dalla documentazione C sarebbe benvenuta su Bugzilla o sulla mailing list –