Domanda [C++] Domande riguardanti GUI

Stato
Discussione chiusa ad ulteriori risposte.

xDevily

Utente Emerald
9 Agosto 2012
925
101
183
528
Ciao, e' la prima volta che mi interesso a realizzare un interfaccia grafica per un app in c++ e non saprei dove partire.
Il mio obbiettivo e' quello di realizzare un app cross-platform quindi ho scartato a prescindere librerie come Win32. Cercando su internet ho trovato che potrei usare OpenGL,SDL o GTK+ e altre (Qt l'ho gaurdata ma non mi e' particolarmente piaciuta).
Per quanto riguarda poi SDL e GTK+ (e simili) mi e' venuto un dubbio, ovvero se io sviluppo con queste librerie poi l'app funziana su delle macchine in cui non sono installate?

Ho trovato anche che potrei usare un engine html come questo: http://www.awesomium.com/. Fino a che punto e' conveninte usare quest'ultimo? (So cavarmela piu o meno bene in html)

PS: Si accettano anche consigli su librerie da usare
 
OpenGL e SDL scartale a meno che non vuoi fare un videogioco. Qt rivalutale perché sono decisamente tra le scelte più valide che puoi fare, aggiornate e c++ose.

Per quanto riguarda poi SDL e GTK+ (e simili) mi e' venuto un dubbio, ovvero se io sviluppo con queste librerie poi l'app funziana su delle macchine in cui non sono installate?
Quando compili il programma puoi scegliere se ficcare tutto dentro all'eseguibile o se andare di eseguibile + librerie linkate dinamicamente (.dll in windows). In un caso basta il solo .exe per far funzionare tutto, nell'altro devi passare anche i file .dll, che devono stare nella stessa cartella dell'exe.
Se usi il linking dinamico il tuo eseguibile pesa decisamente meno, su linux solitamente si specificano le dipendenze di un programma per non appesantire inutilmente il sistema.

Ho trovato anche che potrei usare un engine html come questo: http://www.awesomium.com/. Fino a che punto e' conveninte usare quest'ultimo? (So cavarmela piu o meno bene in html)
Mi sembra carino, ma non è nativo come fltk, wxwidgets, qt, gtk e simili. Da quanto ho capito è proprio è proprio una pagina web a tutti gli effetti, non so se è quello che cerchi.
Comunque si, sembra carino... io lo proverei.


PS.
Se non l'hai già fatto usa il tasto cerca (o google) per vedere gli altri thread che parlano della stessa roba, ce ne sono diversi e alcune cose (tipo: perché preferire X a Y?) sono già state dette.
 
  • Mi piace
Reazioni: xDevily
In effetti, qt è fatto bene, per non parlare della sua documentazione, e da non sottovalutare che aumenterà la velocità di sviluppo.
Però ci sono vari aspetti negativi, anche se pochi.
Qt rivalutale perché sono decisamente tra le scelte più valide che puoi fare
Il codice di applicazioni basate su qt fa uso di alcuni elementi non idonei a C++, e questi devono essere convertiti in C++ da moc, il quale è un preprocessore.
Poi, beh, se si lavora a qt è anche buono usare i qthread.
 
  • Mi piace
Reazioni: xDevily
Io ti suggerisco delle cose diverse, ovvero wxwidgets oppure FLTK.
Chiaramente, a meno di compilare anche tutta la libreria con il tuo eseguibile o distribuire le librerie custom assieme al tuo eseguibile, le librerie devono essere installate sulla macchina target per poter eseguire il programma.
Tuttavia io non uso altro che queste due soluzioni, semplici, estremamente funzionali e multipiattaforma.
 
  • Mi piace
Reazioni: xDevily
Io ti suggerisco delle cose diverse, ovvero wxwidgets oppure FLTK.
Chiaramente, a meno di compilare anche tutta la libreria con il tuo eseguibile o distribuire le librerie custom assieme al tuo eseguibile, le librerie devono essere installate sulla macchina target per poter eseguire il programma.
Tuttavia io non uso altro che queste due soluzioni, semplici, estremamente funzionali e multipiattaforma.
wxWidgets usa molte macro e sarà un pò difficile da configurare per le piattaforme ...
 
