Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: folibis от Июль 07, 2010, 02:27



Название: Переместить фокус на форме
Отправлено: folibis от Июль 07, 2010, 02:27
Есть форма (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);
}
Есть какой то нормальный способ передвинуть фокус?


Название: Re: Переместить фокус на форме
Отправлено: DOOMer от Июль 07, 2010, 09:08
Если форма создана как ui-файл в дизайнере, то порядок следования TAb'а по контролам можно настроить в том же дизайнере.  Меню Edit -> Edit Tab Order, и далее мышкой расставляете порядок переключения фокуса по контролам.


Название: Re: Переместить фокус на форме
Отправлено: folibis от Июль 07, 2010, 12:25
Вроде придумал как сделать
Код:
if(key == Qt::Key_Enter || key == Qt::Key_Return)
{
QWidget * control = static_cast<QWidget *>(obj);
QWidget * next = control->nextInFocusChain();
if(next) next->setFocus(Qt::TabFocusReason);
}