Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    95

    [C] problema con programma che usa le librerie GTK+

    Ho scritto un semplice programmino, dove premendo un pulsante, mi dovrebbe mostrare una finestra di dialogo.
    Il problema è che quando premo il pulsante ho questo errore:

    Program has been terminated receiving signal 11 (Segmentation fault)
    Press the Enter key to close this terminal ...

    Eco il codice del mio programma:

    codice:
    #include <gtk/gtk.h>
    
    int i=0;
    
    
    void button_on_click(GtkWidget widget, gpointer window)
    {
        i++;
        GtkWidget  *dialog=gtk_message_dialog_new(window,GTK_DIALOG_MODAL,GTK_MESSAGE_INFO,GTK_BUTTONS_OK,"Sono %d volte che clicci!",i);
        gtk_window_set_title(GTK_WINDOW(dialog),"Informazione");
        gtk_dialog_run(GTK_DIALOG(dialog));
    }
    
    
    int main(int argc, char *argv[])
    {
     GtkWidget *button;
    GtkWidget *window;
     gtk_init (&argc, &argv);
    
     //creazione della finestra principale
     window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
     gtk_window_set_default_size (GTK_WINDOW(window), 250, 250);
     gtk_window_set_title (GTK_WINDOW(window), "Ciao Mondo delle Gtk+!");
     gtk_widget_show (window);
    
     //creazione del pulsante
     button=gtk_button_new_with_label("Cliccami");
    
     //aggiungere il pulsante alla finestra e mostrarlo
     gtk_container_add(GTK_CONTAINER(window),button);
     gtk_widget_show(button);
    
     //gestione dei segnali
     g_signal_connect(GTK_OBJECT(window),"delete event",G_CALLBACK(gtk_main_quit),NULL);
     g_signal_connect(GTK_OBJECT(button),"clicked", G_CALLBACK(button_on_click),(gpointer)window);
    
     gtk_main ();
     return 0;
    }

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Se nn ricordo male dovrebbe essere la i++,cmq prova.
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    95
    Originariamente inviato da linoma
    Se nn ricordo male dovrebbe essere la i++,cmq prova.
    Anche se tolgo i++ dalla funzione button_on_click il problema rimane...

  4. #4
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Togli la i e la stringa che passi per la creazione del dialog. Usa i printf.
    Per gli Spartani e Sparta usa spartan Il mio github

  5. #5
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    codice:
    #include <stdlib.h>
    #include <gtk/gtk.h>
    
    int i = 0;
    
    static void helloWorld (GtkWidget *wid, GtkWidget *win)
    {
      GtkWidget *dialog = NULL;
    
      i++;
      dialog = gtk_message_dialog_new (GTK_WINDOW (win), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, "Hello World! %d",i);
      gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);
      gtk_window_set_title (GTK_WINDOW (dialog), "Informazioni");
      gtk_dialog_run (GTK_DIALOG (dialog));
      gtk_widget_destroy (dialog);
    }
    
    int main (int argc, char *argv[])
    {
      GtkWidget *button = NULL;
      GtkWidget *win = NULL;
      GtkWidget *vbox = NULL;
    
      /* Initialize GTK+ */
      g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL);
      gtk_init (&argc, &argv);
      g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, g_log_default_handler, NULL);
    
      /* Create the main window */
      win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
      gtk_container_set_border_width (GTK_CONTAINER (win), 8);
      gtk_window_set_title (GTK_WINDOW (win), "Hello World");
      gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);
      gtk_widget_realize (win);
      g_signal_connect (win, "destroy", gtk_main_quit, NULL);
    
      /* Create a vertical box with buttons */
      vbox = gtk_vbox_new (TRUE, 6);
      gtk_container_add (GTK_CONTAINER (win), vbox);
    
      button = gtk_button_new_from_stock (GTK_STOCK_DIALOG_INFO);
      g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (helloWorld), (gpointer) win);
      gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
    
      button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
      g_signal_connect (button, "clicked", gtk_main_quit, NULL);
      gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
    
      /* Enter the main loop */
      gtk_widget_show_all (win);
      gtk_main ();
      return 0;
    }
    Questo è un esempio funzionante, togli anche gtk_window_set_title(GTK_WINDOW(dialog),"Informazi one");
    Per gli Spartani e Sparta usa spartan Il mio github

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    95
    Grazie, ma mi hai detto troppe cose, quando invece ho scoperto che mi ero soltanto dimenticato di scrivere:

    codice:
    void button_on_click(GtkWidget *widget, gpointer window)
    Invece avevo scritto:

    codice:
    void button_on_click(GtkWidget widget, gpointer window)
    Non avevo messo l'asterisco! Ora funziona, anche lasciando tutto ciò che mi hai consigliato di togliere!
    Grazie comunque e scusami se ti ho fatto perdere tempo!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.