Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: vux от Июль 29, 2010, 18:58



Название: mousePressEvent
Отправлено: vux от Июль 29, 2010, 18:58
вешаю mousePressEvent на виджэт, в котором есть другие элементы.
мой эвент срабатывает понятное дело на пустом месте виджэта и на некоторых элементах.
Мне нада чтоб срабатывало и на детях а не только на виджэте - то есть во всем четырехугольнике виджэта.


Название: Re: mousePressEvent
Отправлено: vux от Июль 29, 2010, 19:27
Обычно для этих целей используют QShortcut c Qt::ShortcutContext Qt::WidgetWithChildrenShortcut

а причем тут шорткаты к мышэ? ???


Название: Re: mousePressEvent
Отправлено: SABROG от Июль 29, 2010, 20:23
Обычно для этих целей используют QShortcut c Qt::ShortcutContext Qt::WidgetWithChildrenShortcut

а причем тут шорткаты к мышэ? ???

Пардон померещелось keyPressEvent.

Цитировать
то есть во всем четырехугольнике виджэта.
У дочерних виджетов может быть своя реакция на нажатие клавиш мыши, виджет решает хочет ли он передавать информацию о клике выше к родителю или нет. Есть только один выход - вызвать QObject::installEventFilter на каждом ребенке рекурсивно и не забыть вызвать для них оригинальные обработчики событий, чтобы контролы смогли нормально функционировать.


Название: Re: mousePressEvent
Отправлено: vux от Июль 29, 2010, 21:24
Понятно, впринцыпе так и думал :)


Название: Re: mousePressEvent
Отправлено: vux от Июль 29, 2010, 21:35
Хорошо возьмем тотжэ виджет с детьми.

Ему выставляю setMouseTracking(True), ставлю ему фильтр на mouseMoveEvent - в пустом месте работает как и положэно

На детях которые разрешают ему влиять на них работает с нажатой кнопкой - то есть у них неустановлен mouseTracking.
По логике рекурсивно ( widget.children() ) ставлю им setMouseTracking(True) - но они серавно реагируют только на перемещение с нажатой кнопкой.

Хочу просто понять почему?


Название: Re: mousePressEvent
Отправлено: SABROG от Июль 30, 2010, 12:09
Хочу просто понять почему?
Об этом написано (http://doc.qt.nokia.com/latest/qmouseevent.html) в документации, но почему так там не объясняется.