如何获取 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 标头的高度?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GtkTreeView 中交替亮/暗行?

如何创建高度由其标签高度确定的 UITableView 标头?

GtkTreeView 列标题点击事件

IOS 10 或 11 上的 Ionic 3 标头高度

如何从 fetch 中获取响应的标头

GtkTreeView 过滤和选择