gpt4 book ai didi

c - 将 Gtk Widgets 结构传递给回调函数

转载 作者:太空宇宙 更新时间:2023-11-04 08:34:46 25 4
gpt4 key购买 nike

我正在用 C 创建一个 GTK+ 应用程序,我需要从回调函数中销毁一个小部件(例如:一个按钮)。当我从该函数调用“gtk_widget_destroy”时,该小部件不会被销毁并且我看到以下警告:

(gtkTest:9150): GLib-GObject-WARNING **: invalid uninstantiatable type 'GInterface' in cast to 'GtkObject'

(gtkTest:9150): Gtk-CRITICAL **: IA__gtk_widget_destroy: assertion 'GTK_IS_WIDGET (widget)' failed

如何从回调函数中访问按钮小部件?我看到的唯一选择是将此小部件设为全局。我们将不胜感激任何帮助。

代码片段如下:

typedef struct {
GtkWidget *button;
} buttonInfo;


/*call back function */
static gpointer _callBackFunc (buttonInfo *buttonTable)
{
/*do some stuff*/
gtk_widget_destroy(buttonTable->button);
//
return(NULL);
}

/*main*/
int main( int argc, char *argv[])
{

GtkWidget *testButton;

buttonInfo *buttonPTR;
buttonPTR = g_new(buttonInfo,1);
testButton = gtk_button_new_with_label("Click Me");
buttonPTR->button = (GtkWidget *) testButton;

g_signal_connect(G_OBJECT(testButton),"activate",
G_CALLBACK(_callBackFunc),buttonPTR);
/*This works */
//gtk_destroy_widget(buttonPTR->button);
}

最佳答案

您的回调函数签名必须与您在信号 documentation 中看到的签名匹配.在“激活”的情况下,它应该是

static void _callBackFunc (GtkButton *button, gpointer user_data)
{
buttonInfo *button_info = (buttonInfo *)user_data;

// ...
}

就是说,当您检查签名时,请务必阅读激活信号文档的其余部分:它可能不是您想要使用的信号(请参阅“已点击”)。

关于c - 将 Gtk Widgets 结构传递给回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26718231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com