C-GTK-g_应用程序_退出

C-GTK-g_应用程序_退出,c,gtk,gtk3,C,Gtk,Gtk3,我在退出gtk应用程序时遇到问题。g_application_quit的函数调用导致后续错误: GLib-GIO-CRITICAL **: g_application_quit: assertion 'G_IS_APPLICATION (application)' failed 代码段如下所示: g_signal_connect(app_window, "destroy", G_CALLBACK(g_application_quit), app); 我也尝试过这个,但仍然抛出相同的错误: g

我在退出gtk应用程序时遇到问题。g_application_quit的函数调用导致后续错误:

GLib-GIO-CRITICAL **: g_application_quit: assertion 'G_IS_APPLICATION (application)' failed
代码段如下所示:

g_signal_connect(app_window, "destroy", G_CALLBACK(g_application_quit), app);
我也尝试过这个,但仍然抛出相同的错误:

g_signal_connect(app_window, "destroy", G_CALLBACK(g_application_quit), G_APPLICATION(app));
应用程序已初始化为:

GtkApplication *app = gtk_application_new("my.ne.sweeper", G_APPLICATION_FLAGS_NONE);

感谢您的帮助。谢谢。

您不需要将
g_应用程序退出
连接到窗口的
销毁
信号,如果您使用的是
g_应用程序
,它将自动完成

下面是一个极简主义的例子:

#include <gtk/gtk.h>

static void activate (GtkApplication* app, gpointer data) {
  GtkWidget *window;

  window = gtk_application_window_new(app);
  gtk_window_set_default_size(GTK_WINDOW (window), 400, 200);
  gtk_widget_show_all(window);
}

int main (int argc, char **argv) {
  GtkApplication *app;
  int status;

  app = gtk_application_new("your.app.name", G_APPLICATION_FLAGS_NONE);
  g_signal_connect(app, "activate", G_CALLBACK (activate), NULL);
  status = g_application_run(G_APPLICATION(app), argc, argv);
  g_object_unref(app);

  return status;
}
#包括
静态无效激活(GTK应用程序*应用程序、gpointer数据){
GtkWidget*窗口;
窗口=gtk_应用程序_窗口_新(应用程序);
gtk_窗口设置默认大小(gtk_窗口(窗口),400,200);
gtk_小部件_全部显示(窗口);
}
int main(int argc,字符**argv){
GTK应用程序*app;
智力状态;
app=gtk_application_new(“your.app.name”,G_application_FLAGS_NONE);
g_信号连接(应用程序,“激活”,g_回调(激活),空);
状态=g_应用程序运行(g_应用程序(应用程序)、argc、argv);
g_object_unref(应用程序);
返回状态;
}

问题是,我需要退出g_应用程序,这不仅是为了windows销毁,也是为了通过菜单选项退出应用程序。有没有办法用g_application_quit来完成它,或者我应该如何正确地关闭应用程序?ty@Morpheus:从菜单操作处理程序调用
g\u应用程序\u quit
是完全有效的,您不需要将其连接到窗口的
destroy
信号。请参阅from
gtk+
教程。