C 如何替换Glade3/GTK3代码中的lookup_小部件?
我最近重新启动了一个十年前的项目,我遇到了与从Glade2到3的过渡有关的问题 一个问题是我使用了一个函数lookup_小部件,它由glade2在support.c中定义,但在glade3中没有定义。我不知道该怎么换 我如何使用它的一个例子是:C 如何替换Glade3/GTK3代码中的lookup_小部件?,c,gtk3,glade,C,Gtk3,Glade,我最近重新启动了一个十年前的项目,我遇到了与从Glade2到3的过渡有关的问题 一个问题是我使用了一个函数lookup_小部件,它由glade2在support.c中定义,但在glade3中没有定义。我不知道该怎么换 我如何使用它的一个例子是: void init_Code(GtkWidget *Main) { GtkWidget *widget; PangoFontDescription *codefont; codetext = lookup_widget(Main, "Cod
void init_Code(GtkWidget *Main)
{
GtkWidget *widget;
PangoFontDescription *codefont;
codetext = lookup_widget(Main, "Code_Text");
code_textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(codetext));
当然,我查过这个问题,但我不明白答案是:
The preferred solution is to pass a pointer to your ENTRY as the user data pointer when you connect the signal, or, if you're using gtk_builder_connect_signals(), store a pointer to ENTRY in your class and pass the class as the user data pointer.
指的是:
on_BT_OK_clicked(GtkButton *button, gpointer user_data)
{
//The line directly below is the one I get an error on
GtkWidget *entry = lookup_widget( GTK_WIDGET(button), "ENTRY" );
任何澄清都会很有帮助
编辑:
我非常确定所有信号都是连接的,因为我使用以下方法:
builder = gtk_builder_new();
gtk_builder_add_from_file(builder, "z80em2.glade", NULL);
window = GTK_WIDGET(gtk_builder_get_object(builder, "Main"));
gtk_builder_connect_signals(builder, NULL);
据我所知,codetext=lookup_widgetMain,Code_Text返回一个指向GtkWidget的指针,在主小部件下称为Code_Text,我不知道如何在GTK3中实现这一点。我没有使用Glade,但如果您有连接信号处理程序的手动代码,则应该在该调用中传递指向另一个小部件的指针。然后,它将存储在GTK+中,并作为用户指针参数传递给事件处理程序 因此,它将变得公正:
on_BT_OK_clicked(GtkButton *button, gpointer user_data)
{
// This assumes the entry was passed to g_signal_connect() as 'data'
GtkWidget *entry = GTK_WIDGET(user_data);
请参阅。如果您打算大量重写此代码库,您可能会发现将小部件重新组织为Glade 3支持的复合小部件模板很有帮助,并使用该模板将使用lookup_小部件查找到的所有小部件变成小部件类的成员。但这不是一个很好的短期解决方案,因为这将涉及大量重构