QT4: É possível fazer uma QListView rolar sem problemas?
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?
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
Outras dicas