Ich habe multi-select gemacht QComboBox
. Elemente sind überprüfbar (jedes Element hat Kontrollkästchen und Textwert). CheckBox wird nur überprüft, wenn der Benutzer darauf klickt. Was ich will, ist, Signal zu fangen, wenn Benutzer auf Textwert klickt, also kann ich das Kontrolle-Kästchen neben es markieren lassen. Wie geht das?Fang Maustaste gedrückt Signal aus qKombiBox Popup-Menü
Dies ist, wie ich Modell Kombinationsfeld gesetzt:
areas = ["Area one", "Area two", "Area three", "Area four"]
model = QtGui.QStandardItemModel(5, 1)# 5 rows, 1 col
firstItem = QtGui.QStandardItem("---- Select area(s) ----")
firstItem.setBackground(QtGui.QBrush(QtGui.QColor(200, 200, 200)))
firstItem.setSelectable(False)
model.setItem(0, 0, firstItem)
for i,area in enumerate(areas):
item = QtGui.QStandardItem(area)
item.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
item.setData(QtCore.Qt.Unchecked, QtCore.Qt.CheckStateRole)
model.setItem(i+1, 0, item)
self.ui.comboBox.setModel(model)
self.ui.comboBox.installEventFilter(self)
I Ereignisfilter hinzugefügt haben Rad-Ereignis zu blockieren, so firstItem
‚s Text wird als "gewählt" immer angezeigt
def eventFilter(self,target,event):
if target == self.ui.comboBox:
if(event.type()== QtCore.QEvent.Wheel):
#wheel event is blocked here
return True
return False
Indem Sie den eventFilter ändern und in der Hauptanwendung installieren, um jedes einzelne ausgelöste Ereignis zu sehen. Bei der Interaktion mit der ComboBox scheinen überhaupt keine Ereignisse gesendet zu werden:/ – M4rtini