2012-09-16 206 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