试图获得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?
答案 0 :(得分:33)
一旦你的小部件被实现(给定大小取决于它的父容器可以给它的大小),你应该能够通过widget->allocation.width
和widget->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);
答案 1 :(得分:5)
如果您正在使用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);
答案 2 :(得分:4)
使用gtk_widget_size_request(),而不是gtk_widget_get_size_request()。
http://library.gnome.org/devel/gtk/stable/GtkWidget.html#gtk-widget-size-request
答案 3 :(得分:3)
您确定您的小部件已经显示并实现/映射吗?在小部件布局为“真实”之前,您无法获得大小。
尝试收听map-event信号。