在 QGraphicsView 中获取 QGraphicsScene 的可见区域 [重复]

Posted

技术标签:

【中文标题】在 QGraphicsView 中获取 QGraphicsScene 的可见区域 [重复]【英文标题】:Getting the visible area of a QGraphicsScene in QGraphicsView [duplicate] 【发布时间】:2013-07-29 12:04:15 【问题描述】:

如果我将像素图设置为比窗口大的QGraphicsScene,它将添加滚动条,那么是否可以获得QGraphicsView 中显示的内容?

滚动和更改显示区域时是否引发任何事件?

这是我正在谈论的屏幕:

谢谢

【问题讨论】:

【参考方案1】:

您可以按如下方式确定场景坐标中的可见区域:

QRect viewport_rect(0, 0, view->viewport()->width(), view->viewport()->height());
QRectF visible_scene_rect = view->mapToScene(viewport_rect).boundingRect();

您可以使用QGraphicsItem::mapFromScene将场景坐标转换为物品坐标。

您可以使用view->horizontalScrollBar()view->verticalScrollBar() 来获取QScrollBar* 对象。连接到这些对象的valueChanged(int) 信号以跟踪滚动。

【讨论】:

您确定 QScrollBar 连接吗?我在编译时得到了这个:connect(horizontalScrollBar(), SIGNAL(valueChanged(int)), ((QGraphicsView*)this), SLOT(scrollMoved(int)));graphicScene.cpp:30:107: error: no matching function for call to ‘GraphicScene::connect(QScrollBar*, const char [19], QGraphicsView*, const char [18])’ 对不起,我忘了包括QScrollBar :) 非常感谢,您为我节省了几个小时 :D 我尝试了很多不同的解决方案。【参考方案2】:

另外,请注意视口包含一个函数,可以将场景的某个区域放入视图中,以便您可以使用以下命令查看所有该区域:-

void QGraphicsView::fitInView(const QRectF & rect, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio)

【讨论】:

不正确。 sceneRect 返回视图中所有滚动条位置可见的总面积。场景矩形可以大于视口,并且不依赖于滚动条位置。 糟糕,我的错误。你是对的,谢谢指出。我已经编辑了答案的那部分。

以上是关于在 QGraphicsView 中获取 QGraphicsScene 的可见区域 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 QGraphicsView 中获取 QGraphicsScene 的可见区域 [重复]

获取 QGraphicsView 的更新大小

QGraphicsView:如何高效获取QGraphicsItems的视口坐标?

QGraphicsView 中的 MouseMoveEvent

如何从 qgraphicsview 中的 qgraphicsitem 获取不同的上下文菜单?

QT:我需要通过 QGraphicsScene 获取添加到 QGraphicsView 的图像坐标