[Risolto] Anjuta: come collegare i widget creati con glade?
- Dr_Berta
- Entusiasta Emergente
- Messaggi: 1906
- Iscrizione: domenica 31 luglio 2011, 12:37
- Desktop: Gnome + Cairo Dock
- Distribuzione: Ubuntu 20.04.x x86_64 LTS
- Località: Carpi (MO)
[Risolto] Anjuta: come collegare i widget creati con glade?
Ciao a tutti.
Sto iniziando a valutare l'uso di Anjuta per lo sviluppo di applicazioni in GTK+ (GTK3). Ho creato una piccola applicazione di prova dotata di due pagine grafiche create con Anjuta stesso.
Ho definito i nomi delle callback dei vari widget nei files grafici.
Stando a quanto dice la guida, Anjuta dovrebbe automaticamente creare nel file principale i collegamenti con i widget e il codice di base delle callback facendo doppio click sui widget nel glade inspector.
C'è qualcuno che può chiarirmi meglio qual'è il glade inspector e come fare questo passaggio?
Grazie
Sto iniziando a valutare l'uso di Anjuta per lo sviluppo di applicazioni in GTK+ (GTK3). Ho creato una piccola applicazione di prova dotata di due pagine grafiche create con Anjuta stesso.
Ho definito i nomi delle callback dei vari widget nei files grafici.
Stando a quanto dice la guida, Anjuta dovrebbe automaticamente creare nel file principale i collegamenti con i widget e il codice di base delle callback facendo doppio click sui widget nel glade inspector.
C'è qualcuno che può chiarirmi meglio qual'è il glade inspector e come fare questo passaggio?
Grazie
Ultima modifica di Dr_Berta il domenica 7 ottobre 2012, 23:47, modificato 1 volta in totale.
Ubuntu user #35116. Linux user #550996 - Il cervello è come un paracadute, funziona solo se si apre [Einstein]
- Dr_Berta
- Entusiasta Emergente
- Messaggi: 1906
- Iscrizione: domenica 31 luglio 2011, 12:37
- Desktop: Gnome + Cairo Dock
- Distribuzione: Ubuntu 20.04.x x86_64 LTS
- Località: Carpi (MO)
Re: Anjuta: come collegare i widget creati con glade?
Aggiornamento: sbirciando accuratamente in rete ho trovato dove spiegano cos'è il glade inspector. Banale, era l'albero grafico che mostra i widget inseriti nell'interfaccia fatta con glade.
A questo punto ho creato i collegamenti e qui nasce il nuovo problema: i collegamenti non funzionano.
Il software crea una finestra con una immagine e due bottoni: uno per uscire e uno per incrementare il numero di pagina
La finestra si chiama main_window e i due bottoni sono quitButton e startButton.
Ecco il codice:
Quando faccio eseguire il programma si apre la finestra, si vede correttamente l'immagine, ma i bottoni restano disabilitati.
Qualcuno vede dove ho sbagliato?
Ciao
A questo punto ho creato i collegamenti e qui nasce il nuovo problema: i collegamenti non funzionano.
Il software crea una finestra con una immagine e due bottoni: uno per uscire e uno per incrementare il numero di pagina
La finestra si chiama main_window e i due bottoni sono quitButton e startButton.
Ecco il codice:
Codice: Seleziona tutto
#include <config.h>
#include <gtk/gtk.h>
#include <glib/gi18n.h>
typedef struct _pg_manager{
GtkBuilder *builder;
}page_mngr;
void destroy (GtkWidget *widget, gpointer data);
void Start (GtkWidget *widget, gpointer data);
/* ANJUTA: Widgets declaration for pvs_designer.ui - DO NOT REMOVE */
GtkWidget* quitButton;
GtkWidget* startButton;
/* For testing propose use the local (not installed) ui file */
/* #define UI_FILE PACKAGE_DATA_DIR"/ui/pvs_designer.ui" */
#define UI_FILE "src/pvs_designer.ui"
#define TOP_WINDOW "main_window"
#define MAX_PAGES 2
int apag = 0;
int ppag = 0;
GtkWidget *S_window[MAX_PAGES];
/* Signal handlers */
/* Note: These may not be declared static because signal autoconnection
* only works with non-static methods
*/
/* Called when the window is closed */
void
destroy (GtkWidget *widget, gpointer data)
{
gtk_main_quit ();
}
gboolean
delete_event(GtkWidget *window, GdkEvent *event, gpointer data){
return FALSE;
}
/* Called when the window is closed */
void
Start (GtkWidget *widget, gpointer data)
{
ppag = apag;
apag++;
}
//static GtkWidget*
static void
create_window (page_mngr* pag_info, char* uiname, char* winname, int pag)
{
GError* error = NULL;
/* Load UI from file */
pag_info->builder = gtk_builder_new ();
if (!gtk_builder_add_from_file (pag_info->builder, uiname, &error))
{
g_critical ("Couldn't load builder file: %s", error->message);
g_error_free (error);
}
/* Auto-connect signal handlers */
gtk_builder_connect_signals (pag_info->builder, NULL);
/* Get the window object from the ui file */
S_window[pag] = GTK_WIDGET (gtk_builder_get_object (pag_info->builder, winname));
if (!S_window[pag])
{
g_critical ("Widget \"%s\" is missing in file %s.",
winname,
uiname);
}
/* ANJUTA: Widgets initialization for pvs_designer.ui - DO NOT REMOVE */
if(pag == 0){
quitButton = GTK_WIDGET (gtk_builder_get_object (pag_info->builder, "quitButton"));
startButton = GTK_WIDGET (gtk_builder_get_object (pag_info->builder, "startButton"));
g_signal_connect(G_OBJECT(S_window[pag]),"destroy",G_CALLBACK(destroy),NULL);
g_signal_connect(G_OBJECT(S_window[pag]),"delete_event",G_CALLBACK(delete_event),NULL);
g_signal_connect(G_OBJECT (quitButton), "clicked", G_CALLBACK (destroy), NULL);
g_signal_connect(G_OBJECT (startButton), "clicked", G_CALLBACK (Start), NULL);
}
}
int
main (int argc, char *argv[])
{
apag = 0;
ppag = 1;
page_mngr pag_info;
#ifdef ENABLE_NLS
bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
textdomain (GETTEXT_PACKAGE);
#endif
gtk_init (&argc, &argv);
// create page
create_window (&pag_info,UI_FILE,TOP_WINDOW,apag);
g_object_unref (pag_info.builder);
gtk_widget_show_all (S_window[apag]);
gtk_main ();
return 0;
}
Qualcuno vede dove ho sbagliato?
Ciao
Ubuntu user #35116. Linux user #550996 - Il cervello è come un paracadute, funziona solo se si apre [Einstein]
- Dr_Berta
- Entusiasta Emergente
- Messaggi: 1906
- Iscrizione: domenica 31 luglio 2011, 12:37
- Desktop: Gnome + Cairo Dock
- Distribuzione: Ubuntu 20.04.x x86_64 LTS
- Località: Carpi (MO)
Re: Anjuta: come collegare i widget creati con glade?
Nessuno ha qualche dritta?
Sto usando Glade 3.12.1
Ciao
Sto usando Glade 3.12.1
Ciao
Ubuntu user #35116. Linux user #550996 - Il cervello è come un paracadute, funziona solo se si apre [Einstein]
-
- Scoppiettante Seguace
- Messaggi: 699
- Iscrizione: giovedì 1 marzo 2007, 15:31
- Distribuzione: xubuntu 20.04 LTS x86_64 (l'unica)
Re: Anjuta: come collegare i widget creati con glade?
visto che anche io mi sto cimentando con anjuta-glade provo a buttarla li:
non e' che non avendo associato alcun evento ai bottoni questi vengano visualizzati di default disabilitati?
wally 67
non e' che non avendo associato alcun evento ai bottoni questi vengano visualizzati di default disabilitati?
wally 67
Se io do una moneta a te e tu una a me abbiamo entrambi 1 moneta;
ma se io do una idea a te e tu una a me abbiamo entrambi 2 idee.
ma se io do una idea a te e tu una a me abbiamo entrambi 2 idee.
- Dr_Berta
- Entusiasta Emergente
- Messaggi: 1906
- Iscrizione: domenica 31 luglio 2011, 12:37
- Desktop: Gnome + Cairo Dock
- Distribuzione: Ubuntu 20.04.x x86_64 LTS
- Località: Carpi (MO)
Re: Anjuta: come collegare i widget creati con glade?
Può darsi,
ma dalle guide che ho letto sembra che basti specificare la funzione di callback e, se esiste, anjuta la trova e crea il collegamento.
Mah, sarà, ma io questa funzionalità l'ho vista solo in parte.
Mi spiego: ho specificato la callback in glade e facendo doppio click sul bottone nel glade inspector ho visto che Anjuta ha rilevato questa cosa ed ha creato il riferimento al bottone. Il problema è che, stando alle guide, usando la funzione si dovrebbero creare tutti i collegamenti tra i widget identificati da Anjuta e le relative callback specificate nel file di glade.
E' quest'ultima cosa che non vedo, e quindi il tutto non va.
Ciao
ma dalle guide che ho letto sembra che basti specificare la funzione di callback e, se esiste, anjuta la trova e crea il collegamento.
Mah, sarà, ma io questa funzionalità l'ho vista solo in parte.
Mi spiego: ho specificato la callback in glade e facendo doppio click sul bottone nel glade inspector ho visto che Anjuta ha rilevato questa cosa ed ha creato il riferimento al bottone. Il problema è che, stando alle guide, usando la funzione
Codice: Seleziona tutto
gtk_builder_connect_signals (builder, NULL);
E' quest'ultima cosa che non vedo, e quindi il tutto non va.
Ciao
Ubuntu user #35116. Linux user #550996 - Il cervello è come un paracadute, funziona solo se si apre [Einstein]
-
- Scoppiettante Seguace
- Messaggi: 699
- Iscrizione: giovedì 1 marzo 2007, 15:31
- Distribuzione: xubuntu 20.04 LTS x86_64 (l'unica)
Re: Anjuta: come collegare i widget creati con glade?
mi dispiace, ma al momento non so darti altri suggerimenti, sono ancora troppo principiante :sorry:
wally 67
wally 67
Se io do una moneta a te e tu una a me abbiamo entrambi 1 moneta;
ma se io do una idea a te e tu una a me abbiamo entrambi 2 idee.
ma se io do una idea a te e tu una a me abbiamo entrambi 2 idee.
- Dr_Berta
- Entusiasta Emergente
- Messaggi: 1906
- Iscrizione: domenica 31 luglio 2011, 12:37
- Desktop: Gnome + Cairo Dock
- Distribuzione: Ubuntu 20.04.x x86_64 LTS
- Località: Carpi (MO)
Re: Anjuta: come collegare i widget creati con glade?
Eureka! Ho risolto il problema ed ora i miei widget vengono gestiti correttamente.
Forse non serve, ma ho aggiornato glade alla versione 3.12.1 così riesco ad avere un simulatore della interfaccia.
Il problema dei pulsanti che non erano abilitati era dovuto al fatto che non li avevo resi "sensibili".
Riguardo alla gestione dei segnali, ho scoperto che devo definire i widget e poi richiamarli come gobject castando il risultato come gtk_widget, ad esempio:
Per ogni oggetto che voglio gestire devo fare così, siano essi label, entry, bottoni, ecc
Nella funzione callback poi devo castare l'oggetto da widget al suo tipo reale, ad esempio per leggere una entry che si chiama "dev_type" devo fare:
Facile no? Ci ho messo un pò a capire come girano le cose e le guide e i tutorial non aiutano.
Ciao
Forse non serve, ma ho aggiornato glade alla versione 3.12.1 così riesco ad avere un simulatore della interfaccia.
Il problema dei pulsanti che non erano abilitati era dovuto al fatto che non li avevo resi "sensibili".
Riguardo alla gestione dei segnali, ho scoperto che devo definire i widget e poi richiamarli come gobject castando il risultato come gtk_widget, ad esempio:
Codice: Seleziona tutto
GtkWidget* startButton;
startButton = GTK_WIDGET (gtk_builder_get_object (builder, "startButton"));
Nella funzione callback poi devo castare l'oggetto da widget al suo tipo reale, ad esempio per leggere una entry che si chiama "dev_type" devo fare:
Codice: Seleziona tutto
sprintf(pwr_calc.devType,"%s",gtk_entry_get_text ((GtkEntry*)dev_type));
Ciao
Ubuntu user #35116. Linux user #550996 - Il cervello è come un paracadute, funziona solo se si apre [Einstein]
-
- Scoppiettante Seguace
- Messaggi: 699
- Iscrizione: giovedì 1 marzo 2007, 15:31
- Distribuzione: xubuntu 20.04 LTS x86_64 (l'unica)
Re: [Risolto] Anjuta: come collegare i widget creati con gla
ho contento per te!!!
comunque confermo: spesso i tutorial sono piuttosto nebulosi. ma tu a quali ti sei riferito?
wally 67
comunque confermo: spesso i tutorial sono piuttosto nebulosi. ma tu a quali ti sei riferito?
wally 67
Se io do una moneta a te e tu una a me abbiamo entrambi 1 moneta;
ma se io do una idea a te e tu una a me abbiamo entrambi 2 idee.
ma se io do una idea a te e tu una a me abbiamo entrambi 2 idee.
- Dr_Berta
- Entusiasta Emergente
- Messaggi: 1906
- Iscrizione: domenica 31 luglio 2011, 12:37
- Desktop: Gnome + Cairo Dock
- Distribuzione: Ubuntu 20.04.x x86_64 LTS
- Località: Carpi (MO)
Re: [Risolto] Anjuta: come collegare i widget creati con gla
Ho guardato questi:
http://blog.borovsak.si/
http://www.micahcarrick.com/gtk-glade-tutorial-part-1.html#Manipulating_Widget_Properties
http://www.slideshare.net/delfinostefano/gui-in-gtk-con-glade-anjuta
http://anjuta.sourceforge.net/documents/C/anjuta-tutorial/
Ciao
http://blog.borovsak.si/
http://www.micahcarrick.com/gtk-glade-tutorial-part-1.html#Manipulating_Widget_Properties
http://www.slideshare.net/delfinostefano/gui-in-gtk-con-glade-anjuta
http://anjuta.sourceforge.net/documents/C/anjuta-tutorial/
Ciao
Ubuntu user #35116. Linux user #550996 - Il cervello è come un paracadute, funziona solo se si apre [Einstein]
-
- Scoppiettante Seguace
- Messaggi: 699
- Iscrizione: giovedì 1 marzo 2007, 15:31
- Distribuzione: xubuntu 20.04 LTS x86_64 (l'unica)
Re: [Risolto] Anjuta: come collegare i widget creati con gla
ti ringrazio
wally 67
wally 67
Se io do una moneta a te e tu una a me abbiamo entrambi 1 moneta;
ma se io do una idea a te e tu una a me abbiamo entrambi 2 idee.
ma se io do una idea a te e tu una a me abbiamo entrambi 2 idee.
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 5 ospiti