2017-03-26 26 views
1

我在退出gtk應用程序時遇到問題。 g_application_quit結果在隨後的誤差函數調用:C - 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); 

任何幫助表示讚賞。謝謝。

回答

2

如果您使用的是G_APPLICATION,則不需要將g_application_quit連接到窗口的destroy信號,它會自動完成。

這裏去簡約的例子:

#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; 
} 
+0

的事情是,我需要的g_application_quit不僅對窗戶破壞,而且通過菜單選項退出應用程序。有沒有辦法用g_application_quit來做到這一點,或者我該如何正確關閉應用程序? ty – Morpheus

+0

@Morpheus:從菜單動作處理程序中調用'g_application_quit'完全有效,你不需要將它連接到窗口的'destroy'信號。請參閱'gtk +'教程中的[示例](https://git.gnome.org/browse/gtk+/tree/examples/application4/exampleapp.c)。 –