C ++ g_signal_connect传递数据

时间:2016-07-12 01:42:41

标签: c++ gtk

我试图连接一个对象来销毁一个小部件,但什么也没发生,我收到了错误

这是电话:

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还有点新意,所以我确定有些不对劲。

1 个答案:

答案 0 :(得分:3)

您无法将类方法传递给g_signal_connect(),因为这些方法的隐含第一个参数变为this。您必须使用常规函数并找到一种方法来传递bBuzz参数中的this变量和data指针。

(或者你可以使用gtkmm,它已经完全针对C ++进行了优化。)