Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: mal от Сентябрь 16, 2010, 13:46



Название: Перехватить нажатие Tab
Отправлено: mal от Сентябрь 16, 2010, 13:46
Дано: есть виджет. QMainWindow или QDialog - не суть.
В виджете размещено несколько чайлдов.
По табуляции идет смена фокуса по этим чайлдам.
Перекрытие keyPressEvent как у парента, так и у чайлдов ничего не дает - не приходит туда событие о нажатии Tab .

Вопрос: как в паренте этих чайлдов перехватить нажатие Tab ? Ну или если не в паренте, то может быть в одном из чайлдов, чтоб потом кинуть сообщение паренту можно было о произошедшем собитии.
В последнем случае можно изгалиться и узнать, что чайлд принял/потерял фокус (focusInEvent/focusOutEvent).  Но это
не даст мне информации, о том что было нажат именно Tab (или Shift+Tab).
Можно привязаться к конкретной задаче, но сейчас я хочу узнать, как в данной ситуации отследить именно нажатие Tab.
Поможите чем можете плз.


Название: Re: Перехватить нажатие Tab
Отправлено: kibsoft от Сентябрь 16, 2010, 13:58
Использовать фильтр событий: http://doc.trolltech.com/4.6/eventsandfilters.html#event-filters


Название: Re: Перехватить нажатие Tab
Отправлено: mal от Сентябрь 16, 2010, 14:07
Да. Спасибо. Так и сделал.

Код:
bool CMainWnd::eventFilter(QObject *obj, QEvent *ev)
{
if(ev->type() == QEvent::KeyPress)
{
QKeyEvent *key_ev = dynamic_cast<QKeyEvent*>(ev);
if(key_ev->key() == Qt::Key_Tab)
{
// делаю что мне надо
                }
else
return false;
}

return false;
}