Pagina 1 di 3
Programmare una GUI
Inviato: sab 13 ago 2005, 14:17
da Sari
Allora, innanzitutto premetto che ho intenzione di provare a costruire un AreaEditor opensource, quindi necessariamente con C/C++ (altrimenti mi rimane solo il VisualBasic delle superiori come bagaglio culturale, che non è proprio definibile multipiattaforma

), visto che non se ne trovano in giro, se non qualcuno poco pratico, o mai finito.
Il primo scoglio che dovrò affrontare è la scelta tra C e C++, quale scegliere? Il C lo so bene, il C++ mai usato. Che benefici ho nell'uilizzo di C++?
Il secondo, e più importante è la GUI, mai fatta una GUI in vita mia se non con VisualBasic... So come lavora Java per le GUI (merito dell'uni), ma non ne ho mai realizzata una, nemmeno un tasto o una finestrella vuota. So solo che necessito di un parco di librerie (GTK?) e di una guida, ma che guida? qualcuno mi sa consigliare una buona guida di base e una avanzata per la relizzazione di una GUI?
L'idea mi è nata stamattina mentre leggevo il giornale

, ci voglio se non altro provare.
Inviato: sab 13 ago 2005, 14:29
da gallows
per la gui puoi usare le gtk, qui c'è il tutorial (in inglese):
http://www.gtk.org/tutorial/index.html
per disegnare le finestre puoi usare glade comunque.
c o c++? eterno dilemma...

Inviato: sab 13 ago 2005, 14:49
da ico
per me c++, è più portato all'oop..e soprattutto più simpatico

per creare una finestra volendo si può usare anche ncurses, ma non so se è quello che volevi.
ola

Inviato: sab 13 ago 2005, 14:50
da Sari
non so nemmeno cosa sia ncurses

, comunque sto gia leggendo il tutorial sulle GTK.
Re: Programmare una GUI
Inviato: sab 13 ago 2005, 14:53
da gastone90
Sari ha scritto:Che benefici ho nell'uilizzo di C++?
Se hai intenzione di fare programmi orientati agli oggetti, allora devi assolutamente usare il c++, il c è abbastanza scomodo in questo campo
Inviato: sab 13 ago 2005, 15:10
da Sari
mhm, niente oggetti... son già partito col C e con L'Hello world GTK

Inviato: sab 13 ago 2005, 16:22
da gioco
Ti consiglio C, GTK e glade che è utile soprattutto per capire come funziona e come si programma una GUI. Trovi molti tutorials sul sito ufficiale.
Inviato: sab 13 ago 2005, 16:27
da Sari
accidenti bello glade!, praticamente ho la cosa difficile (per me almeno) fatta.
Bello, bello veramente, lo sto provando giusto ora.
Comunque, grazie delle risposte

a tutti, sempre velocissimi

, slacky.it non si smentisce mai.
Inviato: sab 13 ago 2005, 16:46
da marco79
Glade lo puoi usare anche x il c++ si chiama glademm ed usa le librerie gtkmm che sono la versione c++ delle gtk quindi tutte oo.
Glade si integra bene con anjuta.
In alternativa puoi usare le librerie qt (quelle con le quali e fatto kde) che si integrano con kdevelop.
Gtk/gtkmm e un bel progetto molto valido.Scegli tu.
Inviato: sab 13 ago 2005, 17:50
da Sari
allora, grazie a glade sono riuscito a creare una interfaccia (tanto per fare una prova con il metodo di creazione) e a far funzionare la chiusura del programma con il classico File->quit!! Grandioso ghgh.
Sembra relativamente semplice e ben gestito come sistema, anzi mi piace proprio. Bella e utilissima la gestione delle callback.
Una domandina : Gli oggetti messi in deprecate sono veramente così deprecabili?
Comunque, non avrei mai creduto che risultasse così semplice programmare una interfaccia.
Inviato: dom 14 ago 2005, 0:17
da Sari
Sono riuscito a gestire la finestra di apertura dei file standard e a far arrivare il file alla funzione di lettura e parsing... con il visualbasic c'ero arrivato dopo una settimana leggendo la msn del prof a scuola, e questo è sconvolgente... ora giunge un dubbio, un dubbio più che altro stilistico. Gli errori! Per fare una cosa fatta bene come devo gestirli? Io mi sono sempre limitato a creare un canale di bug e a buttare tutto li con printf, e un file di log bug da rimepire con fprintf, ma basta o serve qualcosa di più o adirittura di diverso? Mi spiego meglio, come li gestisce un programmatore C serio, cosa che io non sono

?
Inviato: dom 14 ago 2005, 12:51
da gioco
Potresti far tornare ad ogni funzione un codice che rappresenta l'errore, e poi passi questo codice ad una funzione che effettivamente gestisce gli errori, nel tuo caso magari facendo comparire un'opportuna finestra di dialogo.
Inviato: dom 14 ago 2005, 15:21
da absinthe
Sari ha scritto:Sono riuscito a gestire la finestra di apertura dei file standard e a far arrivare il file alla funzione di lettura e parsing... con il visualbasic c'ero arrivato dopo una settimana leggendo la msn del prof a scuola, e questo è sconvolgente... ora giunge un dubbio, un dubbio più che altro stilistico. Gli errori! Per fare una cosa fatta bene come devo gestirli? Io mi sono sempre limitato a creare un canale di bug e a buttare tutto li con printf, e un file di log bug da rimepire con fprintf, ma basta o serve qualcosa di più o adirittura di diverso? Mi spiego meglio, come li gestisce un programmatore C serio, cosa che io non sono

?
di solito si utilizzano i return delle funzioni per avere un valore di ritorno che indichi quanto meno se c'è stato errore oppure no (0 o 1)
poi ad ogni funzione si fa seguire un if che legge il valore di ritorno ed in caso di errore fs qualcosa...
printare in una finestra l'errore potrebbe essere un'idea...
M.
Inviato: dom 14 ago 2005, 19:37
da DaNiMoTh
Se vuoi la mia, è meglio l'accoppiata C++ e QT che C e GTK....
Io le sto usando tutte e 2 e le GTK mi sembrano un pò buggate...
ciao
Inviato: dom 14 ago 2005, 19:58
da sir_alex
Eccomi non potevo mancare a questa discussione!
Allora, per gtk y glade: gli errori io li gestisco così: intanto fprintf a manetta (che siano su stdout stderr o file di log) che male non fanno, magari le abiliti con un #ifdef DEBUG, così da toglierle di mezzo velocemente (basta eliminare la definizione di DEBUG); altra alternativa è creare una finestra di dialogo con un'etichetta in mezzo; in callbacks crei una stringa e fai ritornare tutte le funzioni con numeri (anche altri oltre 0 e 1, dipende da quello che gestisci), e quando ti ritornano gli errori fai le if (come avevi già detto) e poi una strcpy(stringa_di_cui_sopra, "messaggio"). In Glade crei un signal handler sulla finestra di errore (in cui hai messo un'etichetta vuota o con un messaggio generico) usando come signal "show", in modo che venga eseguito ogni volta che viene mostrata la finestra; in tale funzione scrivi una cosa tipo
void
on_errorUI_show (GtkWidget *widget, gpointer user_data)
{
GtkWidget *error=lookup_widget(widget, "nome_etichetta");
gtk_label_set_text(GTK_LABEL(widget), stringa);
}
Nelle funzioni in pratica viene
int error=Funzione(x,y,z);
if(error!=0)
{
strcpy(stringa, "Errore dovuto a chissà che...");
gtk_widget_show(errorUI);
}
occhio che per fare così devi aver già invocato create_errorUI() sul GtkWidget errorUI! (perchè la finestra per poter essere mostrata deve già esistere, io la finestra l'ho chiamata errorUI).
Spero di essere stato un pochetto chiaro...
Per il discorso c/c++, io al momento so solo il c quindi glade a manetta, però se dovessi scegliere (leggi: se mi vien voglia di imparare il c++) farei qt/kde, perchè come grafica secondo me le qt sono avanti rispetto a gtk/gnome (a prescindere dal tema usato!), e qt fa parte del lavoro di allineamento finestre e quelle cose lì da solo... Invece glade è un po' carente in questo, col discorso che devi dividere in righe e colonne mentre qt ha uno spazio tipo assi cartesiani in cui puoi posizionare i vari widgets ovunque...
Ciao!