如何获取 gtktreeview 标头的高度?
Posted
技术标签:
【中文标题】如何获取 gtktreeview 标头的高度?【英文标题】:How to get the height of the gtktreeview header? 【发布时间】:2009-05-08 08:32:24 【问题描述】:我查看了 gtk 源代码,标题高度是私有的。我已经尝试了一些东西,但它没有按预期工作(heightWithHeader 是 1?!)
Glib::RefPtr<Gdk::Window> pWindow = treeView.get_bin_window();
treeView.set_headers_visible(true);
pWindow->get_size(width, heightWithHeader);
treeView.set_headers_visible(false);
pWindow->get_size(width, heightWithoutHeader);
r_treeView.set_headers_visible(true);
returnValue = heightWithHeader - heightWithoutHeader;
您能帮我找到其他解决方案或修复我的代码吗?
更新:我必须调整树视图的高度以显示固定数量的行。我通过将容器(滚动窗口)的大小调整为 headerHeight + numberRowsToDisplay * heightOfRow 来做到这一点。
【问题讨论】:
【参考方案1】:您的代码不起作用的原因很可能是您“太不耐烦了”,没有给 GTK+ 时间在使标题再次不可见之前重新绘制小部件。
当您进行需要重绘的调用时,GTK+ 不会立即绘制。相反,重绘是排队的,然后从 GTK+ 主循环中一次性完成。这样,按顺序对小部件进行两次更改不会导致两次重绘,而只会导致一次。
这有点小技巧,但您可以尝试“经典”GTK+ 事件刷新技巧,方法是在打开标题后插入这样的循环:
while(gtk_events_pending())
gtk_main_iteration();
只要在 GTK+ 的队列中有事件(上面提到的绘制更改是内部事件),这只会循环,并刷新它们,然后将控制权交还给您。不过,这很可能会导致一些视觉闪烁。
【讨论】:
我必须调整树视图的高度以显示固定数量的行。我通过将容器(滚动窗口)的大小调整为 headerHeight + numberRowsToDisplay * heightOfRow 来做到这一点。以上是关于如何获取 gtktreeview 标头的高度?的主要内容,如果未能解决你的问题,请参考以下文章