Glade를 사용하여 GUI를 만듭니다. 나는 메인 창과 대화를했다. 이 대화 상자는 기본 창에있는 버튼에서 호출됩니다. 문제는 대화 상자를 닫을 때 (삭제 이벤트) 대화 상자를 클릭 할 때 주 창과 동일한 단추를 클릭하여 다시 호출 할 수 없다는 것입니다. gtk_widget_hide_on_delete
으로 대화 상자를 숨길 수 있지만이 옵션은 내가 원하는 것이 아닙니다. 대화 상자를 닫고 필요한 메모리를 확보해야합니다.Glade에서 만든 대화 상자를 올바르게 종료하는 방법은 무엇입니까?
그럼 대화 상자를 파괴하고 같은 버튼을 클릭하여 다시 호출하는 적절한 방법은 무엇입니까?
나 C++로 구현 한 방법 :
#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;
}