gpt4 book ai didi

c++ - 如何正确关闭在 Glade 中创建的对话框?

转载 作者:行者123 更新时间:2023-11-28 04:59:00 30 4
gpt4 key购买 nike

我使用 Glade 制作 GUI。我做了一个主窗口和一个对话框。从放置在主窗口中的按钮调用该对话框。问题是,当我关闭(删除事件)对话框时,无法通过单击主窗口的相同按钮再次调用它。我可以使用gtk_widget_hide_on_delete 隐藏对话框,但是这个选项不是我需要的。我需要关闭对话框并释放它占用的内存。

那么销毁对话框并通过单击相同的按钮再次调用它的正确方法是什么?

我在 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;
}

最佳答案

delete-event 适用于当您想要拦截用户单击窗口关闭按钮这一事实并且您想要对此操作使用react时。想想编辑器在关闭编辑器之前询问您是否要保存具有未保存更改的文档。

你想要的是 destroy 信号,继承自 GtkWidget。

只是不要连接到 delete-event,因为调用 destroy 是默认行为,或者从 delete-event 返回 FALSE 所以关闭事件传播并命中 destroy

关于c++ - 如何正确关闭在 Glade 中创建的对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46519999/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com