Pergunta

Eu tenho um QListView no modo Ícone com vários ícones, para que uma barra de rolagem aparece, mas a rolagem não é suave e isso IMHO confunde o usuário, uma vez que salta abruptamente de um ponto a outro em cada rolagem. Gostaria de fazer a rolagem suave, mas eu não encontrar nada nos docs. É possível?

Foi útil?

Solução

Se eu entendi sua pergunta você gostaria de redefinir o comportamento de rolagem do widget. Acho que o que acontece é que listview está sendo rolada pela altura do item sempre que os usuários bate uma seta de rolagem (marcado como b na imagem abaixo).

alt texto http://qt.nokia.com/doc/ 4,6 / images / qscrollbar-picture.png

Para uma barra de deslocamento vertical ligado a uma vista lista, setas de rolagem tipicamente mover a uma "linha" actual posição para cima ou para baixo, e ajustar a posição do cursor por uma pequena quantidade. Acredito linha, neste caso, é a altura de um ícone. Você pode ajustar os itens da altura instalando e artigo delegado (setItemDelegate) e substituindo o seu método sizeHint. Embora isso não iria ajudá-lo a resolver este problema. O que você poderia tentar é criar um descendente QListView e substituir seu método updateGeometries. Lá você pode configurar a etapa de deslocamento vertical para o valor que você quer, eu acho que 1 ou 2 para esta tarefa. Abaixo está um exemplo do listview personalizado:

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

espero que isso ajude, que diz respeito

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top