GtkEventBoxの高さと幅を取得しようとしています。
以下のことを試みました。
GtkRequisition requisition;
gtk_widget_get_child_requisition(widget, &requisition);
// Getting requisition.height 0
----------------------------------------------------------
widget->allocation-x //getting 0
widget->allocation-height //getting -1
----------------------------------------------------------
gtk_widget_get_size_request( widget, &height, &width); // Again getting 0
--------------------------------------------------------------------------
Gtkが実際に表示される高さとウィジェットの高さを提供する単純な関数を提供していないのは本当に悪いことです。
誰もがGtkWidgetの高さを取得しようとしましたか?
ウィジェットが実現されると(親コンテナーがウィジェットに与えることができるサイズに応じて)、_widget->allocation.width
_および_widget->allocation.height
_を使用してこれらの値を取得できるようになります。
Gtkがこれを行う方法に問題はありません。ウィジェットが希望するサイズと実際に取得するサイズには違いがあります。したがって、これらの値を読み取るタイミングは重要です。これらの変数に「get」メソッドを指定しても、まだ初期化されていないという事実は変わりません。
人々がこれを回避する通常の方法は、ウィジェットが新しい実際のサイズを取得したときに発行される_size-allocate
_シグナルを利用することです。このようなもの:
_void my_getsize(GtkWidget *widget, GtkAllocation *allocation, void *data) {
printf("width = %d, height = %d\n", allocation->width, allocation->height);
}
_
そして、どこかのメインループで、信号を接続します。
g_signal_connect(mywidget, "size-allocate", G_CALLBACK(my_getsize), NULL);
GTK3を使用していて、ウィジェットが実現されている場合は、ウィジェットに何が割り当てられているかを尋ねることができます。これには、要求されたものとは対照的に、本当にが持つスペースであるという利点があります。
//GtkWidget* widget;
GtkAllocation* alloc = g_new(GtkAllocation, 1);
gtk_widget_get_allocation(widget, alloc);
printf("widget size is currently %dx%d\n",alloc->width, alloc->height);
g_free(alloc);
Gtk_widget_get_size_request()ではなく、gtk_widget_size_request()を使用します。
http://library.gnome.org/devel/gtk/stable/GtkWidget.html#gtk-widget-size-request
ウィジェットが表示され、実現/マッピングされていることを確認しますか?ウィジェットが「実際に」レイアウトされるまで、サイズを取得することはできません。
map-event シグナルを聞いてみてください。