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;

私の問題は、関数でを呼び出していることmallocですcreate_dialogfreeしかし、GUIはイベント駆動型であるため、どこから呼び出すことができるかわかりません。私は考えましdestroy-eventたが、これを行う正しい方法を知りたいです。何か案は.. ?

4

2 に答える 2

1

多くの場合、gtk_dialog_run()ではなくを使用して呼び出すモーダルダイアログがありますgtk_widget_show()。このgtk_dialog_run()関数は、ユーザーがダイアログを閉じて、[はい]、[OK]、[キャンセル]、[閉じる]などをクリックしたかどうかを判断するために使用できる応答を返すまで戻りません。その例は、GtkDialogAPIドキュメントにあります。

自分のを表示しているだけなのでGtkWindow、メインのアプリケーションコードはの"destroy"シグナルに接続し、GtkWindowそこでウィジェットを参照する構造体を解放できます。

補足として、を使用するのではなく、によって提供されるメモリ割り当て関数mallocのいくつかを確認することをお勧めします。GLib

于 2012-06-14T22:10:40.843 に答える
0

ダイアログが不要になり、ダイアログにアクセスできなくなった場合(たとえば、ダイアログが閉じている場合)、割り当てられたメモリを解放できます。破壊イベントでそれを行うのは良い場所です。

于 2012-06-14T08:17:31.140 に答える