You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GTK对话框点击退出按钮关闭问题求助

GTK对话框点击退出按钮关闭问题求助

嘿,我看你在折腾GTK里点击退出按钮只关闭当前窗口、而不是整个程序的问题,这确实是新手容易踩的小坑,我来给你支支招~

你之前用gtk_main_quit()会关掉整个程序,这很正常——因为这个函数是用来终止整个GTK主循环的,一旦主循环停了,整个程序就退出了。而你想要的只是关闭当前弹出的那个对话框窗口,这时候gtk_window_close()才是正确的选择,但你之前的写法参数不对,所以没起作用。

问题出在你的回调函数拿不到要关闭的窗口指针。咱们一步步改:

第一步:给回调函数传递窗口对象

在你创建退出按钮的地方(应该是在on_network_and_computer_clicked()里创建按钮的时候),把当前的窗口指针作为用户数据传给回调函数。比如:

// 假设你在on_network_and_computer_clicked里创建退出按钮
GtkWidget *exit_btn = gtk_button_new_with_label("Exit");
// 把window作为用户数据传给on_linux_exit_clicked
g_signal_connect(exit_btn, "clicked", G_CALLBACK(on_linux_exit_clicked), window);
// 别忘了把按钮加到vbox里
gtk_box_pack_start(GTK_BOX(vbox), exit_btn, TRUE, TRUE, 0);

第二步:修改回调函数接收并使用窗口指针

调整on_linux_exit_clicked()的参数,接收传递过来的窗口数据,然后调用gtk_window_close():

void on_linux_exit_clicked(GtkWidget *widget, gpointer user_data)
{
    // 把user_data转换成GtkWindow类型,GTK_WINDOW宏会做类型检查
    GtkWindow *target_window = GTK_WINDOW(user_data);
    // 关闭指定窗口
    gtk_window_close(target_window);
}

这样点击按钮的时候,就只会关闭你创建的那个“Network and Computer Settings”窗口,而不会影响整个程序的运行啦。

给你再啰嗦两句:

  • gtk_window_close()的作用是发送一个“关闭”信号给指定窗口,和用户点击窗口右上角叉叉的效果一样,会触发窗口的关闭流程(比如如果窗口有destroy信号的回调,也会执行)。
  • 一定要确保传递的user_data确实是你要关闭的那个窗口指针,类型转换的时候用GTK的宏(比如GTK_WINDOW),避免类型错误导致崩溃。

备注:内容来源于stack exchange,提问作者voidprg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 09:33:14