Russian Qt Forum
Сентябрь 30, 2024, 16:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Переместить фокус на форме  (Прочитано 4484 раз)
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);
}
Есть какой то нормальный способ передвинуть фокус?
Записан
DOOMer
Чайник
*
Offline Offline

Сообщений: 95



Просмотр профиля
« Ответ #1 : Июль 07, 2010, 09:08 »

Если форма создана как ui-файл в дизайнере, то порядок следования TAb'а по контролам можно настроить в том же дизайнере.  Меню Edit -> Edit Tab Order, и далее мышкой расставляете порядок переключения фокуса по контролам.
Записан

Linux x86_64 && Qt 5.4.0 && Qt 4.8.6t && GCC 4.9.2
folibis
Гость
« Ответ #2 : Июль 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);
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.044 секунд. Запросов: 22.