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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Перехватить нажатие Tab  (Прочитано 3254 раз)
mal
Гость
« : Сентябрь 16, 2010, 13:46 »

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

Вопрос: как в паренте этих чайлдов перехватить нажатие Tab ? Ну или если не в паренте, то может быть в одном из чайлдов, чтоб потом кинуть сообщение паренту можно было о произошедшем собитии.
В последнем случае можно изгалиться и узнать, что чайлд принял/потерял фокус (focusInEvent/focusOutEvent).  Но это
не даст мне информации, о том что было нажат именно Tab (или Shift+Tab).
Можно привязаться к конкретной задаче, но сейчас я хочу узнать, как в данной ситуации отследить именно нажатие Tab.
Поможите чем можете плз.
« Последнее редактирование: Сентябрь 16, 2010, 13:47 от mal » Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #1 : Сентябрь 16, 2010, 13:58 »

Использовать фильтр событий: http://doc.trolltech.com/4.6/eventsandfilters.html#event-filters
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
mal
Гость
« Ответ #2 : Сентябрь 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;
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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