Russian Qt Forum

Qt => Вопросы новичков => Тема начата: once_again_abc от Декабрь 02, 2011, 12:48



Название: QListWidget + mouse click
Отправлено: once_again_abc от Декабрь 02, 2011, 12:48
есть объект QListWidget внутри вертикального лэйаута на некоем QWidget. Требуется перехватывать мышиные клики ДО того как их обработает QListWidget. Установил eventFilter на этот объект - нажатия клавиш успешно перехватываются, а мышиные клики полностью игнорируются. Включил setMouseTracking - не помогает.


Название: Re: QListWidget + mouse click
Отправлено: kambala от Декабрь 02, 2011, 12:50
в фильтре событий надо возвращать false для перехваченных нажатий, тогда событие пойдет дальше по цепочке


Название: Re: QListWidget + mouse click
Отправлено: once_again_abc от Декабрь 02, 2011, 12:52
в фильтре событий надо возвращать false для перехваченных нажатий, тогда событие пойдет дальше по цепочке

я знаю. фильт не вызывается для кликов мыши.


Название: Re: QListWidget + mouse click
Отправлено: kambala от Декабрь 02, 2011, 13:07
а QEvent::MouseButtonPress?


Название: Re: QListWidget + mouse click
Отправлено: once_again_abc от Декабрь 02, 2011, 13:11
а QEvent::MouseButtonPress?

а разве он приходит уже не после того как клик был и current row поменялся? мне как раз нужно не допустить смены строчки.


Название: Re: QListWidget + mouse click
Отправлено: kambala от Декабрь 02, 2011, 14:16
ты попадаешь в фильтр событий до того, как они приходят элементам


Название: Re: QListWidget + mouse click
Отправлено: GreatSnake от Декабрь 02, 2011, 14:31
есть объект QListWidget внутри вертикального лэйаута на некоем QWidget. Требуется перехватывать мышиные клики ДО того как их обработает QListWidget. Установил eventFilter на этот объект - нажатия клавиш успешно перехватываются, а мышиные клики полностью игнорируются. Включил setMouseTracking - не помогает.
Инсталлировать фильтер нужно на вьюпорт:
Код
C++ (Qt)
QListWidget::viewport()->installEventFilter( this );


Название: Re: QListWidget + mouse click
Отправлено: once_again_abc от Декабрь 02, 2011, 14:57
есть объект QListWidget внутри вертикального лэйаута на некоем QWidget. Требуется перехватывать мышиные клики ДО того как их обработает QListWidget. Установил eventFilter на этот объект - нажатия клавиш успешно перехватываются, а мышиные клики полностью игнорируются. Включил setMouseTracking - не помогает.
Инсталлировать фильтер нужно на вьюпорт:
Код
C++ (Qt)
QListWidget::viewport()->installEventFilter( this );

Спасибо!

Не могли бы вы объяснить почему надо фильтр устанавливать на вьюпорт виджета? И почему фильтр на сам виджет работает для клавиатуры и не работает для мышиных кликов?


Название: Re: QListWidget + mouse click
Отправлено: GreatSnake от Декабрь 02, 2011, 15:16
Не могли бы вы объяснить почему надо фильтр устанавливать на вьюпорт виджета? И почему фильтр на сам виджет работает для клавиатуры и не работает для мышиных кликов?
Мышиные события передаются непосредственно в окно, в котором было сделано нажатие, т.е. в твоём случае это окно вьюпорта.
Клавиатурные события сначала приходят в топ-левел окно и уже "фокус-менеджер" пересылает событие в в саб-окно, которое имеет фокус.


Название: Re: QListWidget + mouse click
Отправлено: once_again_abc от Декабрь 03, 2011, 02:13
Не могли бы вы объяснить почему надо фильтр устанавливать на вьюпорт виджета? И почему фильтр на сам виджет работает для клавиатуры и не работает для мышиных кликов?
Мышиные события передаются непосредственно в окно, в котором было сделано нажатие, т.е. в твоём случае это окно вьюпорта.
Клавиатурные события сначала приходят в топ-левел окно и уже "фокус-менеджер" пересылает событие в в саб-окно, которое имеет фокус.


Спасибо!