Io pensavo quasi quasi di usare gtk+ e mi e' sorta un altra domanda; e' complesso fare aggiunge a visual studio le tutte le librerie che servono nell'eseguibile finale?
 
Ultima modifica:
Dici? Io l'ho fatto e sono servite pochissime modifiche.
Hai fatto COSA?
Qt ha un sacco di libri al riguardo, ed è molto aggiornato, a differenza dei libri di wxWidgets, che essendo più chiari, l'ultimo libro di wxWidgets è stato scritto su una vecchia versione di esso.
Possiamo pure dire che wxWidgets è la brutta copia di MFC ...

@xDevily che vuol dire? Spiegati meglio.
 
  • Mi piace
Reazioni: zphoenixtv
@srsly io come ide uso visual studio e mi chidevo, non avendo mai fatto cose del genere prima d'ora, se e' coplicato aggiungere i file dll esterni al progetto di vs e indicare sempre a quest'ultimo di aggiungerli all'eseguibile che compila.
 
io come ide uso visual studio e mi chidevo, non avendo mai fatto cose del genere prima d'ora, se e' coplicato aggiungere i file dll esterni al progetto di vs
Facile.
e indicare sempre a quest'ultimo di aggiungerli all'eseguibile che compila.
mmm... dipende, in questo caso è abbastanza fraintendibile per me ... Le dll non possono essere collegate in un file eseguibile staticamente, il loro scopo è tutto il contrario.
 
Hai fatto COSA?
Qt ha un sacco di libri al riguardo, ed è molto aggiornato, a differenza dei libri di wxWidgets, che essendo più chiari, l'ultimo libro di wxWidgets è stato scritto su una vecchia versione di esso.
Possiamo pure dire che wxWidgets è la brutta copia di MFC ...

Ma scusa cosa c'entrano i libri...comunque vabbeh i gusti sono gusti.
Ma sicuramente non puoi dire che le wxwidgets son la brutta copia di MFC. Sono completamente differenti, open source, ed in ogni caso sono molto più personalizzabili. Inoltre non ci dimentichiamo che a differenza di qt, quelle sono ridistribuibili liberamente per qualsiasi utilizzo. E questo fa la differenza, infatti se andassimo a fare un conteggio su quali sono più usate, vincerebbe ancora qt, ma di poco e quasi sicuramente questo sarà ribaltato in un breve lasso di tempo (1 o 2 anni non di più).
Io sinceramente credo che, soprattutto in ambito linux, le qt dovrebbero essere abbandonate, non hanno più la stessa ragione di esistere di quando sono state create.
 
Ma scusa cosa c'entrano i libri...comunque vabbeh i gusti sono gusti.
Come cosa c'entrano? Sono fondamentali, da dove vuoi imparare?
Qt è la più popolare libreria GUI per C++ ... E' cross-platform, ed ha una buona versione markup per telefoni, e usa concetti C++ più moderni.
Prendi nota che e' un toolkit molto maturato, contiene tutto, un framework completo.
Poi per quel fatto, semplicemente perchè Qt non ha una buona integrazione con GNOM
Io consiglio Qt se si desidera creare una applicazione per KDE, Windows e Mac, nient'altro.
@xDevily GTK+ è stato creato perchè Qt non era opensource un tempo ... Questo è il toolkit principale del desktop-environment tra cui GNOME eccetera.
GTK+ è supportato pure da GNU e FSF ... E' l'unico toolkit che lavora con C. Poi, ci sono molti binding di linguaggi per GTK+ disponibili (ovviamente stessa cosa per wxWidgets e Qt)
 
