我有一个用C/gtk+(v 2.x)编写的GUI应用程序。如果我单击主窗口的菜单项,将调用以下函数并显示一个对话框。
dialog_ui * create_dialog ()
{
dlg = malloc (sizeof(dialog_ui));
dlg->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
...
gtk_widget_show_all (dlg->window);
return dlg;
}
这是dialog_ui
结构
typedef struct _dialog_ui
{
GtkWidget * window;
...
} dialog_ui;
这是头文件中的dlg
变量。
dialog_ui * dlg;
我的问题是,我在create_dialog
函数中调用malloc
。但是我不知道从哪里可以调用free
,因为GUI是事件驱动的。我想过destroy-event
,但我想知道正确的方法。任何想法..?
通常,您有一个模态对话框,您可以使用gtk_dialog_run()
而不是gtk_widget_show()
来调用该对话框。gtk_dialog_run()
函数在用户关闭对话框之前不会返回,返回一个响应,您可以使用该响应来确定他们是否单击了"是"、"确定"、"取消"、"关闭"等。您可以在 GtkDialog API 文档中看到一个示例。
由于您只是显示自己的GtkWindow
,因此您的主应用程序代码可以连接到GtkWindow
的"destroy"
信号,并释放引用该小部件的结构。
作为旁注,与其使用 malloc
,不如看一下 GLib
提供的一些内存分配功能。
当您不再需要该对话框并且不再访问它时(例如,当它关闭时),您可以释放分配的内存。在销毁事件中执行此操作是一个好地方。