我试图连接一个对象来销毁一个小部件,但什么也没发生,我收到了错误
这是电话:
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还有点新意,所以我确定有些不对劲。
答案 0 :(得分:3)
您无法将类方法传递给g_signal_connect()
,因为这些方法的隐含第一个参数变为this
。您必须使用常规函数并找到一种方法来传递bBuzz
参数中的this
变量和data
指针。
(或者你可以使用gtkmm,它已经完全针对C ++进行了优化。)