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++ 进行了全面优化。)
我正在尝试连接一个对象以销毁一个小部件,但没有任何反应,而且出现错误
调用如下:
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++ 进行了全面优化。)