Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Crazy Sage от Январь 25, 2018, 09:36



Название: Два вопроса по программной прокрутке QScrollArea [Qt5]
Отправлено: Crazy Sage от Январь 25, 2018, 09:36
Приветствую.
Такой вопрос, есть у меня QScrollArea, в нём QVBoxLayout, в нём куча кнопок, кнопки создаются динамически, количество их меняется по ходу работы.
Код добавления кнопки
Код:
QToolButton* btn = new QToolButton(ui.previewList);
        btn->setCheckable(TRUE);
        ui.buttonsLayout->removeItem(ui.buttonsSpacer);
        ui.buttonsLayout->addWidget(btn);
        ui.buttonsLayout->addItem(ui.buttonsSpacer);

Мне надо иногда из программы прокручивать ScrollArea так, чтобы была видна одна из кнопок и тут начинаются проблемы.
1. ui.previewList->ensureWidgetVisible(btn) не даёт никакого эффекта вообще, видимо потому что кнопки принадлежат лэйауту, а не ему.
2. если я хочу прокрутить до самого конца, то все из нижеприведённых вариантов приводят к тому, что слайдер прокручивается так, что аккуратно последняя кнопка не видна (хотя я проверил, я вначале захожу в добавление кнопок, потом вызываю прокрутку, может надо ещё что-то сделать, чтобы принудительно заставить QScrollArea пересчитать свойства своего скроллбара?

Код:
//Вариант 1
ui.previewList->verticalScrollBar()->setValue(ui.previewList->verticalScrollBar()->maximum());
ui.previewList->verticalScrollBar()->triggerAction(QAbstractSlider::SliderMove);

//Вариант 2
ui.previewList->verticalScrollBar()->setValue(ui.previewList->verticalScrollBar()->maximum() + ui.previewList->verticalScrollBar()->pageStep());
ui.previewList->verticalScrollBar()->triggerAction(QAbstractSlider::SliderMove);

//Вариант 3
ui.previewList->verticalScrollBar()->triggerAction(QAbstractSlider::SliderToMaximum);

Как правильно сделать, чтобы подобная прокрутка работала?


Название: Re: Два вопроса по программной прокрутке QScrollArea [Qt5]
Отправлено: Crazy Sage от Январь 27, 2018, 12:21
Со второй проблемой я разобрался, надо было добавить processEvents перед прокруткой.
А вот как аккуратно решить первую, не занимаясь обработкой положения всех кнопок вручную как-то пока не понимаю.


Название: Re: Два вопроса по программной прокрутке QScrollArea [Qt5]
Отправлено: Crazy Sage от Январь 31, 2018, 13:58
C EnsureItemVisible тоже разобрался, недостаточно внимательно читал мануал, надо было внутреннему лэйауту поставить SizeConstraint SetMinAndMaxSize