Qt线绘图到意外位置

时间:2011-11-19 01:41:36

标签: qt qt4 pyqt pyqt4

我正在尝试编写绘图程序,但我在绘制线条方面遇到了问题。当我在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()

1 个答案:

答案 0 :(得分:2)

如果没有为场景设置矩形,将自动计算一个矩形,视图将以其自身为中心。

要解决此问题,请将以下内容添加到View.__init__()

的末尾
self.setSceneRect(QRectF(self.viewport().rect()))