2016-07-12 122 views
0

我試圖連接的目的是摧毀一個小部件,但什麼也沒發生,而且我得到一個錯誤C++的g_signal_connect傳遞數據

這裏的電話:

g_signal_connect(bKill, "clicked", G_CALLBACK(AppWindow::kill), (gpointer *)bBuzz); 

而且方法:

void AppWindow::kill(GtkWidget* widget, gpointer data) 
{ 
    gtk_widget_destroy(GTK_WIDGET(data)); 
} 

但是,什麼都沒有發生。就好像該方法甚至沒有被調用一樣。使用g_print來檢查它是否被調用也不起作用。

這裏的錯誤,我得到:

(kpf:15885): GLib-GObject-WARNING **: invalid (NULL) pointer instance 

(kpf:15885): GLib-GObject-CRITICAL **: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed 

我缺少的東西?或者我真的把這個代碼弄糟了嗎?我對GTK還是有點新東西,所以我敢肯定有什麼不對。

回答

3

你不能傳遞一個類方法到g_signal_connect(),因爲那些隱式的第一個參數變成了this。您必須使用常規函數並找到一種方法來通過data參數中的bBuzz變量和this指針。

(或者,您可以使用gtkmm,它已經完全針對C++進行了優化。)

+0

您的答案不能更有幫助。我甚至不知道gtkmm。謝謝,並得到讚揚 – Pazuzu156