Есть форма (QDialog), на ней много QLineEdit и QComboBox. Мне нужно сделать перемещение фокуса от одного контрола в другой, аналог Tab-а, но по нажатию Enter-а.
делаю так:
MyFilter * eventFilter = new MyFilter(this);
ui->MyComboBox->installEventFilter(MyFilter);
и, соответственно, код фильтра:
MyFilter ::MyFilter (QObject *parent) : QObject(parent)
{
}
//----------------------------------------------------------------------------------------------------
bool MyFilter ::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
int key = keyEvent->key();
if(key == Qt::Key_Enter || key == Qt::Key_Return)
{
QComboBox * comboBox = static_cast<QComboBox *>(obj);
// и тут застрял, как двинуть фокус?
}
return true;
}
else return QObject::eventFilter(obj, event);
}
Что тут делать, как передвинуто фокус? Увидел QWidget::focusNextChild() но он protected, наследование не годится.
делаю так, не работает:
QWidget * parent = (QWidget *)comboBox->parent();
if(parent)
{
QWidget * next = parent->nextInFocusChain();
if(next) next->setFocus(Qt::TabFocusReason);
}
Есть какой то нормальный способ передвинуть фокус?