Wie kann man beim Laden von GTK über das Dialogfeld einen Behauptungsausfall vermeiden?

StackOverflow https://stackoverflow.com/questions/4321875

  •  29-09-2019
  •  | 
  •  

Frage

Ich habe eine Software -GUI mit Glade und GTK programmiert. Das Hauptfenster hat ein Um Taste. Wenn ich zum ersten Mal auf die Schaltfläche klicke, die Gtkaboutdialogbox läuft perfekt. Der Aktionsbereich ist korrekt an die Ereignisse gebunden. Aber wenn ich es schließe und erneut versucht, den About -Dialog zu öffnen (Ohne aus dem Hauptfenster zu beenden), nichts kommt auf. Und zusätzlich tummelt sich das System

(tut:5424): GLib-GObject-WARNING **: invalid unclassed pointer in cast to `GtkDialog'
(tut:5424): Gtk-CRITICAL **: IA__gtk_dialog_run: assertion `GTK_IS_DIALOG (dialog)' failed
(tut:5424): GLib-GObject-WARNING **: invalid unclassed pointer in cast to `GtkWidget'
(tut:5424): Gtk-CRITICAL **: IA__gtk_widget_destroy: assertion `GTK_IS_WIDGET (widget)' failed

zur Hülle. Was könnte mit diesem Code falsch sein?

//tut.c
//gcc -o tut tut.c $(pkg-config --cflags --libs gtk+-2.0 gmodule-2.0)
#include <gtk/gtk.h>

GtkBuilder *builder;
GtkWidget  *window,*window_cnb;
GtkAboutDialog *abtwindow;
GtkLabel *label;
GError     *error = NULL;

void on_about_clicked() {
    gtk_dialog_run( GTK_DIALOG(abtwindow) );
    gtk_widget_destroy( GTK_WIDGET(abtwindow) );
}

int main( int    argc,char **argv )  { 
    gtk_init( &argc, &argv );
    builder = gtk_builder_new();
    if( ! gtk_builder_add_from_file( builder, "my.glade", &error ) )  {
        g_warning( "%s", error->message );
        g_free( error );
        return( 1 );
    }
    window = GTK_WIDGET( gtk_builder_get_object( builder, "window1" ) );
    abtwindow = GTK_ABOUT_DIALOG( gtk_builder_get_object( builder, "aboutdialog1" ) );
    label = GTK_LABEL( gtk_builder_get_object( builder, "label16" ) );

    gtk_builder_connect_signals( builder, NULL );
    g_object_unref( G_OBJECT( builder ) );
    gtk_widget_show( window );
    gtk_main(); 
    return( 0 );
}

Ich benutze Gtkbuilder. Wie kann ich es reparieren?

War es hilfreich?

Lösung

Verwenden Sie gtk_widget_hide () anstelle von gtk_widget_destroy ().

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top