2 回答

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊
我相信你的計(jì)算方式size是錯(cuò)誤的。您應(yīng)該相對于 的翻譯值來計(jì)算它pos。既然知道寬高的值,那么就可以view_area根據(jù) 的場景值計(jì)算 的右下角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())
如果沒有減法,您假設(shè)的原點(diǎn)view_area是 ,(0, 0)而實(shí)際上它是pos。

TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊
為了將尺寸縮放到場景坐標(biāo)系,我將尺寸作為一個(gè)點(diǎn)傳遞給mapToScene.
但是點(diǎn)和大小在概念上是不同的,雖然大小不依賴于坐標(biāo)系的原點(diǎn),但點(diǎn)是。 mapToScene,將其論點(diǎn)視為一個(gè)點(diǎn),正在將其翻譯以反映新的坐標(biāo)系。
因此我需要減去新坐標(biāo)系的原點(diǎn),它實(shí)際上是視口的左上角,以取回尺寸。
一個(gè)更簡單的解決方案是直接映射視口矩形:
rect = self.mapToScene(self.viewport().rect())
rect = rect.boundingRect() # mapToScene(rect) returns QPolygonF
self.sigViewportAreaChanged.emit(rect)
添加回答
舉報(bào)