2 回答
TA贡献2021条经验 获得超8个赞
我相信你的计算方式size是错误的。您应该相对于 的翻译值来计算它pos。既然知道宽高的值,那么就可以view_area根据 的场景值计算 的右下角pos。
viewport_pos = self.viewport().pos()
scene_pos = self.mapToScene(viewport_pos)
width = self.viewport().size().width()
height = self.viewport().size().height()
lower_right_corner = QPointF(width - scene_pos.x(), height() - scene_pos.y())
如果没有减法,您假设的原点view_area是 ,(0, 0)而实际上它是pos。
TA贡献1886条经验 获得超2个赞
为了将尺寸缩放到场景坐标系,我将尺寸作为一个点传递给mapToScene.
但是点和大小在概念上是不同的,虽然大小不依赖于坐标系的原点,但点是。 mapToScene,将其论点视为一个点,正在将其翻译以反映新的坐标系。
因此我需要减去新坐标系的原点,它实际上是视口的左上角,以取回尺寸。
一个更简单的解决方案是直接映射视口矩形:
rect = self.mapToScene(self.viewport().rect())
rect = rect.boundingRect() # mapToScene(rect) returns QPolygonF
self.sigViewportAreaChanged.emit(rect)
添加回答
举报
