C++ GyStalalSub连接传递数据
我试图连接一个对象来销毁一个小部件,但什么也没发生,我得到了一个错误 这是电话:C++ GyStalalSub连接传递数据,c++,gtk,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_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还是有点陌生,所以我肯定出了什么问题。您不能将类方法传递给g_signal_connect,因为它们有一个隐式的第一个参数,成为这个参数。您必须使用常规函数,并找到一种方法在数据参数中同时传递bBuzz变量和this指针
可选地,可以使用GTKMM,它已经完全优化为C++。
< P>不能将类方法传递给GySealAlxLink,因为这些参数有一个隐式的第一个参数。您必须使用常规函数,并找到一种方法在数据参数中同时传递bBuzz变量和this指针可选的,可以使用GTKMM,它已经完全优化了C++。我甚至不知道gtkmm。谢谢,一个upvoteI也有同样的问题,但是对于实现信号,代码是g_signal\u connectthis,realize,g_CALLBACKMainWindow::WindowRealize,NULL;。为什么会出现同样的警告?这是一样的:如果MainWindow::WindowRealize是一个类方法,它有一个隐式的first this参数,因此不能作为信号处理程序工作。如果gtkmm是不可能的,您可以改用静态方法,将其作为数据传递,并在内部回溯。在您的特定情况下,这是一个选项,因为您当前正在为数据传递NULL。如果OP想要这样做,他们需要让他们的数据成为该类的成员。你的答案非常有用。我甚至不知道gtkmm。谢谢,一个upvoteI也有同样的问题,但是对于实现信号,代码是g_signal\u connectthis,realize,g_CALLBACKMainWindow::WindowRealize,NULL;。为什么会出现同样的警告?这是一样的:如果MainWindow::WindowRealize是一个类方法,它有一个隐式的first this参数,因此不能作为信号处理程序工作。如果gtkmm是不可能的,您可以改用静态方法,将其作为数据传递,并在内部回溯。在您的特定情况下,这是一个选项,因为您当前正在为数据传递NULL。如果OP想要这样做,他们就需要将他们的数据作为类的成员。