Как сделать не плавную/ступенчатую прокрутку в qgraphicsview

У меня есть сцена, которая имеет в основном табличную компоновку. Таким образом, я бы хотел, чтобы он прокручивался как таблица... по одной строке или столбцу за раз. В частности, верхний левый видимый элемент должен иметь свой верхний левый угол в верхнем левом углу окна просмотра, если только полосы прокрутки не находятся на максимуме (в этом случае это нижний/правый элемент, который находится точно в поле зрения). Нажатие клавиши со стрелкой должно отображать следующую строку или столбец в этом направлении.

Обычно это легко достижимо, унаследовав QAbstractScrollArea и настроив его соответствующим образом, но QGraphicsView уже делает это. Есть ли кто-нибудь, кто может придумать умный метод для достижения этого эффекта?


person Esben Mose Hansen    schedule 09.06.2011    source источник


Ответы (1)


просто переопределите QGraphicsScene::keyPressEvent и...

  • справа: переместить ширину ячейки в положительное значение x
  • влево: переместить ширину ячейки в отрицательный x
  • вверх: переместить высоту ячейки в минус y
  • вниз: переместить высоту ячейки по положительной оси y

вам придется отключить это движение на концах таблицы, но это звучит намного проще, чем вы могли изначально подумать

EDIT
перегрузить QGraphicsView::scrollContentsBy для обработки прокрутки барное движение. Вы можете сохранить параметры dx и dy и прокручивать движение только тогда, когда это значение больше размера ячейки.

person Tom    schedule 09.06.2011
comment
Это позаботится о прокрутке с помощью клавиш со стрелками, но не при использовании полос прокрутки или других средств прокрутки. Я надеялся на что-то лучшее. - person Esben Mose Hansen; 10.06.2011
comment
Я не смог изучить ваше предложение, хотя я думаю, что будет сложно заставить его работать интуитивно правильно с полосами прокрутки и всем остальным. Я мог бы попытаться просто обернуть представление в новую область прокрутки и обработать прокрутку из этого. - person Esben Mose Hansen; 15.06.2011