Russian Qt Forum
Ноябрь 24, 2024, 09:00 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QListWidget + mouse click  (Прочитано 4392 раз)
once_again_abc
Гость
« : Декабрь 02, 2011, 12:48 »

есть объект QListWidget внутри вертикального лэйаута на некоем QWidget. Требуется перехватывать мышиные клики ДО того как их обработает QListWidget. Установил eventFilter на этот объект - нажатия клавиш успешно перехватываются, а мышиные клики полностью игнорируются. Включил setMouseTracking - не помогает.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Декабрь 02, 2011, 12:50 »

в фильтре событий надо возвращать false для перехваченных нажатий, тогда событие пойдет дальше по цепочке
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
once_again_abc
Гость
« Ответ #2 : Декабрь 02, 2011, 12:52 »

в фильтре событий надо возвращать false для перехваченных нажатий, тогда событие пойдет дальше по цепочке

я знаю. фильт не вызывается для кликов мыши.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Декабрь 02, 2011, 13:07 »

а QEvent::MouseButtonPress?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
once_again_abc
Гость
« Ответ #4 : Декабрь 02, 2011, 13:11 »

а QEvent::MouseButtonPress?

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

Сообщений: 4747



Просмотр профиля WWW
« Ответ #5 : Декабрь 02, 2011, 14:16 »

ты попадаешь в фильтр событий до того, как они приходят элементам
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Декабрь 02, 2011, 14:31 »

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

Qt 5.11/4.8.7 (X11/Win)
once_again_abc
Гость
« Ответ #7 : Декабрь 02, 2011, 14:57 »

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

Спасибо!

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

Сообщений: 2921



Просмотр профиля
« Ответ #8 : Декабрь 02, 2011, 15:16 »

Не могли бы вы объяснить почему надо фильтр устанавливать на вьюпорт виджета? И почему фильтр на сам виджет работает для клавиатуры и не работает для мышиных кликов?
Мышиные события передаются непосредственно в окно, в котором было сделано нажатие, т.е. в твоём случае это окно вьюпорта.
Клавиатурные события сначала приходят в топ-левел окно и уже "фокус-менеджер" пересылает событие в в саб-окно, которое имеет фокус.
Записан

Qt 5.11/4.8.7 (X11/Win)
once_again_abc
Гость
« Ответ #9 : Декабрь 03, 2011, 02:13 »

Не могли бы вы объяснить почему надо фильтр устанавливать на вьюпорт виджета? И почему фильтр на сам виджет работает для клавиатуры и не работает для мышиных кликов?
Мышиные события передаются непосредственно в окно, в котором было сделано нажатие, т.е. в твоём случае это окно вьюпорта.
Клавиатурные события сначала приходят в топ-левел окно и уже "фокус-менеджер" пересылает событие в в саб-окно, которое имеет фокус.


Спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.189 секунд. Запросов: 22.