Beispiel #1
0
    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()
Beispiel #3
0
	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()
Beispiel #4
0
 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())