2012-09-16 280 views
2

是否有任何方式編輯個體了lineTo'元素的一個QPainterPath的位置(或移除特定元件,並用修改後的版本替換它們?)。我試過使用* .setElementPositionAt(i,x,y)無效(路徑不重繪)。QPainterPath - 移動/刪除元素

我基本上希望所有用戶編輯折線(通過qpainterpath和LineTo等方法創建)的頂點動態鼠標。

顯然,如果有更好的方法來創建一個QGraphicscene折線然後一些意見上也將受到歡迎。

回答

3

我不知道你是如何使用setElementPositionAt但它的作品。與QGraphicsScene訣竅是,addPath返回QGraphicsPathItem,你需要使用它的方法setPath修改QPainterPath更新該項目。

一個簡單的例子:

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_()) 
+0

很多很多的感謝,這是真正的幫助。我使用的是QGraphicsPathItem,但由於某種原因,當我直接在場景中添加路徑/ setPath時,整個事情都奏效了。感謝你的例子,我也做了一些其他的改變。太棒了。再次感謝。 Avaris的 –

+0

+1。他抽出時間來展示確切的例子。這是真正的價值。 – Alex