def mouseMoveEvent(self, event): """ Re-implemented to create a drag event when the mouse is moved for a sufficient distance while holding down mouse button. """ # go into the drag logic only if a drag_obj is active if self.drag_obj: # is the left mouse button still pressed? if not event.buttons() == QtCore.Qt.LeftButton: pass # has the mouse been dragged for sufficient distance? elif ( event.pos() - self.drag_obj.start_pos ).manhattanLength() < QtGui.QApplication.startDragDistance(): pass # initiate drag else: drag = QtGui.QDrag(self.drag_obj.widget) mimedata = PyMimeData(data=self.drag_obj, pickle=False) drag.setPixmap(self.drag_obj.get_pixmap()) drag.setHotSpot(self.drag_obj.get_hotspot()) drag.setMimeData(mimedata) drag.exec_() self.drag_obj = None # deactivate the drag_obj again return return super(DraggableTabBar, self).mouseMoveEvent(event)
def startDrag(self, actions): if self._editor.factory.drag_external: idxs = self.selectedIndexes() rows = sorted(list(set([idx.row() for idx in idxs]))) drag_object = [(ri, self._editor.value[ri]) for ri in rows] md = PyMimeData.coerce(drag_object) self._dragging = self.currentIndex() drag = QtGui.QDrag(self) drag.setMimeData(md) drag.exec_(actions) else: super(_TableView, self).startDrag(actions)