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

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

Ответы

Ответ 1

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

alt text 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);
}

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