2016-04-11 3 views
0

Я хочу, чтобы построить виджет, как этот, который мы можем найти в Word:расширяемый просмотр списка с настраиваемым скроллингом в Qt

enter image description here

enter image description here

Таким образом, существует представление списка с помощью специальная полоса прокрутки с 3 кнопками и без прокрутки.

Когда вы нажимаете на последнюю кнопку внизу справа, новый вид списка с классической полосой прокрутки отображается над предыдущим списком (скрытый при потере фокуса). Итак, в основном, поведение smae как одно в Word.

Мы уже можем отображать просмотр списка с помощью пользовательского контента. Моя главная проблема заключается в том, как создать виджет в первом изображении: просмотр списка с помощью специальной полосы прокрутки (3 кнопки, без прокрутки)?

Каков правильный способ сделать это?

ответ

0

Сначала скройте строку прокрутки по умолчанию, вызвав метод QAbstractScrollArea::setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff).

Затем создать три кнопки на левой стороне и соединить QPushButton::clicked() сигналы с некоторыми слотами, где вы просто прокручивать список, вызвав QAbstractItemView::scrollTo(index), QAbstractItemView::scrollToBottom() или QAbstractItemView::scrollToTop().

0

Я предполагаю, что вы реализуете подкласс QAbstractListView.

Я не верю, что вам нужна специальная полоса прокрутки - просто поместите полосу прокрутки и кнопку в QVBoxLayout; спрячьте кнопку после ее проверки (вы можете даже подключить ее toggled() к ее).

0

Хотя правильно, что вы можете просто создать пользовательский виджет, состоящий из вида со скрытыми полосами прокрутки и добавить кнопки в макет, подключив сигналы/слоты, необходимые для обеспечения правильных действий, вы также можете рассмотреть возможность реализовать свои собственный QScrollBar класс. QListView получен из QAbstractScrollArea, который предоставляет setVerticalScrollBar(), поэтому вы можете просто установить для него объект, который будет использоваться представлением. Интеграция области прокрутки и полосы прокрутки должна быть намного более простой, но вам придется самому рисовать содержимое полосы прокрутки самостоятельно или разместить макет и кнопки там (QScrollBar происходит от QWidget, придется переопределить paintEvent()).