Как получить сбой утверждения при загрузке GTK о диалоговом окне?

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

  •  29-09-2019
  •  | 
  •  

Вопрос

Я запрограммировал программный графический интерфейс, используя Glade и GTK. Главное окно имеет О кнопка. Когда я нажимаю кнопку в первый раз, Gtkaboutdialogbox Бежит отлично. Область действия правильно связана с событиями. Но когда я закрываю его и пытается снова открыть диалог оне выпирая из главного окна) ничего не появляется. И дополнительно система вызывает

(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

к оболочке. Что может быть не так с этим кодом?

//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 );
}

Я использую gtkbuilder. Как я могу это исправить?

Это было полезно?

Решение

Use gtk_widget_hide() instead of gtk_widget_destroy().

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top