Come cosa c'entrano? Sono fondamentali, da dove vuoi imparare?
I tutorial e le guide ufficiali sono più che sufficienti. Forse sono anche meglio dei libri perché più aggiornati, ma al di là di questo penso che i libri siano da considerarsi un valore aggiunto, non qualcosa di indispensabile. Anch'io ho le mie ragioni per preferire Qt a WxWidgets, ma di fatto sono entrambe delle scelte validissime.
Sebbene Java e C# abbiano una marcia in più per questo genere di cose, le Qt non sono l'unica scelta valida quando si parla di C++: le 4-5 librerie che ho citato in precedenza (e che ritrovi nelle altre discussioni a riguardo su questo forum) sono alcune tra le migliori scelte che si possano fare.

@srsly io come ide uso visual studio e mi chidevo, non avendo mai fatto cose del genere prima d'ora, se e' coplicato aggiungere i file dll esterni al progetto di vs e indicare sempre a quest'ultimo di aggiungerli all'eseguibile che compila.
Se è la prima volta che lo fai qualche difficoltà potresti averla, ma alla fine bisogna fare sempre la stessa cosa per configurare la libreria X per l'IDE Y: gli dici dove sono gli include, gli dici dove sono i .lib e poco altro. Con Qt potresti avere qualche rogna in più perché il codice deve passare da una sorta di preprocessore più pompato (Meta-Object Compiler) che ti permette di sfruttare una sintassi più pulita per fare certe cose (in particolare signal-slot per il binding tra elementi dell'interfaccia grafica e codice C++). Però volendo Qt ha anche un IDE su misura per facilitarti le cose e, indipendentemente da questo, solitamente si trovano delle guide step by step per configurare la libreria X per gli IDE più famosi.

Se vuoi usare il linking dinamico (exe piccolo + dll) basta copia incollare le dll che ti servono nella stessa cartella dell'eseguibile, se vuoi usare il linking statico (exe grande e nessuna dll) devi specificare qualche menata in più nelle proprietà del progetto. Il codice che scrivi non cambia di una riga, quindi non è un problema legato al linguaggio quanto all'IDE (compilatore - linker). Questo lo devi fare dopo aver configurato l'IDE per poter lavorare con la libreria che hai scelto.
BTW: le FLTK sono le più adatte a fare un linking statico perché sono molto minimali e occupano poco spazio, con Qt, GTKmm e WxWidgets il linking dinamico è più conveniente.
 
  • Mi piace
Reazioni: xDevily
I tutorial e le guide ufficiali sono più che sufficienti. Forse sono anche meglio dei libri perché più aggiornati, ma al di là di questo penso che i libri siano da considerarsi un valore aggiunto, non qualcosa di indispensabile.
In realtà è al contrario ...
ma alla fine bisogna fare sempre la stessa cosa per configurare la libreria X per l'IDE Y: gli dici dove sono gli include, gli dici dove sono i .lib e poco altro.
Cerca di parlare con linguaggio più tecnico ...
Con Qt potresti avere qualche rogna in più perché il codice deve passare da una sorta di preprocessore più pompato (Meta-Object Compiler)
Quello che ti avevo detto nel mio primo messaggio in questo topic ...
BTW: le FLTK sono le più adatte a fare un linking statico perché sono molto minimali e occupano poco spazio, con Qt, GTKmm e WxWidgets il linking dinamico è più conveniente.
Corretto.
 
In realtà è al contrario ...
Opinabile.
Non stiamo parlando di imparare un nuovo linguaggio, un altro paradigma di programmazione o chissà cosa. È una "stupidissima" libreria e una volta che impari a muovere i primi passi si tratta di fare 90% di pratica e 10% di "studio" su quale sia il modo migliore per fare una determinata cosa.

Cerca di parlare con linguaggio più tecnico ...
È una cosa più pratica che tecnica, si tratta semplicemente di "aggiungere le dipendenze del progetto".
Detto così però non aiuto nessuno, se invece gli dico di cose come: "cerca include directories nelle proprietà del progetto e di aggiungi il percorso della cartella include che si trova nella cartella della libreria che hai scaricato"; magari non impara subito a farlo, però si fa l'idea del genere di cose che bisogna fare (semplicemente aggiungere dei percorsi nelle proprietà del progetto, non c'è niente di strano da dover imparare a fare).
Se sbaglia a fare qualcosa ovviamente non gli funziona una mazza, e i messaggi di errore possono non essere così intuitivi se è la prima volta che li vede... quindi sì, è facile, ma se non lo fai con attenzione non funziona un bel niente. Ma esistono delle guide (sicuramente sul sito ufficiale si trovano) mica per niente.

Quello che ti avevo detto nel mio primo messaggio in questo topic ...
Yep, era semplicemente per aggiungere: mentre con le librerie normali (FLTK, WxWidgets, SDL, Boost, Awesomium, etc...) si fanno sempre le stesse cose, con Qt c'è questa cosa in più da fare. Non è che sto cercando di smentire quello che dici, sto solo provando a spiegare all'utente come funzionano le cose e cosa dovrà fare, visto che ha detto di non averlo mai fatto.
 
Come cosa c'entrano? Sono fondamentali, da dove vuoi imparare?
Qt è la più popolare libreria GUI per C++ ... E' cross-platform, ed ha una buona versione markup per telefoni, e usa concetti C++ più moderni.
Prendi nota che e' un toolkit molto maturato, contiene tutto, un framework completo.
Poi per quel fatto, semplicemente perchè Qt non ha una buona integrazione con GNOM
Io consiglio Qt se si desidera creare una applicazione per KDE, Windows e Mac, nient'altro.
@xDevily GTK+ è stato creato perchè Qt non era opensource un tempo ... Questo è il toolkit principale del desktop-environment tra cui GNOME eccetera.
GTK+ è supportato pure da GNU e FSF ... E' l'unico toolkit che lavora con C. Poi, ci sono molti binding di linguaggi per GTK+ disponibili (ovviamente stessa cosa per wxWidgets e Qt)

Allora ci tengo a precisare di avere usato le qt in ambito professionale, quindi se non ti dispiace, non ho molto di cui prendere nota perchè le conosco.
Non sto mettendo in dubbio che le QT per ora siano le più usate, e con buona approssimazione anche le più potenti, ma sia i concetti C++ più avanzati che il framework completo di cui parli, sebbene siano importanti sono anche un'arma a doppio taglio. Il solo fatto che esistano dei libri la dice lunga su come imparare a scrivere per le qt possa essere uno sforzo e richieda ore di lavoro anche a sviluppatori preparati. questo è accettabile solo in determinate occasioni. E vale anche il contrario, uno sviluppatore che si specializzi con le qt potrebbe avere difficoltà al di fuori di quell'ambito.
Io parlo chiaramente non con la visione di chi vuole creare un programmino a casa sua, ma più ampiamente di chi vuole sviluppare o partecipare ad un medio/grande progetto professionale in cui il tempo è denaro e dove quindi i risultati vanno raggiunti con la minore spesa e nel minore tempo possibile. E in questi casi, sebbene si possano usare le qt (e in taluni casi si usano) la scelta più adeguata è comunque sempre quella di installare una semplice lib come FLTK, integrarla in eclipse ed iniziare a sviluppare, tutto in 5 minuti e senza quasi leggere le guide.
 
tu ovviamente non hai capito nulla.
la scelta più adeguata è comunque sempre quella di installare una semplice lib come FLTK
ma che cambia?
tutto in 5 minuti e senza quasi leggere le guide.
le guide sono fondamentali, se non li vuoi leggere non è una motivazione mia.

se non avessi molto da cui prendere nota, non mi avresti frainteso...
ti do un consiglio: sii più generoso e meno saccente la prossima volta. non sei dio, ma soprattutto non conosci il prossimo.
 
tu ovviamente non hai capito nulla.

ma che cambia?

le guide sono fondamentali, se non li vuoi leggere non è una motivazione mia.

se non avessi molto da cui prendere nota, non mi avresti frainteso...
ti do un consiglio: sii più generoso e meno saccente la prossima volta. non sei dio, ma soprattutto non conosci il prossimo.

