坚持滚动GtkViewPort结束

时间:2010-04-21 13:59:08

标签: gtk

我正在向GtkViewPort添加一个GtkVBox 我正在基于两个向上/向下按钮滚动GtkViewPort。

我需要在消息聊天屏幕中显示VBox中的最后一项(消息聊天列表显示/在列表底部添加最新的聊天消息)我做的确切。

所以我在GtkViewPort的底部滚动我在地图事件中回电。

GtkAdjustment* adjustment;
adjustment = gtk_viewport_get_vadjustment(GTK_VIEWPORT(viewport_list));
gtk_adjustment_set_value(adjustment, gtk_adjustment_get_upper(adjustment));

所以这完全没问题。它最后在Vbox中显示最新添加的小部件。

在一些外部事件上,我将新的Widgets添加到我的VBox并再次调用上面的代码来显示这些新添加的小部件。在第一次添加它时根本不滚动,但在第二次添加到VBOX它滚动到列表中的第二个最后一个小部件。

为什么会发生这种情况。
还有另一种将GtkViewPort滚动到最后的方法吗?

感谢您阅读:)

1 个答案:

答案 0 :(得分:2)

这很可能发生,因为当您运行代码时,GtkVBox没有时间增长,和/或包含的视口没有时间重新计算调整的新上限。

正如我在这个问题的另一个版本中建议的那样,你应该听一下GtkVBox的size-allocate信号,知道何时重新尝试跳转到底部。

如果这不起作用(我没有尝试过这个确切的场景),你可以尝试连接到GtkAdjustment本身的changed信号。这将与一些简单的缓冲一起,让您确定GtkAdjustment的“上限”何时增加,这正是您想要将调整值更改为新上限的时间。