我正在尝试编写绘图程序,但我在绘制线条方面遇到了问题。当我在QGraphicsView
的底部绘制一条线时,该线被绘制到小部件的中心。为什么?我认为我对mapTo
函数的理解不够好,但是我读的Qt文档越多,我得到的就越混乱。希望有人可以提供帮助。
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys
class Main(QWidget):
def __init__(self, parent):
super(Main, self).__init__(parent)
self.resize(300, 300)
vBox = QVBoxLayout(self)
view = View(self)
vBox.addWidget(view)
def keyPressEvent(self, event):
if event.key() == Qt.Key_Escape:
sys.exit()
class View(QGraphicsView):
def __init__(self, parent):
super(View, self).__init__(parent)
self.scene = QGraphicsScene(self)
self.setScene(self.scene)
def mousePressEvent(self, event):
self.start = event.pos()
def mouseReleaseEvent(self, event):
self.stop = event.pos()
self.line = Line(self, self.start, self.stop)
self.scene.addItem(self.line)
class Line(QGraphicsLineItem):
def __init__(self, parent, *args):
# args = start, stop
points = map(parent.mapToScene, args)
(start, stop) = map(QPointF, points)
self.line = QLineF(start, stop)
super(Line, self).__init__(self.line)
def run():
app = QApplication(sys.argv)
a = Main(None)
a.show()
sys.exit(app.exec_())
run()
答案 0 :(得分:2)
如果没有为场景设置矩形,将自动计算一个矩形,视图将以其自身为中心。
要解决此问题,请将以下内容添加到View.__init__()
:
self.setSceneRect(QRectF(self.viewport().rect()))