Programmare una GUI

Area di discussione libera.

Moderatore: Staff

Regole del forum
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
Sari
Linux 3.x
Linux 3.x
Messaggi: 584
Iscritto il: mer 16 feb 2005, 0:00
Slackware: 12.1
Kernel: 2.6.24
Desktop: Gnome
Località: Verona

Programmare una GUI

Messaggio 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 :p), 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 :p, ci voglio se non altro provare.

Avatar utente
gallows
Staff
Staff
Messaggi: 3471
Iscritto il: lun 20 set 2004, 0:00
Desktop: cwm
Distribuzione: OpenBSD
Località: ~/
Contatta:

Messaggio 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... :roll:

ico
Linux 0.x
Linux 0.x
Messaggi: 92
Iscritto il: sab 4 giu 2005, 0:00
Località: Bassano del Grappa (VI)

Messaggio da ico »

per me c++, è più portato all'oop..e soprattutto più simpatico :p
per creare una finestra volendo si può usare anche ncurses, ma non so se è quello che volevi.

ola ;)

Avatar utente
Sari
Linux 3.x
Linux 3.x
Messaggi: 584
Iscritto il: mer 16 feb 2005, 0:00
Slackware: 12.1
Kernel: 2.6.24
Desktop: Gnome
Località: Verona

Messaggio da Sari »

non so nemmeno cosa sia ncurses :), comunque sto gia leggendo il tutorial sulle GTK.

gastone90

Re: Programmare una GUI

Messaggio 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

Avatar utente
Sari
Linux 3.x
Linux 3.x
Messaggi: 584
Iscritto il: mer 16 feb 2005, 0:00
Slackware: 12.1
Kernel: 2.6.24
Desktop: Gnome
Località: Verona

Messaggio da Sari »

mhm, niente oggetti... son già partito col C e con L'Hello world GTK :p

Avatar utente
gioco
Packager
Packager
Messaggi: 900
Iscritto il: dom 19 giu 2005, 0:00
Slackware: last stable
Località: in the court of the Wesnoth king
Contatta:

Messaggio 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.

Avatar utente
Sari
Linux 3.x
Linux 3.x
Messaggi: 584
Iscritto il: mer 16 feb 2005, 0:00
Slackware: 12.1
Kernel: 2.6.24
Desktop: Gnome
Località: Verona

Messaggio 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 :p, slacky.it non si smentisce mai.

Avatar utente
marco79
Linux 2.x
Linux 2.x
Messaggi: 451
Iscritto il: gio 14 ott 2004, 0:00
Località: Como
Contatta:

Messaggio 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.

Avatar utente
Sari
Linux 3.x
Linux 3.x
Messaggi: 584
Iscritto il: mer 16 feb 2005, 0:00
Slackware: 12.1
Kernel: 2.6.24
Desktop: Gnome
Località: Verona

Messaggio 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.

Avatar utente
Sari
Linux 3.x
Linux 3.x
Messaggi: 584
Iscritto il: mer 16 feb 2005, 0:00
Slackware: 12.1
Kernel: 2.6.24
Desktop: Gnome
Località: Verona

Messaggio 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 :) ?

Avatar utente
gioco
Packager
Packager
Messaggi: 900
Iscritto il: dom 19 giu 2005, 0:00
Slackware: last stable
Località: in the court of the Wesnoth king
Contatta:

Messaggio 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.

Avatar utente
absinthe
Iper Master
Iper Master
Messaggi: 2354
Iscritto il: dom 15 mag 2005, 0:00
Nome Cognome: Matteo Nunziati
Slackware: 12.1 - defunct
Kernel: 2.6.32-5-amd64
Desktop: gnome
Distribuzione: debian squeeze
Località: Prato
Contatta:

Messaggio 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.

Avatar utente
DaNiMoTh
Linux 3.x
Linux 3.x
Messaggi: 941
Iscritto il: mar 30 nov 2004, 0:00
Località: irc.syrolnet.org /// #slackware
Contatta:

Messaggio 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

sir_alex
Linux 3.x
Linux 3.x
Messaggi: 735
Iscritto il: lun 21 mar 2005, 0:00
Kernel: 2.6.35-22
Desktop: KDE4
Distribuzione: Ubuntu
Località: Milano - Corbola (RO)
Contatta:

Messaggio 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!

Rispondi