Застрял на прокрутке GtkViewPort до конца - PullRequest
0 голосов
/ 21 апреля 2010

Я добавляю один GtkVBox в GtkViewPort.
И я делаю прокрутку для 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.

для некоторых внешних событий я добавляю новые виджеты в свой VBox и снова вызываю приведенный выше код для отображения этих новых добавленных виджетов.при первом добавлении он вообще не прокручивается, но при втором добавлении в VBOX он прокручивается до второго последнего виджета в списке.

Почему это может происходить.
Есть еще один способ прокрутки GtkViewPort до конца.?

Спасибо за чтение:)

1 Ответ

2 голосов
/ 22 апреля 2010

Скорее всего, это происходит потому, что когда вы запускаете свой код, GtkVBox не успевает расти, и / или содержащее окно просмотра не успевает пересчитать новую верхнюю границу корректировки.

Как я и предлагал в другой версии этого вопроса, вам, вероятно, следует прослушать сигнал size-allocate от GtkVBox, чтобы узнать, когда еще раз попытаться перейти на дно.

Если это не сработает (я не пробовал этот точный сценарий), вы можете попробовать подключиться к сигналу изменилось самой GtkAdjustment. Это, наряду с некоторой простой буферизацией, позволит вам определить, когда увеличилась «верхняя» граница настройки GtkAdjustment, то есть именно тогда, когда вы хотите изменить значение корректировки на новую верхнюю границу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...