def mouseMoveEvent(self, event): if not (event.buttons() & Qt.LeftButton): return if (event.pos() - self.drag_start_position).manhattanLength() < 2: global correction correction = event.pos() - self.drag_start_position drag = QDrag(self) mimedata = QMimeData() mimedata.setImageData(self.pixmap().toImage()) # изображение в качестве данных, которое потом можно будет дропнуть drag.setMimeData(mimedata) #t = QTransform().rotate(ui.angle) pixmap = QPixmap(drag.mimeData().imageData()) # POGU pixmap = pixmap.scaled(self.size()) painter = QPainter(pixmap) self.setWindowFlags(QtCore.Qt.FramelessWindowHint) self.setAttribute(QtCore.Qt.WA_TranslucentBackground) self.setStyleSheet("background:transparent;") painter.drawPixmap(self.rect(), self.grab()) painter.end() drag.setPixmap(pixmap) drag.setHotSpot(event.pos() - self.rect().topLeft()) drag.exec_(Qt.CopyAction | Qt.MoveAction)
def startDrag(self, event): """ Override startDrag method to display custom icon """ # Get image of selected item selected = self.selectedIndexes() # Start drag operation drag = QDrag(self) drag.setMimeData(self.model.mimeData(selected)) icon = self.model.data(selected[0], Qt.DecorationRole) drag.setPixmap( icon.pixmap(QSize(self.drag_item_size, self.drag_item_size))) drag.setHotSpot( QPoint(self.drag_item_size / 2, self.drag_item_size / 2)) # Create emoji file before drag starts data = json.loads(drag.mimeData().text()) file = self.add_file(data[0]) # Update mimedata for emoji data = QMimeData() data.setText(json.dumps([file.id])) data.setHtml("clip") drag.setMimeData(data) # Start drag drag.exec_()