Как сфокусироваться на клике, но держать его на колесе мыши в Qt?

Если я сделаю this->setFocusPolicy(Qt::WheelFocus); тогда, если бы я был колесиком мыши над виджетом, он бы получил фокус. Если бы я должен был сделать this->setFocusPolicy(Qt::ClickFocus); но затем колесо мыши приводит к потере фокуса, даже если указатель находится в том же виджете. Итак, как мне сфокусироваться на клике, но держать его на колесе мыши?

При дальнейшем исследовании: mouseWheelEvent всегда обрабатывается после событий фокуса. Поэтому попытка установить переменную, чтобы запомнить, происходит ли это из-за колесика мыши, не работает. Кроме того, причина, указанная в FocusReason, — мышь в случае колеса или щелчка, так что это тоже не помогает.

0

Решение

enum Qt :: FocusPolicy

This enum type defines the various policies a widget can have with respect to acquiring keyboard focus.
Constant            Value           Description
Qt::TabFocus        0x1             the widget accepts focus by tabbing.
Qt::ClickFocus      0x2             the widget accepts focus by clicking.
Qt::StrongFocus     TabFocus |
ClickFocus |
0x8     the widget accepts focus by both tabbing and clicking. On Mac OS X this will also be indicate that the widget accepts tab focus when in 'Text/List focus mode'.
Qt::WheelFocus      StrongFocus |
0x4             like Qt::StrongFocus plus the widget accepts focus by using the mouse wheel.
Qt::NoFocus         0               the widget does not accept focus.

Qt::WheelFocus изготовлена ​​из StrongFocus который состоит из ClickFocus, поэтому вы должны просто установить WheelFocus, чтобы получить все предыдущие.

0

Другие решения

Следующее делает трюк:

Foo::Foo(){
this->setFocusPolicy(Qt::WheelFocus);
}

void Foo::focusInEvent( QFocusEvent *event ){
if (!(QApplication::mouseButtons() & Qt::LeftButton)){
this->clearFocus();
}
}
0

По вопросам рекламы [email protected]