C++ g_signal_connect 传递数据

C++ g_signal_connect Passing data

我正在尝试连接一个对象以销毁一个小部件,但没有任何反应,而且出现错误

调用如下:

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 还是有点陌生​​,所以我确定出了什么问题..

您不能将 class 方法传递给 g_signal_connect(),因为它们具有成为 this 的隐式第一个参数。您必须使用常规函数并找到一种方法来传递 bBuzz 变量和 data 参数中的 this 指针。

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