C++ g_signal_connect 传递数据

C++ g_signal_connect Passing data

本文关键字:数据 signal C++ connect      更新时间:2023-10-16

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

这是电话:

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(),因为它们有一个隐式的第一个参数,该参数会变成this。您必须使用常规函数并找到一种方法来传递 data 参数中的bBuzz变量和this指针。

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