试图获得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
--------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
非常糟糕的是,Gtk没有提供简单的功能,可以为您提供实际显示的高度和小部件.
有人试图获得身高和GtkWidget吗?
jov*_*eha 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);
}
Run Code Online (Sandbox Code Playgroud)
在你的主循环中,连接信号:
g_signal_connect(mywidget, "size-allocate", G_CALLBACK(my_getsize), NULL);
使用 gtk_widget_size_request(),而不是 gtk_widget_get_size_request()。
http://library.gnome.org/devel/gtk/stable/GtkWidget.html#gtk-widget-size-request
如果您正在使用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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19867 次 |
| 最近记录: |