如何在qgraphicsview中进行非平滑/逐步滚动

时间:2011-06-09 07:00:35

标签: c++ qt qgraphicsview

我有一个基本上像桌子一样的场景。因此,我希望它像桌子一样滚动...一次一行或一列。具体来说,左上角的可见项应该在视口左上角的左上角,除非滚动条处于最大值(在这种情况下,它是完全在视图中的底部/右侧项)。按箭头键应显示该方向的下一行或列。

通常可以通过继承QAbstractScrollArea并根据需要进行设置来轻松实现,但QGraphicsView已经这样做了。是否有人能想出一种实现这种效果的聪明方法?

1 个答案:

答案 0 :(得分:0)

只需覆盖QGraphicsScene::keyPressEvent和...

  • 右:以正x移动单元格宽度
  • left:以负x移动单元格宽度
  • 向上:将单元格高度移动到负y
  • 向下:将单元格高度移动到正y

你必须在桌子的两端禁用这个动作,但听起来你可能最初想的要简单得多

修改
过载QGraphicsView::scrollContentsBy来处理滚动条移动。您可以存储dx和dy参数,并仅在此值大于单元格大小时滚动移动