为了获得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); //getting 0
什么函数会给予你小部件实际显示的高度和宽度?
4条答案
按热度按时间zbq4xfa01#
小部件实现后(给定大小取决于其父容器可以提供的大小),应该能够通过
widget->allocation.width
和widget->allocation.height
获得这些值。gtk做这件事的方式并没有错,widget想要的大小和它实际得到的大小是有区别的,所以阅读这些值的时间是很重要的,为这些变量使用“get”方法并不能改变它们还没有初始化的事实。
人们通常的解决方法是利用
size-allocate
信号,该信号是当小部件获得新的实际大小时发出的。在你的主回路中,连接信号:
g_signal_connect(mywidget, "size-allocate", G_CALLBACK(my_getsize), NULL);
db2dz4w82#
如果你正在使用GTK3,并且小部件已经实现了,你可以询问它被分配了什么。这样做的好处是它实际拥有的空间,而不是它所请求的空间。
cx6n0qe33#
使用gtk小部件大小请求(),而不是gtk小部件获取大小请求()。
http://library.gnome.org/devel/gtk/stable/GtkWidget.html#gtk-widget-size-request
ipakzgxi4#
你确定你的小部件已经被显示和实现/Map了吗?在小部件被“真正”布局之前,你不能得到它的大小。
尝试收听Map事件信号。