RISOLTO [C] Interfacce grafiche

demda

Utente Attivo
352
49
Ciao a tutti,
Da un po' di giorni mi frulla in testa l'idea di creare programmi con interfacce grafiche in C, ( non mi importa quanto sia complicato, con un po' di allenamento e studio c'è la si fa ).
L'unica cosa che ho capito bazzicando un po' in rete è che sono necessarie delle librerie, come la gtk.
Ma a quanto ho capito c'è ne sono anche altre.
Quale di queste dovrei scegliere ?
E quali sono i pro e i contro ?

Grazie

P.s.
Uso Debian con gedit e gcc






Inviato da Mi A2 Lite tramite App ufficiale di Tom\'s Hardware Italia Forum
 

Fenix27

Utente Attivo
863
220
Ci sono altre librerie per il game development come SDL e SFML.
Comunque la libreria GTK è la più utilizzata, sopratutto in ambito GNU/Linux (come per alcuni DE). Se proprio vuoi rimanere su C penso che GTK sia la scelta migliore.
 
  • Mi piace
Reazioni: demda

demda

Utente Attivo
352
49
Ci sono altre librerie per il game development come SDL e SFML.
Comunque la libreria GTK è la più utilizzata, sopratutto in ambito GNU/Linux (come per alcuni DE). Se proprio vuoi rimanere su C penso che GTK sia la scelta migliore.
Grazie per la risposta.
Mi sorge un'altra domanda a questo punto. Se io dovessi scrivere un programma C che utilizza la libreria gtk avrebbe problemi ad essere eseguito su Windows ?

Inviato da Mi A2 Lite tramite App ufficiale di Tom\'s Hardware Italia Forum
 

pabloski

Utente Èlite
2,868
916
Mi sorge un'altra domanda a questo punto. Se io dovessi scrivere un programma C che utilizza la libreria gtk avrebbe problemi ad essere eseguito su Windows ?

Ed è qui che si comincia a scendere nei dettagli delle varie librerie. Ovvero, la separazione è tra librerie cross-platform e librerie platform-specific. Per esempio, Windows ha le sue librerie ufficiali per sviluppare interfacce grafiche, ma fungono solo su Windows. WPF ad esempio. WinRT è quella più moderna. GDI è quella vecchia. Forms ha preceduto WPF in ambito .NET.

Normalmente, chi scrive interfacce grafiche per Windows non si pone nemmeno il problema della libreria. Usa quelle ufficiali, che danno l'impressione di essere parte del sistema operativo. In ambito Unix/Linux non è mai stato così. C'è sempre stata una netta separazione tra il sistema operativo e l'interfaccia grafica.

Per necessità sono state create librerie che supportano più sistemi operativi diversi. E addirittura si va oltre con strumenti come Electron, che sono dei browser con motori javascript ( Chromium + Node.js in pratica ) e consentono di realizzare interfacce grafiche in HTML/CSS e la programmazione in javascript.

E alcuni linguaggi offrono proprie librerie grafiche. Insomma l'elenco è lungo. Trovi un elenco parziale qui https://en.wikipedia.org/wiki/List_of_platform-independent_GUI_libraries

E c'è anche un problemuccio. Tutte quelle librerie che vedi nell'elenco, nella sezione C/C++, sono praticamente tutte C++. A parte IUP e GTK+, non ci sono altre librerie che ti consentono di usare il C. Il minimo sindacale è il C++ per la stragrande maggioranza di loro.

Quindi se usi C, GTK+ o IUP. Non hai molte altre possibilità. Se non è un problema usare C++, vai di QT. WxWidgets è un'alternativa, ma QT è molto più completa. Non offre solo la parte grafica, ma tanto altro. E ha un supporto cross-platform spettacolare.

Venendo invece a GTK+, si esiste per Windows, ma personalmente ho trovato parecchi problemi a cross-compilarla. E' usabile per scrivere GUI per Windows, ma non è banale.
 

BrutPitt

Utente Attivo
1,166
1,262
Ci sono altre librerie per il game development come SDL e SFML.
Anzitutto partirei col dire che GTK e SDL/GLFW o SFML sono librerie sostanzialmente differenti.
GTK e' sia Fremwork che GUI (ed anche molto, molto altro), mentre SDL, SMFL e GLFW sono librerie che si occupano di gestire finestre e contexts grafici (frameworks) e gli inputs di mouse e tastiera (anche Joystic per SDL, mentre SFML gestisce anche audio e network), ma non GUI.
Per utilizzare una GUI (interfaccia utente) e' necessario abbinare una libreria come Nuklear o cImGui (che e' il port, in ANSI C, di ImGui).

