我正在使用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();
}
但是,我的是按钮不会退出任何内容。有这个原因吗?
答案 0 :(得分:3)
gtk_main_quit()
只留下当前嵌套的主循环。 gtk_dialog_run()
创建了自己的嵌套主循环,因此gtk_main_quit()
只会突破gtk_dialog_run()
,而不是gtk_main()
。
答案 1 :(得分:0)
当用户尝试关闭窗口时,使用主窗口的delete-event
来调用弹出窗口。然后在on_delete_event
回调中,使用gtk_dialog_run返回的值返回正确的值。您的on_delete_event
回调返回值控制是否传播事件并发送destroy
信号。从gtk_main_quit
回调中致电on_destroy
。将on_destroy
回调邮件连接到主窗口的destroy
信号。 Voilà!
答案 2 :(得分:0)
由于你不需要主循环,你应该测试返回的运行:
/* pseudo code*/
if (gtk_dialog_run(dlg) == RESPONSE_YES) {
gtk_widget_destroy (dlg); # destroys dialog and exits
}