Domanda

Sono un programmatore C # che ha iniziato a usare Ubuntu circa 2 anni fa. Voglio imparare la programmazione della GUI in C o C ++. Non mi piace il mono, tende a bloccarsi sul mio sistema. Ho una conoscenza di base del C ++. Non ho mai lavorato in C, ma sembra bello. Quale toolkit dovrei imparare / usare? Dare Pro / Contro di ciascuno. Grazie!

È stato utile?

Soluzione

Dato che C ++ ti è più familiare, potresti trovare GTKmm più adatto, dal momento che puoi usare modi di dire come RAII. Sfortunatamente, GTKmm è un po 'incompleto e manca alcune delle parti meno utilizzate di GTK.

GTK + da solo, tuttavia, espone essenzialmente un modello a oggetti simile a quello che trovi in ??C ++, ma con solo funzioni C. Cose come la costruzione e la distruzione in C ++ vengono eseguite esplicitamente nell'API C e le istanze dei widget vengono gestite esclusivamente tramite puntatori.

Prova entrambi e scopri quale si adatta meglio al tuo progetto.

Altri suggerimenti

Potrei essere accusato di parzialità poiché contribuisco a contribuire a gtkmm, ma prima ero un utente, quindi ... In ogni caso, consiglio vivamente gtkmm se si ha dimestichezza con C ++. La gestione della memoria è molto più semplice con gtkmm che con GTK + perché gli oggetti contati di riferimento sono gestiti automaticamente con puntatori intelligenti. È inoltre possibile creare un'istanza di oggetti come variabili automatiche (ad esempio nello stack) e determinare la loro durata in base al loro ambito. Quindi, in pratica, è molto più facile evitare perdite di memoria con gtkmm che con GTK +.

Un altro enorme vantaggio di gtkmm rispetto a GTK + (secondo me) è l'uso di un framework di segnali sicuri. In GTK +, devi costantemente passare le cose come puntatori vuoti e poi lanciarle intorno al tipo che ritieni debbano essere. In gtkmm, non è necessario eseguire questa operazione e è possibile sfruttare il compilatore che applica la sicurezza del tipo sui gestori dei segnali.

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

greyfade ha affermato che gtkmm è incompleto, e in una certa misura ha ragione: gtkmm non copre assolutamente tutto nell'API GTK + (anche se si avvicina terribilmente). Ma in pratica questo non è un problema perché puoi sempre usare l'API C / GTK + direttamente dal tuo codice gtkmm. Questa compatibilità C è un enorme vantaggio di C ++ rispetto a qualcosa come C # o bind python in cui non avresti alternative se il bind non coprisse parte dell'API.

Le uniche vere ragioni per scegliere GTK + su gtkmm (IMO) sono che gtkmm ha un piccolo overhead aggiuntivo poiché è un wrapper in cima alla libreria C (ma questa è generalmente solo una singola chiamata di funzione, che avrà impatto trascurabile) o se odi o non puoi usare C ++.

Se sei un programmatore C #, perché non dai un'occhiata a Vala ?

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

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

Come molti hanno già detto, Gtkmm offre una buona gestione della memoria, oggetti contati di riferimento, ecc. Tuttavia, cade in un reparto. Documentazione. L'intero progetto Gtkmm soffre della "non documentazione" fenomeni, in cui la documentazione pubblicata (e ripubblicata su siti di terzi) è semplicemente una scansione javadoc dei file di intestazione.

Volevo solo che tu sapessi in cosa ti saresti trovato. Ad esempio, le La finestra a scorrimento è una delle migliori del documento .

Hai guardato QT?
È un bel design C ++, multipiattaforma e LGPL

Penso che il modo migliore per andare sarebbe innanzitutto imparare gtkmm! Dopo aver finito con le basi di gtkmm, GTK + dovrebbe essere abbastanza semplice da imparare (a patto di conoscere C e di usare i puntatori).

Se non conosci C, puoi impararlo rapidamente leggendo The C Programming Language di Dennis Ritchie

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

Dopo gtkmm, puoi passare a GTK +

La maggior parte delle aziende open source usa GTK + anziché gtkmm, quindi GTK + vale la pena imparare!

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