gtk信号和使用它们的退出程序

gtk信号和使用它们的退出程序,gtk,Gtk,我如何使用gtk信号退出一个窗口,然后一条diolog消息显示您确定的问题?点击Yes按钮关闭所有窗口? 这是我的代码: void show_queExit(GtkWidget *widget, gpointer window) { GtkWidget *dialog; dialog = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT,

我如何使用gtk信号退出一个窗口,然后一条diolog消息显示您确定的问题?点击Yes按钮关闭所有窗口? 这是我的代码:

void show_queExit(GtkWidget *widget, gpointer window)
{
    GtkWidget *dialog;
    dialog = gtk_message_dialog_new(GTK_WINDOW(window),
            GTK_DIALOG_DESTROY_WITH_PARENT,
            GTK_MESSAGE_QUESTION,
            GTK_BUTTONS_YES_NO,
            "Are you sure to exit?");
    gtk_window_set_title(GTK_WINDOW(dialog), "Exit");
    gint result = gtk_dialog_run (GTK_DIALOG (dialog));

    if (result==GTK_RESPONSE_YES)
    {
        g_signal_connect(G_OBJECT(window), "destroy",G_CALLBACK(gtk_main_quit),NULL);
        gtk_widget_destroy (dialog);
        printf("\n***\n");
    }
    else
        gtk_widget_destroy (dialog);
}
这是我的主要职责: int main(int argc,字符**argv) {

像这样的事情:

static gboolean on_delete_event (GtkWidget *window,
                                 GdkEvent  *event,
                                 gpointer   data)
{
    GtkWidget *dialog;
    int answer;

    dialog = gtk_message_dialog_new (GTK_WINDOW(window),
                                     GTK_DIALOG_DESTROY_WITH_PARENT,
                                     GTK_MESSAGE_QUESTION,
                                     GTK_BUTTONS_YES_NO,
                                     "Are you sure to exit?");
    gtk_window_set_title (GTK_WINDOW(dialog), "Exit");

    answer = gtk_dialog_run (GTK_DIALOG (dialog));
    gtk_widget_destroy (dialog);

    if (answer == GTK_RESPONSE_YES) {
        g_print ("Yes\n");
        return FALSE;
    } else {
        g_print ("No\n");
        return TRUE;
    }

}
然后在main()或某些初始化函数中:

g_signal_connect (window, "delete-event",
                  G_CALLBACK (on_delete_event), NULL);
有几种方法可以处理应用程序退出——您可以从上面的函数调用gtk_main_quit(),也可以执行我认为您最初尝试过的操作:让gtk在用户单击“是”时销毁窗口,并从销毁信号处理程序调用gtk_main_quit()

在任何情况下,如果希望弹出对话框,将退出图标连接到gtk_main_quit()都是错误的:您应该将信号连接到您编写的调用gtk_window_close()的函数


现在还不完全清楚您想要什么,但我猜您希望添加一个处理程序以“删除事件”顶级窗口的信号,并显示该处理程序的对话框。对不起,因为我的英语不好。是的,我想这样做。我该怎么办?
g_signal_connect (window, "delete-event",
                  G_CALLBACK (on_delete_event), NULL);
g_signal_connect (exitIcon, "clicked",
                  G_CALLBACK (on_exit_clicked), window);