我正在向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滚动到最后的方法吗?
感谢您阅读:)
答案 0 :(得分:2)
这很可能发生,因为当您运行代码时,GtkVBox没有时间增长,和/或包含的视口没有时间重新计算调整的新上限。
正如我在这个问题的另一个版本中建议的那样,你应该听一下GtkVBox的size-allocate信号,知道何时重新尝试跳转到底部。
如果这不起作用(我没有尝试过这个确切的场景),你可以尝试连接到GtkAdjustment本身的changed信号。这将与一些简单的缓冲一起,让您确定GtkAdjustment的“上限”何时增加,这正是您想要将调整值更改为新上限的时间。