关闭后显示 GtkApplicationWindow
Show GtkApplicationWindow after close
对于 C 和 Gtk+,我完全是个新手。
我正在尝试创建一个与主应用程序的接口 window。这个主 window 有一个菜单,它打开第二个 window(GtkApplictionWindow 类型)。
我的问题是,一旦我关闭第二个 window(顶部有 x),我就无法再次打开第二个 window。
我得到一个错误:
(api:2807): Gtk-CRITICAL **: gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed
我已经尝试将函数附加到 destroy
和 hide
信号,并且在我的代码中我已经尝试了 gtk_widget_destroy(window_connections)
和 gtk_widget_hide(window_connections)
。
我的界面是在 Glade 中创建的。
这是我当前的代码:
#include <gtk/gtk.h>
#include <stdio.h>
GtkWidget *window_connections;
int main(int argc, char *argv[]) {
GtkBuilder *builder;
GtkWidget *window;
GtkWidget *statusbar;
gtk_init(&argc, &argv);
builder = gtk_builder_new();
gtk_builder_add_from_file(builder, "glade/window_main.glade", NULL);
window = GTK_WIDGET(gtk_builder_get_object(builder, "window_main"));
gtk_builder_connect_signals(builder, NULL);
window_connections = GTK_WIDGET(gtk_builder_get_object(builder, "window_connections"));
statusbar = GTK_WIDGET(gtk_builder_get_object(builder, "statusbar"));
gtk_statusbar_push(GTK_STATUSBAR(statusbar), 1, "Hello, World!");
g_object_unref(builder);
gtk_widget_show(window);
gtk_main();
return 0;
}
// called when window is closed
void on_window_main_destroy() {
gtk_main_quit();
}
void window_open_connections() {
gtk_widget_show(window_connections);
}
void window_close_connections() {
gtk_widget_hide(window_connections);
}
void window_hide_test() {
printf("hide\n");
}
帮忙?
如果你用"X"关闭一个Window,它不仅会被隐藏,而且会在之后被销毁。
显然,您以后不能重用该小部件。您需要重新创建它。
这就是 gtk_widget_hide_on_delete()
派上用场的地方。
您可以直接将它连接到 "delete-event"
信号,或者您可以从该信号的处理程序中调用它。
然后小部件只是隐藏但稍后可以再次显示。
对于 C 和 Gtk+,我完全是个新手。
我正在尝试创建一个与主应用程序的接口 window。这个主 window 有一个菜单,它打开第二个 window(GtkApplictionWindow 类型)。
我的问题是,一旦我关闭第二个 window(顶部有 x),我就无法再次打开第二个 window。
我得到一个错误:
(api:2807): Gtk-CRITICAL **: gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed
我已经尝试将函数附加到 destroy
和 hide
信号,并且在我的代码中我已经尝试了 gtk_widget_destroy(window_connections)
和 gtk_widget_hide(window_connections)
。
我的界面是在 Glade 中创建的。
这是我当前的代码:
#include <gtk/gtk.h>
#include <stdio.h>
GtkWidget *window_connections;
int main(int argc, char *argv[]) {
GtkBuilder *builder;
GtkWidget *window;
GtkWidget *statusbar;
gtk_init(&argc, &argv);
builder = gtk_builder_new();
gtk_builder_add_from_file(builder, "glade/window_main.glade", NULL);
window = GTK_WIDGET(gtk_builder_get_object(builder, "window_main"));
gtk_builder_connect_signals(builder, NULL);
window_connections = GTK_WIDGET(gtk_builder_get_object(builder, "window_connections"));
statusbar = GTK_WIDGET(gtk_builder_get_object(builder, "statusbar"));
gtk_statusbar_push(GTK_STATUSBAR(statusbar), 1, "Hello, World!");
g_object_unref(builder);
gtk_widget_show(window);
gtk_main();
return 0;
}
// called when window is closed
void on_window_main_destroy() {
gtk_main_quit();
}
void window_open_connections() {
gtk_widget_show(window_connections);
}
void window_close_connections() {
gtk_widget_hide(window_connections);
}
void window_hide_test() {
printf("hide\n");
}
帮忙?
如果你用"X"关闭一个Window,它不仅会被隐藏,而且会在之后被销毁。 显然,您以后不能重用该小部件。您需要重新创建它。
这就是 gtk_widget_hide_on_delete()
派上用场的地方。
您可以直接将它连接到 "delete-event"
信号,或者您可以从该信号的处理程序中调用它。
然后小部件只是隐藏但稍后可以再次显示。