GTK e' un'ottima all-purpose library "portabile" (Win/MacOS/Linux), direi la migliore all-purpose (se non l'unica, ormai) in PURO C, ma di contro c'e' che nei sistemi in cui non e' integrata nell'interfaccia grafica (Gnome, Mate, etc) si porta dietro un discreto fardello di files accessori (da redistribuire).
Mi sorge un'altra domanda a questo punto. Se io dovessi scrivere un programma C che utilizza la libreria gtk avrebbe problemi ad essere eseguito su Windows ?
Infatti su Windows dovrai installare (o "costruire," compilando, una tantum) le librerie gtk, gdk, etc... per poter compilare il tuo programma.

Ed una volta creato il tuo eseguibile, per poterlo eseguire su altre piattaforme windows, dovrai provvedere a ridistribuire (istallare) i files accessori.
(esiste anche la possibilita', che non e' quella di default, di creare degli eseguibili "statici" con tutto al loro interno... ma si eccede con i megabyte, anche per semplici ed elementari applicazioni... e non e' certo un'opzione per "neofiti")

Per la scelta, potresti focalizzare il tuo obbiettivo, considerando, apriori, cio' di cui hai bisogno: se va bene l'abbinamento Framework+GUI libraries, o se ti serve una libreria che si integri con l'intero sistema, e che possa fare un po' di tutto, come la GTK.

Aggiungo:
(come "in contemporanea" aveva scritto @pabloski) Ovviamente se opti per il C++, la scelta si amplia.
 
Ultima modifica:
  • Mi piace
Reazioni: BAT e fabio93

pabloski

Utente Èlite
2,868
916
Infatti su Windows dovrai installare (o "costruire," compilando, una tantum) le librerie gtk, gdk, etc... per poter compilare il tuo programma.

Azz, MS offre vcpkg. Da quando? Un pò di anni fa, quando tentai di cross-compilare GTK per Windows, fu un bagno di sangue. Ma all'epoca non c'era appunto vcpkg. Se funge senza intoppi, è una manna per gli sviluppatori.
 

demda

Utente Attivo
352
49
Ed è qui che si comincia a scendere nei dettagli delle varie librerie. Ovvero, la separazione è tra librerie cross-platform e librerie platform-specific. Per esempio, Windows ha le sue librerie ufficiali per sviluppare interfacce grafiche, ma fungono solo su Windows. WPF ad esempio. WinRT è quella più moderna. GDI è quella vecchia. Forms ha preceduto WPF in ambito .NET.

Normalmente, chi scrive interfacce grafiche per Windows non si pone nemmeno il problema della libreria. Usa quelle ufficiali, che danno l'impressione di essere parte del sistema operativo. In ambito Unix/Linux non è mai stato così. C'è sempre stata una netta separazione tra il sistema operativo e l'interfaccia grafica.

Per necessità sono state create librerie che supportano più sistemi operativi diversi. E addirittura si va oltre con strumenti come Electron, che sono dei browser con motori javascript ( Chromium + Node.js in pratica ) e consentono di realizzare interfacce grafiche in HTML/CSS e la programmazione in javascript.

E alcuni linguaggi offrono proprie librerie grafiche. Insomma l'elenco è lungo. Trovi un elenco parziale qui https://en.wikipedia.org/wiki/List_of_platform-independent_GUI_libraries

E c'è anche un problemuccio. Tutte quelle librerie che vedi nell'elenco, nella sezione C/C++, sono praticamente tutte C++. A parte IUP e GTK+, non ci sono altre librerie che ti consentono di usare il C. Il minimo sindacale è il C++ per la stragrande maggioranza di loro.

Quindi se usi C, GTK+ o IUP. Non hai molte altre possibilità. Se non è un problema usare C++, vai di QT. WxWidgets è un'alternativa, ma QT è molto più completa. Non offre solo la parte grafica, ma tanto altro. E ha un supporto cross-platform spettacolare.

Venendo invece a GTK+, si esiste per Windows, ma personalmente ho trovato parecchi problemi a cross-compilarla. E' usabile per scrivere GUI per Windows, ma non è banale.
Anzitutto partirei col dire che GTK e SDL/GLFW o SFML sono librerie sostanzialmente differenti.
GTK e' sia Fremwork che GUI (ed anche molto, molto altro), mentre SDL, SMFL e GLFW sono librerie che si occupano di gestire finestre e contexts grafici (frameworks) e gli inputs di mouse e tastiera (anche Joystic per SDL, mentre SFML gestisce anche audio e network), ma non GUI.
Per utilizzare una GUI (interfaccia utente) e' necessario abbinare una libreria come Nuklear o cImGui (che e' il port, in ANSI C, di ImGui).

GTK e' un'ottima all-purpose library "portabile" (Win/MacOS/Linux), direi la migliore all-purpose (se non l'unica, ormai) in PURO C, ma di contro c'e' che nei sistemi in cui non e' integrata nell'interfaccia grafica (Gnome, Mate, etc) si porta dietro un discreto fardello di files accessori (da redistribuire).

Infatti su Windows dovrai installare (o "costruire," compilando, una tantum) le librerie gtk, gdk, etc... per poter compilare il tuo programma.

Ed una volta creato il tuo eseguibile, per poterlo eseguire su altre piattaforme windows, dovrai provvedere a ridistribuire (istallare) i files accessori.
(esiste anche la possibilita', che non e' quella di default, di creare degli eseguibili "statici" con tutto al loro interno... ma si eccede con i megabyte, anche per semplici ed elementari applicazioni... e non e' certo un'opzione per "neofiti")

Per la scelta, potresti focalizzare il tuo obbiettivo, considerando, apriori, cio' di cui hai bisogno: se va bene l'abbinamento Framework+GUI libraries, o se ti serve una libreria che si integri con l'intero sistema, e che possa fare un po' di tutto, come la GTK.

Aggiungo:
(come "in contemporanea" aveva scritto @pabloski) Ovviamente se opti per il C++, la scelta si amplia.

Allora opterò sicuramente per la GTK.

Che ne pensate di tool come Glade per la creazione di interfacce grafiche ?
Secondo voi un neofita dovvrebbe utilizzarlo oppure no ?
 

BrutPitt

Utente Attivo
1,166
1,262
Azz, MS offre vcpkg.
...
Se funge senza intoppi, è una manna per gli sviluppatori.
Sperare che non vi siano intoppi, si puo' ... ma e' utopistico ;) :D
Ricordo che quando compilai per VS2013 tribolai comunque un po', all'inizio... ma tirando le somme funziona discretamente ed e' di gran lunga piu' comodo che partire da ZERO... e sicuramente non e' piu' un bagno di sangue. ;)
Reputo comunqe che ci sia un elevato grado di difficolta' per chi e' alle prime armi... pero' ammetto di non conoscere se il supporto per MSVC sia stato ulteriormente migliorato da allora.
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili