gpt4 book ai didi

python - QPainterPath - 移动/删除元素

转载 作者:太空宇宙 更新时间:2023-11-03 14:30:14 26 4
gpt4 key购买 nike

有什么方法可以编辑 QPainterPath 中单个“lineTo”元素的位置(或删除特定元素并用修改后的版本替换它们?)。我尝试使用 *.setElementPositionAt(i,x,y) 无济于事(路径未重绘)。

我基本上希望所有用户使用鼠标动态编辑多段线(通过 qpainterpath 和 lineTo 方法创建)的顶点。

显然,如果有更好的方法在 QGraphicscene 中创建折线,那么也欢迎提出一些建议。

最佳答案

我不确定您是如何使用 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_())

关于python - QPainterPath - 移动/删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12448788/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com