Решил изменением EventFilter:
MyComboBox::MyComboBox(QWidget *parent) : QComboBox(parent)
{
view()->installEventFilter(this);
view()->viewport()->installEventFilter(this);
}
MyComboBox::~MyComboBox()
{
hidePopup();
}
bool MyComboBox::eventFilter(QObject* object, QEvent* event)
{
if (object == view())
{
switch (event->type())
{
//case QEvent::KeyPress:
case QEvent::ShortcutOverride:
switch (static_cast<QKeyEvent*>(event)->key())
{
case Qt::Key_Enter:
case Qt::Key_Return:
setCurrentIndex(view()->currentIndex().row());
emit myActivated(currentIndex());
return false;
}
break;
case QEvent::FocusOut:
emit myHideView();
return false;
}
}
else if (object == view()->viewport() && event->type() == QEvent::MouseButtonRelease)
{
QMouseEvent *m = static_cast<QMouseEvent *>(event);
if (view()->rect().contains(m->pos()))
{
setCurrentIndex(view()->currentIndex().row());
emit myActivated(currentIndex());
return false;
}
}
return QComboBox::eventFilter(object, event);
}
Вместо стандартного сигнала activated использую свой myActivated, т.к. стандартный вызывается и когда надо и когда не надо, отчего выбор записи глючит. В делегате сигнал myActivated привязал к commitAndClose, а сигнал myHideView к обработчику сигнала closeEditor.
Кстати, глюк, описанный в посте
http://www.prog.org.ru/topic_9697_0.html у комбобоксов в таблице не наблюдается, в отличие от отдельного MyComboBox на форме