无法将GtkViewPort滚动到末尾

无法将GtkViewPort滚动到末尾,gtk,Gtk,我正在向GtkViewPort添加一个GtkVBox。 我正在基于两个向上/向下按钮为GtkViewPort进行滚动 我需要在VBox中显示最后一项,就像我们在消息聊天屏幕中所做的一样(消息聊天列表在列表底部显示/添加最新的聊天消息) 因此,对于在GtkViewPort底部进行的滚动,我将在map事件回调中进行 GtkAdjustment* adjustment; adjustment = gtk_viewport_get_vadjustment(GTK_VIEWPORT(viewport_li

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

我需要在VBox中显示最后一项,就像我们在消息聊天屏幕中所做的一样(消息聊天列表在列表底部显示/添加最新的聊天消息)

因此,对于在GtkViewPort底部进行的滚动,我将在map事件回调中进行

GtkAdjustment* adjustment;
adjustment = gtk_viewport_get_vadjustment(GTK_VIEWPORT(viewport_list));
gtk_adjustment_set_value(adjustment, gtk_adjustment_get_upper(adjustment));
因此,这是非常好的工作。最后,它在Vbox中显示最新添加的小部件

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

为什么会发生这种情况。
有没有其他方法可以将GtkViewPort滚动到最后


感谢阅读:)

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

正如我在这个问题的另一个版本中所建议的那样,您可能应该听听GtkVBox发出的信号,以知道何时重新尝试跳转到底部


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

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

正如我在这个问题的另一个版本中所建议的那样,您可能应该听听GtkVBox发出的信号,以知道何时重新尝试跳转到底部

如果这不起作用(我还没有尝试过这个确切的场景),您可以尝试连接到GTK调整本身的信号。这将与一些简单的缓冲一起,让您确定GTKAAdjustment的“上限”何时增加,也就是您希望将调整的值更改为新的上限的时候