Sinceramente non capisco a cosa ti riferisca e per quale motivo abbia un atteggiamento così ostile sul lato personale.
Io ho soltanto scritto quello che nella mia esperienza ho valutato, e purtroppo sono verità oggettive che negli anni poi ci si trova sempre ad affrontare.
I progetti di scuola e dell'università, per quanto possano insegnare, negli ultimi tempi tendono anche un po' ad allontanare i giovani da quello che sono le reali esigenze relative ai progetti. E le esigenze sono sempre le stesse: fare il lavoro nel minore tempo possibile, spendendo il meno possibile ed avvalendosi di minor risorse possibile. E questo, ma poi si vede soltanto lavorandoci, è fondamentale per effettuare le scelte di cui ho parlato in precedenza. E' fondamentale considerare anche che tali scelte, e lo sviluppo, spesso sono solo una parte del progetto. Ecco perchè in buona parte dei casi scegliere QT è controproducente, semplicemente per questo (e in alcuni altri casi per un fatto di licenze).
In ogni caso io vedo poca saccenza in questo topic, e m dispiace molto che quello che scrivo possa essere frainteso in tal senso.
Io questi 15 anni di esperienza nel settore li ho sempre messi a disposizione per quanto mi era possibile, qui e in diverse altre comunità, senza assolutamente ritenermi Dio o chi per esso, perchè so benissimo che non si finisce mai di imparare, ma so anche che purtroppo la scuola produce anche delle forti inadeguatezze (90% dei laureati tecnici non ha idea di cosa ha studiato ) dal punto di vista professionale, e chi ha fatto colloqui a neoingegneri sa di cosa parlo, quindi purtroppo è anche il caso a volte di riportare le persone sui binari giusti di crescita.
E non è un caso se ho scelto per un periodo di moderare proprio questa sezione di InForge, proprio perchè credevo nell'utenza che la frequenta, poi la vita ci mette davanti a delle scelte, ma questo è un altro discorso.

Sono già uscito un po' troppo OT, quindi visto che ormai le risposte sono state date, non credo di dover aggiungere molto. A presto
 
  • Mi piace
Reazioni: </Singh>™
Mi scuso per il tema che sto per scrivere, ma non riesco più ad essere sintetico come una volta :asd:.

Quello delle GUI è un tema che ricorre spesso, se non ricordo male c'era già un vecchio topic in cui si dicevano più o meno le stesse cose e il problema, per come la vedo io, è sempre lo stesso: la pesantezza di certe librerie (o addirittura framework nel caso di qt e simili). C'è davvero bisogno di usare un intero framework (e imparare ad usarlo, magari con roba come suoni, rete, ecc.) quando andrò ad usare solo la parte GUI?
Per carità, sicuramente a qualcuno servirà tutta quella roba, specialmente per progetti grossi, o forse sbaglio io a pensare di includere le librerie che mi piacciono/servono e non usare obbligatoriamente quelle di un grosso framework (magari perchè le ritengo poco efficienti o più pesanti, o per altri 1000 motivi).
Comunque sia so che si può escludere da questi framework ciò che non si vuole usare (di solito se è scritto bene basta non includere e/o linkare alcuni componenti), ma alla fine viene fuori lo stesso un eseguibile da 5 o più MB (numero sparato a caso, ma neanche tanto lontano dalla realtà) che è abbastanza grande per un piccolo software come, ad esempio, può essere una calcolatrice con un paio di pulsanti e una textbox. Certo, potrei usare le WINAPI e risolvere il problema delle dimensioni che sarebbero di pochi KB, ma perderei il cross-platform e la semplicità nel programmare.
Se non sbaglio le FLTK hanno proprio questo come obiettivo primario, ma manca una cosa che credo possa essere importante in certi progetti: le GUI native dell'OS. Da quello che ho capito ha un'interfaccia tutta sua, che non so se sia un bene o un male dal punto di vista degli utOnt... ehm utenti :lol:. Sicuramente lo è lato codice: ne ho letti un paio e sono veramente molto facili da capire e da scrivere.

