c - 完全受够了获取 Gtk 小部件的高度和宽度

标签 c 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 没有提供简单的函数来为您提供小部件的实际显示高度和宽度,这真的很糟糕。

有人试过使用 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);

关于c - 完全受够了获取 Gtk 小部件的高度和宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2675514/

相关文章:

c - GTK 创建新的简单小部件

python - 如何从 PyGTK 的 TreeView 中的选定项目中获取值?

linux - gtkbutton字体颜色变化

c - 无法运行已编译的C+Gtk+-3软件

c - 如何在回调函数中从文件加载 GdkPixbuf?

c++ - 给指针赋值抛出异常

c - 如何在C程序中临时运行在chroot环境中?

c - 客户端服务器实现的命名管道-服务器如何区分来自同一客户端的两个请求

c - 多个结构,需要在方法中访问的相同字段

c - 什么触发了 0x08 中断?