Test zu images auf Buttons. GTK+



  • Hallo..
    ich weiß nicht woran es liegt dass folgender Quelltext nicht kompilierbar ist...

    #include <gtk/gtk.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <gtk/gtkwidget.h>
    
    void delete_event(GtkWidget *widget, GdkEvent event, gpointer data)
    {
     gtk_main_quit();
    }
    
    int main(int argc, char **argv)
    {
    	gtk_init(&argc, &argv);
    
    	GtkWidget *button1;
    	GtkWidget *button2;
    	GtkWidget *button3;
    	GtkWidget *window;
    	GtkWidget *image;
    	GtkWidget *box;
    
    	image = gtk_image_new_from_file("/home/schuller/workspace/wave.gif");
    	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    
    	button1 = gtk_button_new_with_label("O");
    	button2 = gtk_button_new_with_label("O");
    	button3 = gtk_button_new_with_label("O");
    
    	/*Bilder zuweisen*/
    	gtk_button_set_image(button1, image);
    	gtk_button_set_image(button2, image);
    	gtk_button_set_image(button3, image);
    
    	gtk_box_pack_start(GTK_BOX(box), button1, FALSE, FALSE, 0);
    	gtk_box_pack_start(GTK_BOX(box), button2, FALSE, FALSE, 0);
    	gtk_box_pack_start(GTK_BOX(box), button3, FALSE, FALSE, 0);
    
    	gtk_container_add(GTK_CONTAINER(window),box);
    
    	gtk_widget_show_all(window);
    
    	gtk_main();
    
    	return(0);
    }
    

    //UPDATE
    habe ein paar Fehler gefunden 😞

    XXXXXX@XXXXXX:~> ./Schiffeversenken/button-image/Debug/button-image
    Speicherzugriffsfehler
    

    Des weiteren, weiß ich auch hier nicht weiter...
    --> http://www.c-plusplus.net/forum/viewtopic-var-t-is-179762.html



  • Dann ist es ja doch kompilierbar?! Woran das jetzt im Moment liegt, kann ich dir grad ohne Compiler nicht sagen.
    Sonst geh mal mit'm Debugger drüber, dann findest du immerhin schon mal raus, wo genau der Segfault auftritt.



  • Einfach mal debuggen 😉
    In Zeile 35 benutzt du box obwohl es noch gar nicht initialisiert ist, z.B. so:

    GtkWidget *box = gtk_vbox_new(FALSE, 0);
    


  • Öhm

    soweit ich sehe ist die doch initialisiert?! O_o

    .
    .
    .
        GtkWidget *box;
    .
    .
    .
        gtk_box_pack_start(GTK_BOX(box), button1, FALSE, FALSE, 0);
        gtk_box_pack_start(GTK_BOX(box), button2, FALSE, FALSE, 0);
        gtk_box_pack_start(GTK_BOX(box), button3, FALSE, FALSE, 0);
    .
    .
    

    Oder ist das falsch?



  • Das ist falsch. joomoo hat schon recht, mit GtkWidget *box wird nur ein Zeiger auf ein GtkWidget angelegt. Das eigentliche GtkWidget existiert noch nicht und muss erst mittels gtk_vbox_new(...) erstellt werden.


Anmelden zum Antworten