Доброго дня. Сразу предупреждаю, что я в курсе, что описаная ниже конструкция несколько порнографична, но как её радикально улучшить я не представляю.
Есть сложная главная форма, основная её часть создана в дизайнере, но на тулбар надо добавить несколько 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 для всех виджетов с главной формы (их очень уж много)?