PDA

View Full Version : [C con Gtk+2] problemi con le gtk...


lorenzo_ktm
27-06-2008, 18:02
il programma è il seguente:


#include<gtk/gtk.h>
#include<stdio.h>



static void enter_callback( GtkWidget *widget,
GtkWidget *entry )
{/* funzione che si occupa dell'input */
const gchar *entry_text;
entry_text = gtk_entry_get_text (GTK_ENTRY (entry));

}

/* funzione eseguita al momento del click sul pulsante */
static void funzione ( GtkWidget *widget, GtkWidget *entry
/*gpointer data*/ )
{
const gchar *testo;
testo = gtk_entry_get_text (GTK_ENTRY (entry));
printf ("Testo: %s\n", testo);

}

int main(int argc,
char *argv[] )
{/* dichiarazione delle variabili widget */
GtkWidget *window;
GtkWidget *button;
GtkWidget *entry;
GtkWidget *box;

/* funzione gtk obbilgatoria */
gtk_init (&argc, &argv);

/* crea la finestra */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
/* settaggio di dimensioni e titolo della finestra*/
gtk_widget_set_size_request (GTK_WIDGET (window), 200, 100);
gtk_window_set_title (GTK_WINDOW (window), "esempio");

/* separatore verticale. la finestra può contenere un solo widget
per questo è necessario inserire dei "box" per aumentarne la capienza */
box = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (window), box);
gtk_widget_show (box);


/* text di ingresso (lunghezza max = 50 caratteri) */
entry = gtk_entry_new ();
gtk_entry_set_max_length (GTK_ENTRY (entry), 50);
g_signal_connect (G_OBJECT (entry), "activate",
G_CALLBACK (enter_callback),
(gpointer) entry);
gtk_widget_show (entry);

/* crea il pulsante con etichetta */
button = gtk_button_new_with_label ("clicca qui");
/* evento pressione del pulsante */
g_signal_connect (G_OBJECT (button), "button_press_event",
G_CALLBACK (funzione), (gpointer) entry);

gtk_container_add (GTK_CONTAINER (box), entry);
/* inserisce il pulsante nella finestra */
gtk_container_add (GTK_CONTAINER (box), button);

/* mostra gli widget */

gtk_widget_show (button);
gtk_widget_show (window);

/* funzione obbligatoria */
gtk_main();
return 0;
}



il programma è molto semplice.
visualizza una finestra con una text e un bottone.
quando il pulsante viene premuto dovrebbe scrivere a video quello che è scritto nella text.
Quando lo eseguo però al momento del click si chiude la finestra e stampa a video "Segmentation fault".

Qualcuno mi sa dire dov'è l'errore?

k0nt3
27-06-2008, 18:38
puoi inserire il codice nei tag CODE? così si capisce poco
sembrerebbe che usi un puntatore a NULL

lorenzo_ktm
27-06-2008, 18:47
ho aggiunto il tag code e ingrassettato le funzioni.
è più chiaro adesso?

k0nt3
27-06-2008, 18:49
ho aggiunto il tag code e ingrassettato le funzioni.
è più chiaro adesso?

sisi perfetto solo che io non ci capisco nulla di GTK :stordita: :p

DanieleC88
27-06-2008, 18:49
Che io sappia, le funzioni di callback di GTK+ prendono il GtkWidget* che ha generato l'evento come primo parametro, e un gpointer di dati opzionali come secondo parametro. Ergo: usa il primo parametro, non il secondo, dovrebbe funzionare. ;)