C++ 如何正确关闭在Glade中创建的对话框?
我用沼泽地做GUI。我做了一个主窗口和一个对话框。从主窗口中的按钮调用该对话框。问题是,当我关闭“删除事件”对话框时,不可能用主窗口的相同按钮单击再次调用它。我可以用GTK_widget_hide_on_delete隐藏对话框,但我不需要这个选项。我需要关闭对话框并释放它所占用的内存 那么,销毁对话框并用相同的按钮单击再次调用它的正确方法是什么呢 我用c++实现的方式:C++ 如何正确关闭在Glade中创建的对话框?,c++,gtk,gtk3,glade,C++,Gtk,Gtk3,Glade,我用沼泽地做GUI。我做了一个主窗口和一个对话框。从主窗口中的按钮调用该对话框。问题是,当我关闭“删除事件”对话框时,不可能用主窗口的相同按钮单击再次调用它。我可以用GTK_widget_hide_on_delete隐藏对话框,但我不需要这个选项。我需要关闭对话框并释放它所占用的内存 那么,销毁对话框并用相同的按钮单击再次调用它的正确方法是什么呢 我用c++实现的方式: #include <gtk/gtk.h> #include <stdlib.h> GtkBuilde
#include <gtk/gtk.h>
#include <stdlib.h>
GtkBuilder *gtkBuilder;
GtkWidget *main_window;
GtkWidget *grid_dialog;
GtkToolButton *grid_toolbutton;
void grid_any_clicked(GtkWidget *widget,
gpointer user_data)
{
GtkWidget *window = (GtkWidget *) user_data;
gtk_widget_show_all(window);
}
int main(int argc, char *argv[])
{
gtk_init(&argc, &argv);
gtkBuilder = gtk_builder_new();
// GUI
gtk_builder_add_from_file(gtkBuilder, "../GUI.glade", NULL);
// Widgets
main_window = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "main_window"));
grid_dialog = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "grid_dialog"));
grid_toolbutton = GTK_TOOL_BUTTON(gtk_builder_get_object(gtkBuilder, "grid_toolbutton"));
// Events
g_signal_connect(grid_toolbutton, "clicked", G_CALLBACK(grid_any_clicked), grid_dialog);
gtk_builder_connect_signals(gtkBuilder, NULL);
// Finalizing
g_object_unref(G_OBJECT(gtkBuilder));
gtk_widget_show_all(main_window);
gtk_main();
return 0;
}
delete事件适用于您想要截获用户单击窗口关闭按钮的事实,并且您想要对此操作作出反应的情况。想想那些在关闭编辑器之前询问您是否要保存包含未保存更改的文档的编辑器
您需要的是从GtkWidget继承的销毁信号
只是不要连接到delete事件,因为调用destroy是默认行为,或者从delete事件返回FALSE,这样关闭事件就会传播并点击destroy