C++ (Qt)bool ComboBoxDelegate::eventFilter(QObject* editor, QEvent* event ){ QComboBox * comboBox = static_cast<QComboBox*>(editor); if (comboBox) { if (event->type() == QEvent::KeyPress) { QKeyEvent * keyEvent = static_cast<QKeyEvent*>(event); if(keyEvent->key()==Qt::Key_Tab || keyEvent->key()==Qt::Key_Backtab) { emit closeEditor(comboBox, QAbstractItemDelegate::RevertModelCache); return true; } else if(keyEvent->key() == Qt::Key_Right || keyEvent->key() == Qt::Key_Left) { return true; } } else if (event->type() == QEvent::FocusOut) { QWidget * widget = qApp->focusWidget(); if(!widget) return false; if (QLatin1String(widget->metaObject()->className()) == QLatin1String("QComboBoxListView") || QLatin1String(widget->metaObject()->className()) == QLatin1String("QComboBox" )) { return true; } emit closeEditor(comboBox, QAbstractItemDelegate::RevertModelCache); return true; } } return QItemDelegate::eventFilter(editor, event);}