完全厌倦了获得Gtk小部件的高度和宽度

试图获得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没有提供简单的function,它将为您提供实际显示的高度和小部件。

有人试图获得身高和GtkWidget吗?

一旦你的小部件被实现(给定一个大小取决于它的父容器可以给它的大小)你应该能够通过widget->allocation.widthwidget->allocation.height获得这些值。

gtk这样做的方式没有错。 小部件的大小与实际大小之间存在差异。 因此,阅读这些值的时机非常重要。 对这些变量“获取”方法不会改变它们尚未初始化的事实。

人们通常采用的方法是利用小部件获得新的实际大小时发出的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_size_request(),而不是gtk_widget_get_size_request()。

http://library.gnome.org/devel/gtk/stable/GtkWidget.html#gtk-widget-size-request

您确定您的小部件已经显示并实现/映射吗? 在小部件“真实地”布局之前,您无法获得大小。

尝试听地图事件信号。