在场景中拖动qgraphicsitem可以通过多种方式完成。但对我来说最有趣的是附加标志“itemIsMovable”因为它应该更加“原生”与Qt库。
我的问题是;项目是否拖动应该打印它的位置?记住,我们已经标记,项目正在移动,位置正在某处返回。
羽绒就是一个例子。问题是如何以交互方式更新矩形和圆形之间的连接线(使用工具栏图标添加带有连接线的圆)。
import sys
from PySide import QtCore, QtGui
class drawCircle(QtGui.QGraphicsItem):
def __init__(self, scene):
self.Circle = QtGui.QGraphicsEllipseItem(-20, -20, 40, 40)
self.Circle.setPos(50,50)
self.Circle.setFlag(QtGui.QGraphicsItem.ItemIsMovable)
scene.addItem(self.Circle)
self.Line = QtGui.QGraphicsLineItem(-20, -20, 40, 40)
self.Line.setLine(0, 0, self.Circle.pos().x(), self.Circle.pos().y())
scene.addItem(self.Line)
class winScene(QtGui.QGraphicsScene):
def __init__(self):
super(winScene, self).__init__()
self.setSceneRect(0,0,450,200)
self.addItem(QtGui.QGraphicsRectItem(-20, -20, 40, 40))
class SceneWindow(QtGui.QMainWindow):
def __init__(self):
super(SceneWindow, self).__init__()
self.DefineSceneWindow()
def DefineSceneWindow(self):
self.SchSc = winScene()
view = QtGui.QGraphicsView(self.SchSc)
view.setRenderHint(QtGui.QPainter.Antialiasing)
view.scale(1,1)
self.setCentralWidget(view)
self.setGeometry(0, 300, 500, 300)
self.show()
self.drRect = QtGui.QAction(QtGui.QIcon('paint_brush.png'), 'Draw Circle', self)
self.drRect.setShortcut('Ctrl+R')
self.drRect.triggered.connect(self.DefineAction)
self.toolbar = self.addToolBar('tools')
self.toolbar.addAction(self.drRect)
def DefineAction(self):
drawCircle(self.SchSc)
def main():
app = QtGui.QApplication(sys.argv)
ex = SceneWindow()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
答案 0 :(得分:2)
您需要重新实现QGraphicsItem.itemChange(change, value)
以检测场景位置的变化。 PySide docs有一个直接相关的例子。