Название: постраничное передвижение по QListWidget Отправлено: qt_newer от Июля 29, 2014, 19:21 Есть QListWidget с большим количеством элементов, надо сделать постраничное перемещение по нему (размер этого виджета, количество строк в нем может меняться вместе с размером формы). Пробую разные варианты:
list->setCurrentRow(20); QListWidgetItem* item = list->currentItem(); list->scrollToItem(item); QScrollBar *vb = list->verticalScrollBar(); int oldValue = vb->value(); oldValue = oldValue + 40; vb->setValue(oldValue); Как это правильно сделать? Спасибо заранее всем ответившим! Название: Re: постраничное передвижение по QListWidget Отправлено: Fregloin от Июля 30, 2014, 16:03 scrollTo попробуйте
Название: Re: постраничное передвижение по QListWidget Отправлено: qt_newer от Июля 30, 2014, 20:22 проблема с первым вариантом в том, что я не знаю, сколько у меня видимых айтемов в листе, и сооответственно, не могу предположить, на сколько строк перейти в этой строке: list->setCurrentRow(20);
проблема со вторым вариантом примерно в том же- непонятно насколько двигать скроллбар при разных размерах листвиджета на разных устройствах Название: Re: постраничное передвижение по QListWidget Отправлено: Bepec от Июля 30, 2014, 21:49 Количество строк = размер виджета / размер одной строки
Название: Re: постраничное передвижение по QListWidget Отправлено: qt_newer от Июля 31, 2014, 11:27 спасибо, но для новичков и это сложно :) вот, откуда взять размер строки, sizehint не хочет возвращать правильное значение.
Пока получилось так: QScrollBar *hsb = list->horizontalScrollBar(); int bar = 10; if (hsb->isVisible()) { bar += hsb->height(); } QModelIndex firstIndex = list->indexAt(QPoint(0, 0)); QModelIndex lastIndex = list->indexAt(QPoint(0, list->height() - bar)); int first = firstIndex.row(); int last = lastIndex.row(); int row_count = last-first+1; Название: Re: постраничное передвижение по QListWidget Отправлено: Igors от Июля 31, 2014, 11:51 bar += hsb->height(); Это явно "не то", высота может сильно отличаться от размера области прокрутки. Должно быть более высокоуровневое решение. Если кликнули в свободную зону скроллера (не thumb и не стрелки) - он должен скроллить на страницу, или у Вас не так? Название: Re: постраничное передвижение по QListWidget Отправлено: Johnik от Июля 31, 2014, 12:03 При нажатии на клавиш PageDown, PageUp курсор соответственно перемещается постранично вверх и вниз.
внутри QListView при реакции на нажатия клавиш вызывается: Код: QModelIndex QListView::moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers) [virtual protected] Название: Re: постраничное передвижение по QListWidget Отправлено: qt_newer от Июля 31, 2014, 13:04 bar += hsb->height(); Это явно "не то", высота может сильно отличаться от размера области прокрутки. Должно быть более высокоуровневое решение. Если кликнули в свободную зону скроллера (не thumb и не стрелки) - он должен скроллить на страницу, или у Вас не так? Более грамотно, конечно, было бы использовать что-то, вроде, visualRect: http://qt-project.org/faq/answer/how_can_i_get_hold_of_all_of_the_visible_items_in_my_qlistview на десктопе так, но скролл нужен на полстраницы |