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)
添加回答
舉報