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

Posted

技术标签:

【中文标题】如何在 qgraphicsview 中进行非平滑/逐步 scolling【英文标题】:How to make non-smooth / stepwise scolling in a qgraphicsview 【发布时间】:2011-06-09 07:00:35 【问题描述】:

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

通常这很容易通过继承 QAbstractScrollArea 并根据需要进行设置来实现,但 QGraphicsView 已经这样做了。有没有人能想出一个聪明的方法来达到这个效果?

【问题讨论】:

【参考方案1】:

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

右:向正 x 方向移动一个单元格宽度 左:向负 x 移动一个单元格宽度 向上:将单元格高度向负 y 方向移动 向下:在正 y 方向移动一个单元格高度

您必须在表格的末端禁用此移动,但这听起来比您最初想象的要简单得多 编辑 重载QGraphicsView::scrollContentsBy 来处理滚动条的移动。您可以存储 dx 和 dy 参数,并且仅在该值大于单元格大小时滚动移动

【讨论】:

这将负责使用箭头键滚动,但在使用滚动条或其他滚动方式时不会。我希望有更好的东西。 我无法调查您的建议,但我认为很难使其在滚动条和所有内容上直观地正确工作。我可能会尝试将视图简单地包装在一个新的滚动区域中,并处理其中的滚动。

以上是关于如何在 qgraphicsview 中进行非平滑/逐步 scolling的主要内容,如果未能解决你的问题,请参考以下文章

如何在Qgraphicsview上使用QPainter绘图

如何在 QGraphicsView::Scale 之后调整 QGraphicsView 的大小

如何在 QT 中的 QgraphicsView 中保持图像原始

如何在 QGraphicsView 中自动正确设置矩形?

如何通过鼠标单击在 QGraphicsView 中选择位置并添加项目?

如何在 QGraphicsView 中启用平移和缩放