在QGraphicsScene中拖动时调用了哪些方法

时间:2013-10-21 03:57:21

标签: python qt drag-and-drop pyqt

我希望能够在QGraphicsScene中拖动QGraphicsItem的实例,并在用户停止拖动时调用自定义代码。

我可以通过以下完整的工作示例使图形项可拖动(使用PyQt .C ++用户只需将self读为this

import sys
from PyQt4 import QtGui, QtCore

class MainWindowUi(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.scene = Scene(0, 0, 300, 300, self)
        self.view = QtGui.QGraphicsView()
        self.setCentralWidget(self.view)
        self.view.setScene(self.scene)
        self.scene.addItem(Square(0,0,50,50))

class Scene(QtGui.QGraphicsScene):

    def mousePressEvent(self, e):
        print("Scene got mouse press event")
        print("Event came to us accepted: %s"%(e.isAccepted(),))
        QtGui.QGraphicsScene.mousePressEvent(self, e)

    def mouseReleaseEvent(self, e):
        print("Scene got mouse release event")
        print("Event came to us accepted: %s"%(e.isAccepted(),))
        QtGui.QGraphicsScene.mouseReleaseEvent(self, e)

    def dragMoveEvent(self, e):
        print('Scene got drag move event')

class Square(QtGui.QGraphicsRectItem):
    def __init__(self, *args):
        QtGui.QGraphicsRectItem.__init__(self, *args)
        self.setFlag(QtGui.QGraphicsItem.ItemIsMovable, True)
        self.setFlag(QtGui.QGraphicsItem.ItemIsSelectable, True)

    def mousePressEvent(self, e):
        print("Square got mouse press event")
        print("Event came to us accepted: %s"%(e.isAccepted(),))
        QtGui.QGraphicsRectItem.mousePressEvent(self, e)

    def mouseReleaseEvent(self, e):
        print("Square got mouse release event")
        print("Event came to us accepted: %s"%(e.isAccepted(),))
        QtGui.QGraphicsRectItem.mouseReleaseEvent(self, e)

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    win = MainWindowUi()
    win.show()
    sys.exit(app.exec_())

当我们点击方块时,我们会看到场景和广场的打印陈述。可以拖动方块。当我们释放鼠标时,我们会看到Scene和Square的打印语句。

问题是:在拖动过程中和完成拖动时执行哪些方法?例如,当我释放鼠标时,需要在示例中添加什么来打印方块的位置?

0 个答案:

没有答案
相关问题