3

QPainterPath 内の個々の「lineTo」要素の位置を編集する方法はありますか (または、特定の要素を削除して、変更されたバージョンに置き換えますか?)。*.setElementPositionAt(i,x,y) を使用してみましたが、役に立ちませんでした (パスは再描画されません)。

私は基本的に、すべてのユーザーがポリライン (qpainterpath および lineTo 方法論で作成されたもの) の頂点をマウスで動的に編集できるようにしたいと考えています。

明らかに、QGraphicscene でポリラインを作成するためのより良い方法があれば、それに関するアドバイスも歓迎されます。

4

1 に答える 1

5

をどのように使用しているかはわかりませんがsetElementPositionAt、機能します。のトリックQGraphicsSceneは をaddPath返すことであり、そのメソッドを使用QGraphicsPathItemして変更された でそのアイテムを更新する必要があります。QPainterPathsetPath

簡単な例:

import sys
from PySide import QtGui

class Widget(QtGui.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)

        self.view = QtGui.QGraphicsView()
        self.scene = QtGui.QGraphicsScene()
        self.scene.setSceneRect(0,0,100,100)
        self.view.setScene(self.scene)

        self.button = QtGui.QPushButton('Move path')
        self.button.clicked.connect(self.movePath)

        layout = QtGui.QHBoxLayout()
        layout.addWidget(self.view)
        layout.addWidget(self.button)

        self.setLayout(layout)

        self.createPath()

    def createPath(self):
        path = QtGui.QPainterPath()

        path.moveTo(25, 25)
        path.lineTo(25, 75)
        path.lineTo(75, 75)
        path.lineTo(75, 25)
        path.lineTo(25, 25)

        self.pathItem = self.scene.addPath(path)

    def movePath(self):
        # get the path
        path = self.pathItem.path()

        # change some elements
        # element 0: moveTo(25, 25)
        # element 1: lineTo(25, 75)
        # element 2: lineTo(75, 75)
        # ...
        path.setElementPositionAt(2, 90, 85)
        path.setElementPositionAt(3, 90, 15)

        # set the new path
        self.pathItem.setPath(path)

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)

    main = Widget()
    main.show()

    sys.exit(app.exec_())
于 2012-09-18T07:12:15.570 に答える