def eventFilter(self, obj: QObject, event: Union[QDropEvent, QKeyEvent, QEvent]): if event.type() == QEvent.KeyPress and obj == self.lstUsedColumns: if event.key() == Qt.Key_Delete or event.key() == Qt.Key_Backspace: self.remove_selected_columns_colors() event.accept() elif event.type() == QEvent.DragEnter and obj == event.source().viewport(): event.setDropAction(Qt.IgnoreAction) # Do not allow internal drag'n'drop elif event.type() == QEvent.Drop and obj == self.lstUsedColumns.viewport(): if event.source() == self.lstColors: data = event.mimeData() if data.hasFormat('application/x-qabstractitemmodeldatalist'): first_item = self.lstUsedColumns.itemAt(event.pos()) if first_item is not None: model = QStandardItemModel() model.dropMimeData(data, Qt.CopyAction, 0, 0, QModelIndex()) for i in range(model.rowCount()): color = model.item(i, 0).data(Qt.BackgroundRole).color() polygon_id = model.item(i, 0).data(BaseColorMappingDialog.PolygonRole) brushstyle = model.item(i, 0).data(BaseColorMappingDialog.BrushStyleRole) item = self.lstUsedColumns.item(self.lstUsedColumns.row(first_item) + i) if item: item.setBackground(color) item.setData(BaseColorMappingDialog.PolygonRole, polygon_id) item.setData(BaseColorMappingDialog.BrushStyleRole, brushstyle) event.accept() elif event.source() == self.lstColumns: data = event.mimeData() if data.hasFormat('application/x-qabstractitemmodeldatalist'): event.setDropAction(Qt.MoveAction) model = QStandardItemModel() model.dropMimeData(data, Qt.CopyAction, 0, 0, QModelIndex()) for i in range(model.rowCount()): item = model.item(i, 0) new_item = ColumnListWidgetItem(item.data(Qt.DisplayRole), column=item.data(ColumnRole)) bg = item.data(Qt.BackgroundRole) polygon_id = item.data(BaseColorMappingDialog.PolygonRole) brushstyle = item.data(BaseColorMappingDialog.BrushStyleRole) if bg is not None and bg.color().isValid(): new_item.setBackground(bg.color()) new_item.setData(BaseColorMappingDialog.PolygonRole, polygon_id) new_item.setData(BaseColorMappingDialog.BrushStyleRole, brushstyle) self.lstUsedColumns.addItem(new_item) self.lstUsedColumns.sortItems() event.accept() return super().eventFilter(obj, event)
def dropEvent(self, event): ''' docstring: 拖动放事件 ''' if event.mimeData().hasFormat( 'application/x-qabstractitemmodeldatalist'): data = event.mimeData() source_item = QStandardItemModel() source_item.dropMimeData(data, Qt.CopyAction, 0, 0, QModelIndex()) nodename = source_item.item(0, 0).text() # 根据名字生成所需节点 if nodename == 'AS': num = len(self.scene.ASinfo) node = Node(nodetype=0, nodename='AS' + str(num + 1)) self.scene.belongAS[node.id] = node self.scene.ASinfo[node.id] = [node] elif nodename == 'RM': node = Node(nodetype=1) elif nodename == 'BR': node = Node(nodetype=2) elif nodename == 'router': node = Node(nodetype=3) elif nodename == 'switch': node = Node(nodetype=4) elif nodename == 'PC': if self.scene.node_me: return node = Node(nodetype=5, nodename='Me') self.node_me = node pos = self.view.mapToScene(event.pos()) item = self.view.getItemAtClick(event) if isinstance(item, Text): if item.parent: item = item.parent if item and not item.myType: # print(item.myType, item.name) self.scene.belongAS[node.id] = item self.scene.ASinfo[item.id].append(node) item.modifyCount(1) elif node.myType: self.scene.waitlist.append(node) self.scene.addItem(node) node.setPos(pos) if self.labelenable: node.label.show() else: node.label.hide()
def dropEvent(self, event): if event.mimeData().hasFormat('application/x-qabstractitemmodeldatalist'): data = event.mimeData() source_item = QStandardItemModel() source_item.dropMimeData(data, Qt.CopyAction, 0, 0, QModelIndex()) Instruction = source_item.item(0, 0).text() if event.source() != self: event.setDropAction(Qt.CopyAction) TempItem = QListWidgetItem() TempItem.setText(Instruction) TempItem.setTextAlignment(Qt.AlignCenter) # TempItem.setData() self.addItem(TempItem) self.AddNewItem(Instruction) else: event.setDropAction(Qt.MoveAction) PrevIndex = self.selectedIndexes()[0].row() super(NewListWidget, self).dropEvent(event) CurrentIndex = self.selectedIndexes()[0].row() self.ItemSwap(PrevIndex, CurrentIndex) self.UpdateIndex() else: event.ignore()
def dragEnterEvent(self, event): data = event.mimeData() source_item = QStandardItemModel() source_item.dropMimeData(data, QtCore.Qt.CopyAction, 0, 0, QtCore.QModelIndex()) print(source_item.item(0, 0).text())