GTK 退出对话框



我正在使用 C 和 GTK 创建一个对话框来确认退出。

我的主窗口有一个退出按钮 -> 带有"是"和"否
"的对话框是的,应该完全
退出该程序否 应关闭对话框。

我试过了

dialog = gtk_dialog_new();
...
button = gtk_button_new_with_label("Yes");
g_signal_connect(button, "clicked", G_CALLBACK(close), NULL);

我的回调函数关闭是

static void close(GtkWidget* widget, gpointer data)
{
gtk_main_quit();
}

但是,我的"是"按钮不会退出任何内容。这有什么原因吗?

gtk_main_quit()只留下当前嵌套的主循环。 gtk_dialog_run()创建自己的嵌套主循环,因此您的gtk_main_quit()只会脱离gtk_dialog_run(),而不是gtk_main()

当用户尝试关闭窗口时,使用主窗口的delete-event调用弹出窗口。然后在on_delete_event回调中,使用 gtk_dialog_run 返回的值返回正确的值。您的on_delete_event回调返回值控制事件是否传播并发送destroy信号。从on_destroy回拨中呼叫gtk_main_quit。将on_destroy回调连接到主窗口的destroy信号。瞧!

由于您不需要主循环,因此您应该测试运行返回的内容:

/* pseudo code*/
if (gtk_dialog_run(dlg) == RESPONSE_YES) {
 gtk_widget_destroy (dlg); # destroys dialog and exits
}

最新更新