Gtk3 - 如何在它的容器中获取小部件的索引?

Gtk3 - How to get the index of a widget in it's container?

我有指向位于同一容器(GtkBox)中的两个不同小部件的指针。我想使用 gtk_box_reorder_child(container, widgetToMove, destinationIndex) 将其中一个的容器位置更改为另一个的索引:

GtkWidget *widgetToMove;
GtkWidget *target;
// Does something like 'gtk_get_container_index' exist ?
gint targetIndex = gtk_get_container_index(target) 
gtk_box_reorder_child (myBox,widgetToMove,targetIndex);

...听起来很愚蠢,但是经过 15 分钟的搜索后,我仍然不知道如何在容器中获取小部件的索引。

编辑:已解决,这里是解决方案

GtkWidget *widgetToMove;
GtkWidget *target;
GValue targetIndex = G_VALUE_INIT;
g_value_init (&targetIndex, G_TYPE_INT);
gtk_container_child_get_property(myBox,target,"position",&targetIndex);
gtk_box_reorder_child (myBox,widgetToMove,g_value_get_int(&targetIndex));

没有完整的答案,但没有足够的代表发表评论。

首先,我只是要注意 gtkBox 页面引用了一个 "position" 子 属性,但老实说,我不记得如何访问这样的属性。

我在类似情况下所做的工作是创建一个 gtkGrid 而不是 gtkBox 并使用 gtk_grid_get_child_at() 方法从索引 0,0 开始检查每个子项。您可以使用类似于此的 for 循环

for(int n=0;n<numChildren;n++)
{
    gtkWidget* temp = gtk_grid_get_child_at(myGrid, n, 0);
    if(temp == myWidget)
        break;
}
//n now holds the index of myWidget in myGrid

您可以使用 gtk_container_get_children(), which returns Glist*。 然后你可以遍历列表,或者,例如,检查你的小部件是否在列表中 g_list_find().

容器小部件保存了一堆您可以使用 container.child_get_property 查询的“子属性”。 您要查找的 属性 名为 position