将QlineF移到qgraphicscen中

2024-09-29 21:31:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图理解,如何在qgraphicscene中移动/转换图形项。你知道吗

在我的代码中,我定义了一个qgraphicscene场景的qgraphicsview。然后用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) 

我试过“设置线(l2)”,“场景.更新()”等。什么都不管用。你知道吗

我可以先删除“l2”行,然后创建新的。但这肯定不是正确的方法!?!你知道吗


Tags: self定义场景scenelnkl2qtcoreadditem
1条回答
网友
1楼 · 发布于 2024-09-29 21:31:26

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)

相关问题 更多 >

    热门问题