Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何替换Glade3/GTK3代码中的lookup_小部件?_C_Gtk3_Glade - Fatal编程技术网

C 如何替换Glade3/GTK3代码中的lookup_小部件?

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

我最近重新启动了一个十年前的项目,我遇到了与从Glade2到3的过渡有关的问题

一个问题是我使用了一个函数lookup_小部件,它由glade2在support.c中定义,但在glade3中没有定义。我不知道该怎么换

我如何使用它的一个例子是:

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_小部件查找到的所有小部件变成小部件类的成员。但这不是一个很好的短期解决方案,因为这将涉及大量重构