我查看了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。
答案 0 :(得分:-1)
你的代码不起作用的原因很可能是你“太不耐烦了”,在你再次使标题不可见之前,没有给GTK +重新绘制小部件的时间。
当您进行需要重绘的通话时,GTK +不会立即绘制。而是重绘排队,然后从GTK +主循环一次完成。这样,按顺序对窗口小部件进行两次更改不会导致两次重绘,但只会导致一次。
这有点像黑客攻击,但你可以尝试“经典”GTK +事件刷新技巧,在打开标题后插入这样的循环:
while(gtk_events_pending())
gtk_main_iteration();
只要GTK +的队列中有事件(上面提到的绘制更改是事件,内部),然后将它们刷新,然后将控制权交给您,这就会循环。但这很可能会导致一些视觉闪烁。