我正在使用 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
}