كيفية تجنب فشل التأكيد عند تحميل GTK حول مربع الحوار؟
-
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. كيف يمكنني إصلاح ذلك؟
المحلول
استخدم gtk_widget_hide () بدلاً من gtk_widget_destroy ().
لا تنتمي إلى StackOverflow