Я использую редактируемый QCombobox с Completer и Model, когда текст не совпадает ни с одной записью в модели, и я нажимаю Enter, когда Combobox очищается. Когда я использую Tab, он не проверяется, находится ли запись в модели, а просто сохраняется и записывается в модель, сопоставленную с ней через QDataWidgetMapper. Я попытался решить проблему с помощью создания подкласса ComboBox и введения KeyEventFilter и / или eventFilter для обоих методов, которые не работали, событие просто не было перехвачено. KeyeventFilter добился небольшого успеха, захватив событие enter.
def eventFilter(self, obj, e):
if e.type() == QEvent.ShortcutOverride:
logger.debug(e.key(), Qt.Key_Tab)
if e.key() == Qt.Key_Tab:
if not self.model().contains(self.currentText()):
# contains is PseudoCode I use something else
# from my subclass of the QAbstractTableModel
self.setCurrentText("")
return True
else:
pass
else:
pass
return QComboBox.eventFilter(self, obj, e)
Я не могу найти никакого решения для этого. Может быть, вы можете помочь C код должен быть в порядке.