QT4: возможно ли плавно прокрутить QListView?

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

2 ответа

Решение

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

http://qt.nokia.com/doc/4.6/images/qscrollbar-picture.png

Для вертикальной полосы прокрутки, подключенной к представлению списка, стрелки прокрутки обычно перемещают текущую позицию на одну "строку" вверх или вниз и настраивают положение ползунка на небольшую величину. Я считаю, что линия в этом случае это высота иконы. Вы можете отрегулировать высоту элементов путем установки и делегирования элемента (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);
}

надеюсь, что это помогает, привет

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

QScrollBar *qsb = ui->barra_scroll->verticalScrollBar();
qsb->setSingleStep(5);
Другие вопросы по тегам