我试图了解如何在QGraphicsScene中移动/转换图形项。
在我的代码中,我定义了一个场景为QGraphicsScene的QGraphicView。然后,我用QLineF创建一行“ l2”。然后,将“ l2”定义为QGraphicsItem“ lnk”,并定义pen,isSelectable和isMovable。 我使用“ addItem”将其添加到场景中
后记我阅读了起点和终点,操纵了终点并希望在场景中更新线。在这里我失败了。
我的代码是
self.gvCanvas.setGeometry(QtCore.QRect(20, 10, 501, 501))
self.scene = QtWidgets.QGraphicsScene()
l2 = QtCore.QLineF(100,100,300,70)
penlnk = QtGui.QPen(QtCore.Qt.black,3,QtCore.Qt.SolidLine)
lnk = QGraphicsLineItem(l2)
lnk.setPen(penlnk)
lnk.setFlag(QtWidgets.QGraphicsItem.ItemIsSelectable, True)
lnk.setFlag(QtWidgets.QGraphicsItem.ItemIsMovable, True)
self.scene.addItem(lnk)
pt1 = l2.p1()
pt2 = l2.p2()
xpos = pt2.x()+1500
ypos = pt2.y()
ypos = ypos+500
ptnew=QtCore.QPoint(xpos,ypos)
l2 = QtCore.QLineF(pt1,ptnew)
我尝试了“ setLine(l2)”,“ scene.update()”等。什么都没有。
我可以先删除“ l2”行,然后再新建。但这肯定不是正确的方法!?!
答案 0 :(得分:0)
QGraphicsLineItem复制l2的值,因此修改l2不会修改QGraphicsLineItem,您必须做的是使用setLine()将新行设置为该项,此方法将在内部调用update()
方法:
# ...
ptnew=QtCore.QPoint(xpos,ypos)
l2 = QtCore.QLineF(pt1,ptnew)
lnk.setLine(l2)
您之前的代码可以简化为以下代码:
self.gvCanvas.setGeometry(QtCore.QRect(20, 10, 501, 501))
self.scene = QtWidgets.QGraphicsScene()
l2 = QtCore.QLineF(100,100,300,70)
penlnk = QtGui.QPen(QtCore.Qt.black, 3, QtCore.Qt.SolidLine)
lnk = QGraphicsLineItem(l2)
lnk.setPen(penlnk)
lnk.setFlag(QtWidgets.QGraphicsItem.ItemIsSelectable, True)
lnk.setFlag(QtWidgets.QGraphicsItem.ItemIsMovable, True)
self.scene.addItem(lnk)
l2.setP2(l2.p2() + QtCore.QPointF(1500, 500))
lnk.setLine(l2)