2016-09-06 6 views
2

私は同じコンテナ(GtkBox)にある2つの異なるウィジェットへのポインタを持っています。しかし、検索の15分後、私はまだ取得する方法を知らない、愚かに聞こえる...Gtk3 - そのウィジェットのウィジェットのインデックスを取得する方法は?

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); 

:私は他のインデックスにそれらのいずれかのコンテナの位置を変更するためにgtk_box_reorder_child(container, widgetToMove, destinationIndex)を使用したいですコンテナ内のウィジェットのインデックス。

編集:解決、ここソリューション

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)); 

答えて

1

コンテナウィジェットに確認してくださいあなたはcontainer.child_get_propertyを使用して照会することができる「子のプロパティ」の束を保存します。あなたが探しているプロパティは「位置」と呼ばれます。

+0

ありがとう、それは私が探していたものです! 'child_get_property'は使用するのが簡単ではないので、質問にいくつかのコードを追加します。 – Alex

1

ない完全な答えではなく、コメントするのに十分な担当者。

まず、gtkBoxページが「位置」の子プロパティを参照していることに注意します。正直言って、そのようなプロパティにアクセスする方法は覚えていません。

私が行った同様の状況では、gtkBoxではなくgtkGridを作成し、gtk_grid_get_child_at()メソッドを使用してインデックス0,0から始まる各子をチェックします。あなたは、Glist*https://developer.gnome.org/glib/stable/glib-Doubly-Linked-Lists.html)を返すgtk_container_get_children()https://developer.gnome.org/gtk3/stable/GtkContainer.html#gtk-container-get-children)を使用することができます。この

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 
+0

ありがとう、 "位置"プロパティはトリックでした...私は質問にいくつかのコードを追加します。使用するのは簡単ではないからです。 – Alex

1

に似たforループを使用することができます。 はその後、あなたはリストをループすることができ、あるいは、あなたのウィジェットがリストにある場合、例えば、g_list_find()

関連する問題