我编写了以下示例代码来说明令我困惑的是:
from PyQt4 import QtGui, QtCore
import sys
class Spam(QtGui.QWidget):
def __init__(self):
super(Spam, self).__init__()
self.setGeometry(50, 50, 400, 400)
self.scene = QtGui.QGraphicsScene(self)
self.view = QtGui.QGraphicsView(self.scene, self)
def resizeEvent(self, event):
self.view.setFixedSize(event.size())
self.view.setSceneRect(-100, -100, 200, 200)
rect = self.view.sceneRect()
print(rect.x(), rect.y(), rect.width(), rect.height())
print(self.view.mapFromScene(-100, -100))
def run():
app = QtGui.QApplication(sys.argv)
GUI = Spam()
GUI.show()
sys.exit(app.exec_())
run()
这样做是因为它创建了一个QGraphicsView链接到空QGraphicsScene的窗口,并通过更改视图的大小并将QGraphicsView的sceneRect设置为(-100,-100,以响应resize事件) 200,200)。我相信场景中的点(-100,-100)应对应于视图中的(0,0),因为它是sceneRect的左上角。但是,当我从场景中映射(-100,-100)时,我得到(99,99)并且我不知道为什么。这是上述程序的输出:
>>>
-100.0 -100.0 200.0 200.0
PyQt4.QtCore.QPoint(99, 99)
我在紧接点之前打印了sceneRect的尺寸,以确保它不会因为任何原因从我设置的内容发生变化。我确定我只是遗漏了一些显而易见的东西,但我现在已经看了一段时间而且我不明白发生了什么。