Per questo chiedo a chi come @EvOlUtIoN_OGM o @St3ve ha avuto modo di usare queste librerie/framework: c'è qualcosa che usa l'interfaccia nativa degli OS e che generi eseguibili leggeri (magari senza portarsi delle dipendenze inutili, specialmente per piccoli software)? FLTK sembrano perfette, c'è un modo di usare la GUI nativa, o ci sarà in futuro? Mi attiravano molto anche wxWidgets, ma l'ultima volta che ho provato è stato anni fa.
Purtroppo credo che l'unico modo per scoprirlo è realizzare un piccolo software con ognuna di queste e provare da me, ma è da parecchio che non tocco un codice a causa di altri esami universitari (infatti è per questo che, a malincuore, visito molto raramente questa sezione).
 
Per questo chiedo a chi come @EvOlUtIoN_OGM o @St3ve ha avuto modo di usare queste librerie/framework: c'è qualcosa che usa l'interfaccia nativa degli OS e che generi eseguibili leggeri (magari senza portarsi delle dipendenze inutili, specialmente per piccoli software)? FLTK sembrano perfette, c'è un modo di usare la GUI nativa, o ci sarà in futuro? Mi attiravano molto anche wxWidgets, ma l'ultima volta che ho provato è stato anni fa.

Prendi quello che ti sto per dire con le pinze, perché è da parecchio che non uso né mi informo su questo genere di cose.
FLTK usano dei controlli loro proprio by desing, per massimizzare la portabilità, la resa grafica è quella che è. WxWidgets credo che abbiano proprio come obiettivo quello di integrarsi al meglio con le GUI di sistema, forse sono anche le uniche (tra quelle citate) che usano a tutti gli effetti i controlli nativi per ogni piattaforma supportata.
Detto questo anche Qt e GTK+ sono sono delle GUI di tutto rispetto e, come ci si aspetta, non risultano un pugno nell'occhio se usate fuori da Linux. Per farti un'idea guarda com'è Pidgin (GTK) e VirtualBox (Qt) o qualsiasi altra cosa (libreoffice, gimp, chrome, blender, ecc...).

In pratica GTK, Qt e WxWidgets vanno bene uguale. Se proprio punti al minimalismo (scartando FLTK) immagino che WxWidgets sia la scelta migliore, ma anche con le altre non è che hai tutto questo gran peso da portarti dietro: quei 5MB sono tanti per una calcolatrice, ma sono accettabilissimi per qualcosa di un po' più corposo. Anche perché, come hai giustamente detto anche tu, non e necessario portarsi sempre dietro tutto il framework, sono pensate per essere modulari.

Se io dovessi scegliere cosa usare, probabilmente prenderei Qt... poi vabbé, dipende anche dal progetto. È anche una questione di preferenze personali, evolution ha detto di trovarsi bene con fltk e wxwidgets.
 
Bisogna subito chiarire una cosa importante. Ogni sistema operativo ha solo un modo per creare le finestre, sia windows che Linux dunque, le creano in un modo ben specifico. Certo, esistono tante API di windows diverse, come esistono diverse possibilità su linux. Ma la finestra è una e basta, quello che puoi fare mediante queste librerie è solo personalizzarle e crearle in modo meno "standard", ed intergaire con queste in modo più semplice e intuitivo.
Detto questo, il tuo problema potrebbe ssere molto più basilare per 2 motivi. Se lo fai per Linux dovrai comunque installare le librerie, ma lo fai una volta sola e queste funzioneranno per qualsiasi software. Per windows invece puoi tranquillamente selezionare le librerie da allegare al tuo eseguibile, o addirittura integrarle dentro l'exe principale o una libreria completa, o addirittura compilare una libreria che contiene solo i metodi che usi. Ma dipende sempre dalle tue esigenze.
Un'ultima precisazione. Le FLTK sembrano molto basilari, ed è vero. Ma sono anche personalizzabili all 100%, infatti questo software è fatto con fltk e non mi pare sia niente male: http://rakarrack.sourceforge.net/

A presto e in bocca al lupo.
 
Stato
Discussione chiusa ad ulteriori risposte.