C gtk_容器_获得_儿童

C gtk_容器_获得_儿童,c,C,在预设rol列表中打印电台列表时,如果您处于列表的开头或结尾,则会看到许多空项。 我创建了大约20个电台的列表,并尝试显示它们,转到列表的开头和结尾。 我认为问题在于这段代码: static void add_button_clicked_cb(GtkWidget *widget, gpointer data) { preset *ps; gchar *buffer; GtkTreeIter iter = {0}; GtkAdjustment* v_scb;

在预设rol列表中打印电台列表时,如果您处于列表的开头或结尾,则会看到许多空项。 我创建了大约20个电台的列表,并尝试显示它们,转到列表的开头和结尾。 我认为问题在于这段代码:

static void add_button_clicked_cb(GtkWidget *widget, gpointer data)
{
    preset *ps;
    gchar *buffer;
    GtkTreeIter iter = {0};
    GtkAdjustment* v_scb;
    GtkTreePath *path = NULL;
    GList* menuitems;
    GtkWidget *menuitem;

    ps = malloc(sizeof(preset));
    ps->title = g_strdup(_("unnamed"));
    ps->freq = rint(gtk_adjustment_get_value(adj)) / STEPS;
    settings.presets = g_list_append(settings.presets, (gpointer) ps);
    buffer = g_strdup_printf("%.2f", ps->freq);

    gtk_list_store_append(list_store, &iter);
    gtk_list_store_set(list_store, &iter, 0, ps->title, 1, buffer, -1);

    g_free(buffer);
    gtk_tree_selection_unselect_all(selection);

    v_scb = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(list_view));
    gtk_adjustment_set_value(v_scb, gtk_adjustment_get_upper(v_scb));

    if (main_visible) {
        gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), ps->title);
        mom_ps = g_list_length(settings.presets) - 1;
        preset_combo_set_item(mom_ps);

        menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
        menuitem = gtk_menu_item_new_with_label(ps->title); 

        gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, mom_ps);     
        g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, (gpointer)mom_ps);
        gtk_widget_show(menuitem);
    }

    buffer = g_strdup_printf("%d", g_list_length(settings.presets) - 1);
    path = gtk_tree_path_new_from_string(buffer);
    g_free(buffer);
    gtk_tree_view_set_cursor(GTK_TREE_VIEW(list_view), path, NULL, FALSE);
    gtk_tree_path_free(path);
}
您能告诉我如何更正它吗?

如果主屏幕可见,您有:

menuitems=gtk_container_get_childrenGTK_container数组菜单

也就是说,您正在将menuitems的值设置为该函数调用的返回值。然而,您的代码的其余部分实际上都没有对menuitems做任何事情。因此,编译器会向您发出警告

修复它可能与简单地摆脱menuitems一样简单:

gtk_container_get_childrenGTK_container数组菜单


这肯定会消除警告。但是您必须考虑一下:也许您应该对该函数调用的返回值做一些事情,而您没有对它做任何事情的原因是您忘记了或其他任何事情。

警告:变量“menuitems”已设置但未使用

用外行的话说,你的编译器是这样说的:

老兄。。。您已经创建了一个具有几个属性的类,其中一个称为“menuitems”。这很好,但是当您实际创建一个实例并分配所有变量时,您已经设置了“menuitems”,但您从未使用该变量来处理它。只是坐在那里什么也不做。所以,伙计,这一点都没有问题,因为我仍然可以运行您的程序,但我只是警告您,menuitems变量正在执行**所有操作,因为您从未使用该变量本身。只是警告你,兄弟:除此之外,祝你过得愉快

因此,这只是一个警告,让您知道您有一个变量,除了在其中存储一个值之外,没有用于任何特定的原因,但从未访问它来做一些有用的事情。因此,要么评论出来,因为你实际上并没有对它做任何事情。。或者使用它,或者只是喜欢阅读警告,但它不会影响程序的运行方式


显示警告主要是为了让开发人员更加了解他们自己的代码和正在发生的事情。

由于您提出的问题与显示的代码相比,我很难判断您的熟练程度。。。但是,如果您只是调用设置menuitems的行以使函数运行,那么在函数调用之前抛出void,使其放弃任何返回值,而不是将其分配给变量,从而浪费内存。