QT4: Можно ли сделать плавную прокрутку QListView?

У меня есть QListView в режиме Icon с кучей иконок, так что появляется полоса прокрутки, но прокрутка не плавная и это ИМХО смущает пользователя, так как он резко перескакивает с одной точки на другую при каждой прокрутке. Я хотел бы сделать прокрутку плавной, но я ничего не нашел в документах. Является ли это возможным?


person Massimiliano Torromeo    schedule 06.01.2010    source источник


Ответы (3)


Если я правильно понял ваш вопрос, вы хотели бы переопределить поведение прокрутки виджета. Я предполагаю, что происходит то, что список прокручивается по высоте элемента всякий раз, когда пользователи нажимают стрелку прокрутки (обозначенную буквой b на изображении ниже).

альтернативный текст

Для вертикальной полосы прокрутки, связанной с представлением списка, стрелки прокрутки обычно перемещают текущую позицию на одну «строку» вверх или вниз и немного регулируют положение ползунка. Я считаю, что линия в данном случае - это высота иконки. Вы можете настроить высоту элементов, установив и делегат элемента (setItemDelegate ) и переопределение его метода sizeHint. Хотя это не поможет вам решить эту проблему. Что вы можете попробовать, так это создать потомка QListView и переопределить его метод updateGeometries. Там вы можете настроить шаг вертикальной полосы прокрутки на нужное вам значение, я думаю, 1 или 2 для этой задачи. Ниже приведен пример пользовательского списка:

class TestListView : public QListView
{
Q_OBJECT
public:
    explicit TestListView(QWidget *parent = 0);

protected:
    virtual void updateGeometries();
};

TestListView::TestListView(QWidget *parent) :
    QListView(parent)
{
    //???
}

void TestListView::updateGeometries()
{
    QListView::updateGeometries();
    verticalScrollBar()->setSingleStep(2);
}

надеюсь, это поможет, с уважением

person serge_gubenko    schedule 10.01.2010
comment
Интересный. Я попробую это в ближайшее время. Спасибо! - person Massimiliano Torromeo; 10.01.2010

Возможно, QListView.setVerticalScrollMode(QAbstractItemView::ScrollPerPixel)

person Gary van der Merwe    schedule 06.01.2010
comment
Это похоже на правильное свойство, но оно не сработало. Он прокручивается так же, как и раньше. - person Massimiliano Torromeo; 07.01.2010
comment
Я думаю, что это самый простой способ добиться плавной прокрутки, и это сработало для меня. - person warunanc; 12.11.2012
comment
Это похоже на правильное свойство, но я не мог заставить его работать. У кого-нибудь есть решения? Кажется, играешь с эффектом verticalScrollBar()->singlestep() - person Constantin; 27.07.2013
comment
_my_listview->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); работал отлично. Прокрутка путем перетаскивания самой полосы теперь плавная. Используя колесо прокрутки, он все еще перескакивает через несколько элементов. - person KYL3R; 06.02.2019

У меня есть QlistWidget* в ui->barra_scroll, и я чувствую себя очень комфортно с этим.

QScrollBar *qsb = ui->barra_scroll->verticalScrollBar();
qsb->setSingleStep(5);
person Gonzalo Arroyo GEAR invent    schedule 12.05.2020