Criei este widget de multi-seleção para o meu projeto. Contudo, eu não consigo fazer com que ele drope ao clicar em cima dele. Tentei criar um evento para isso e não obtive sucesso. from PySide6.QtWidgets import ( QComboBox, QListView, QStyledItemDelegate, QStyleOptionButton, QStyle ) from PySide6.QtCore import Qt, QAbstractListModel, QRect, QEvent, Slot class MultiSelectComboBox(QComboBox): def __init__(self): super().__init__() self.setView(QListView()) self.view().setEditTriggers(QListView.NoEditTriggers) self.model = MultiSelectModel() self.setModel(self.model) self.view().setModel(self.model) self.view().setItemDelegate(CustomDelegate(self)) self.view().viewport().installEventFilter(self) self.setEditable(True) self.lineEdit().setReadOnly(True) def handleItemPressed(self, index): if not index.isValid(): return item = self.model.items[index.row()] item.checked = not item.checked self.model.dataChanged.emit(index, index) self.updateText() def updateText(self): self.checked_items = [ item.text.split("|")[0].strip() for item in self.model.items if item.checked ] text = ", ".join(self.checked_items) self.lineEdit().setText(text) def eventFilter(self, obj, event): if obj == self.view().viewport() and event.type() == QEvent.MouseButtonRelease: index = self.view().indexAt(event.position().toPoint()) if index.isValid(): self.handleItemPressed(index) return True return super().eventFilter(obj, event) def get_indexs(self): indexs = [] for i in range(self.model.rowCount()): index = self.model.index(i) if self.model.data(index, Qt.CheckStateRole) == Qt.Checked: indexs.append(i) return indexs def mousePressEvent(self, event): # Se o evento for um clique com o botão esquerdo if event.button() == Qt.LeftButton: # Verifique se o menu suspenso já está aberto if not self.view().isVisible(): self.showPopup() # Isso abrirá o menu suspenso return super().mousePressEvent(event) Continue reading...