Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Crazy Sage от Октябрь 12, 2015, 16:54



Название: Проблема с обходом по tab'у при установке eventFilter
Отправлено: Crazy Sage от Октябрь 12, 2015, 16:54
Доброго дня. Сразу предупреждаю, что я в курсе, что описаная ниже конструкция несколько порнографична, но как её радикально улучшить я не представляю.

Есть сложная главная форма, основная её часть создана в дизайнере, но на тулбар надо добавить несколько QComboBox'ов, чего дизайнер делать не позволяет, поэтому эти виджеты добавляются уже в cpp.
Далее возникла необходимость управлять курсором с клавиатуры, но если фокус стоит на этих комбобоксах или одном из QTreeWidget'ов, присутствующих на форме, то клавиатурные события до DlgMain::keyPressEvent(QKeyEvent*) не доходят.
Для исправления этого пришлось делать на эти виджеты installEventFilter
сам фильтр имеет следующий вид
Код:
bool DlgMain::eventFilter(QObject* o, QEvent* ev)
{
if(ev->type()==QEvent::KeyPress)
keyPressEvent(static_cast<QKeyEvent*>(ev));
return false;
}

Чтобы сами эти виджеты тоже могли обрабатывать клавиатуру. Вот только на выходе после установки фильтра хотя бы на один из этих виджетов хаотически рушится порядок обхода комбобоксов по табу (в зависимости от сочетания виджетов с установленной фильтрацией табуляция заходит на один или два из комбобоксов, игнорируя остальные).
В чём может быть косяк с этим фильтром или как можно встроить комбобоксы в обход по табу не делая setTabOrder для всех виджетов с главной формы (их очень уж много)?


Название: Re: Проблема с обходом по tab'у при установке eventFilter
Отправлено: Racheengel от Октябрь 12, 2015, 18:11
Например, вы всегда делаете return false; даже если фильтр ловит эвент. А return false; значит, что обработка эвента пойдет дальше.


Название: Re: Проблема с обходом по tab'у при установке eventFilter
Отправлено: Crazy Sage от Октябрь 12, 2015, 19:44
Ну и я так понимаю, что в такой ситуации эвент с табуляцией должен обработаться как будто eventFilter'а нет (в keyPressEvent я таб не обрабатываю), или я не прав?


Название: Re: Проблема с обходом по tab'у при установке eventFilter
Отправлено: Racheengel от Октябрь 12, 2015, 21:28
а что должно происходить в DlgMain::keyPressEvent ?



Название: Re: Проблема с обходом по tab'у при установке eventFilter
Отправлено: Crazy Sage от Октябрь 13, 2015, 07:59
Там обрабатывается сугубо управление курсором мыши с клавиатуры, всё на буквенных клавишах.


Название: Re: Проблема с обходом по tab'у при установке eventFilter
Отправлено: Racheengel от Октябрь 13, 2015, 13:06
Там обрабатывается сугубо управление курсором мыши с клавиатуры, всё на буквенных клавишах.

А базовый keyPressEvent там вызывается после вашей обработки? Если нет, то это может быть проблемой передачи фокуса.


Название: Re: Проблема с обходом по tab'у при установке eventFilter
Отправлено: Crazy Sage от Октябрь 13, 2015, 13:07
А вот об этом не подумал, попробую.


Название: Re: Проблема с обходом по tab'у при установке eventFilter
Отправлено: Crazy Sage от Октябрь 15, 2015, 08:14
Не помогло. Но в итоге плюнул и добавил ручную обработку табуляции для всех необходимых виджетов. Костыль конечно, но куда деваться.