Hi,
Task:
Drag item from QTreeWidget and drop it to QGraphicsView
Here is the property set up and function to start the drag in QTreeWidget.
I am not using any more function except this one:
....
#
self.setDragEnabled(True)
self.setHeaderHidden(True)
self.setColumnCount(1)
self.setFocusPolicy(QtCore.Qt.NoFocus)
def startDrag(self, supportedActions):
print self.currentItem().text(0)
currentItemName = self.currentItem().text(0)
mimeData.setText(currentItemName)
drag.setMimeData(mimeData)
dropAction = drag.start(QtCore.Qt.CopyAction)
....
#
self.setDragEnabled(True)
self.setHeaderHidden(True)
self.setColumnCount(1)
self.setFocusPolicy(QtCore.Qt.NoFocus)
def startDrag(self, supportedActions):
print self.currentItem().text(0)
currentItemName = self.currentItem().text(0)
mimeData = QtCore.QMimeData()
mimeData.setText(currentItemName)
drag = QtGui.QDrag(self)
drag.setMimeData(mimeData)
dropAction = drag.start(QtCore.Qt.CopyAction)
To copy to clipboard, switch view to plain text mode
Here is the property set up and function for dropping in QGraphicsView.
I am using only two functions here:
....
self.setScene(QxScene(self))
self.
setRenderHint(QtGui.
QPainter.
Antialiasing,
1)self.
setOptimizationFlags(QtGui.
QGraphicsView.
DontSavePainterState)self.
setViewportUpdateMode(QtGui.
QGraphicsView.
SmartViewportUpdate)self.setBackgroundBrush(QtCore.Qt.lightGray)
self.setAcceptDrops(True)
def dragEnterEvent(self, event):
if event.mimeData().hasText():
event.acceptProposedAction()
print "enter accepted"
else:
print "enter ignore"
event.ignore()
def dropEvent(self, event):
if event.mimeData().hasText():
xmlFileName = event.mimeData().text()
position = event.pos()
event.setDropAction(QtCore.Qt.CopyAction)
event.accept()
print xmlFileName, position
else:
print "drop ignore"
event.ignore()
....
self.setScene(QxScene(self))
self.setCacheMode(QtGui.QGraphicsView.CacheBackground)
self.setRenderHint(QtGui.QPainter.Antialiasing, 1)
self.setDragMode(QtGui.QGraphicsView.RubberBandDrag)
self.setOptimizationFlags(QtGui.QGraphicsView.DontSavePainterState)
self.setViewportUpdateMode(QtGui.QGraphicsView.SmartViewportUpdate)
self.setBackgroundBrush(QtCore.Qt.lightGray)
self.setAcceptDrops(True)
def dragEnterEvent(self, event):
if event.mimeData().hasText():
event.acceptProposedAction()
print "enter accepted"
else:
print "enter ignore"
event.ignore()
def dropEvent(self, event):
if event.mimeData().hasText():
xmlFileName = event.mimeData().text()
position = event.pos()
event.setDropAction(QtCore.Qt.CopyAction)
event.accept()
print xmlFileName, position
else:
print "drop ignore"
event.ignore()
To copy to clipboard, switch view to plain text mode
As soon as mouse is entering in QGraphicsView, message "event accepted" is getting printed in function "dragEnterEvent".
Problem is that cursor is still forbidden cursor and I can't drop.
Cheers
Prashant
Python 2.5.2
PyQt-Py2.5-gpl-4.4.3-1
Win XP, 32 Bit
Bookmarks