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
相关产品推荐
相关产品推荐

