0

我有一个用 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;

我的问题是,我malloccreate_dialog函数中调用。但我不知道我可以从哪里调用free,因为 GUI 是事件驱动的。我想过destroy-event,但我想知道这样做的正确方法。有任何想法吗.. ?

4

2 回答 2

1

通常,您有一个模态对话框,您使用gtk_dialog_run()而不是gtk_widget_show(). 在用户关闭对话框之前,该gtk_dialog_run()函数不会返回,返回一个响应,您可以使用该响应来确定他们是否单击了是、确定、取消、关闭等。您可以在GtkDialog API 文档中看到一个示例。

由于您只是展示自己的GtkWindow,因此您的主应用程序代码可以连接到 的"destroy"信号GtkWindow并释放引用该小部件的结构。

作为旁注,malloc您可能希望查看由 提供的一些内存分配功能,而不是使用GLib

于 2012-06-14T22:10:40.843 回答
0

当您不再需要该对话框并且不再访问它时(例如当它关闭时),您可以释放分配的内存。在销毁事件中这样做是一个好地方。

于 2012-06-14T08:17:31.140 回答