1

我查看了 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 来做到这一点。

4

1 回答 1

-1

您的代码不起作用的原因很可能是您“太不耐烦了”,没有给 GTK+ 时间在使标题再次不可见之前重新绘制小部件。

当您进行需要重绘的调用时,GTK+ 不会立即绘制。相反,重绘是排队的,然后从 GTK+ 主循环中一次性完成。这样,按顺序对小部件进行两次更改不会导致两次重绘,而只会导致一次。

这有点 hack,但您可以尝试“经典”GTK+ 事件刷新技巧,方法是在打开标题后插入这样的循环:

while(gtk_events_pending())
  gtk_main_iteration();

只要在 GTK+ 的队列中有事件(上面提到的绘图更改是内部事件),这就会简单地循环,并刷新它们,然后将控制权交还给您。不过,这很可能会导致一些视觉闪烁。

于 2009-05-08T08:35:07.053 回答