Wie kann man beim Laden von GTK über das Dialogfeld einen Behauptungsausfall vermeiden?
-
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?
Lösung
Verwenden Sie gtk_widget_hide () anstelle von gtk_widget_destroy ().
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow