Переопределение функции keyPressEvent для определенного виджета |
Здравствуйте, гость ( Вход | Регистрация )
Переопределение функции keyPressEvent для определенного виджета |
kwisp |
24.3.2010, 11:33
Сообщение
#11
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
Я хочу виджету, в котором находится карта, переопределить функцию keyPressEvent, чтобы при нажатии на +/- масштаб менялся, а при нажатии на стрелки - происходило передвижение по карте. ясно. Внимание вопрос. нажатия буду происходить: а) фокус ввода всегда на карте б) может быть на карте а может и нет в) всегда не на карте ??? |
|
|
AD |
24.3.2010, 11:54
Сообщение
#12
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
б)
|
|
|
kwisp |
24.3.2010, 12:24
Сообщение
#13
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
теперь ясно почему используешь eventFilter().
непонятно чего ты добиваешься этим кодом Раскрывающийся текст Цитата
зачем Цитата if((object == tabTopoView -> chartWidget() || object == tabUniView -> chartWidget() || object == tabMarineView -> chartWidget() || object == tabLibView -> chartWidget()) вот эта проверка если у тебя фильтр заточен под конкретную задачу. для тебя же нет разницы в какой виджет передали "+/-" -- гланое что было событие нажатия клавиши и клавиша эта + или -. получается это лишнее. далее неясно вообще назначение локальной переменной bool p1. ты меняешь размеры её значение с какой целью непонятно. при выходе из локальной области видимости она разрушается. тебе по можно либо напрямую в фильтре событий менять масштаб в case : Qt::Key_Plus и case : Qt::Key_Minus либо высылать к примеру специальный сигнал об увеличении/уменьшении масштаба. |
|
|
AD |
24.3.2010, 12:42
Сообщение
#14
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
далее неясно вообще назначение локальной переменной bool p1. ты меняешь размеры её значение с какой целью непонятно. при выходе из локальной области видимости она разрушается. тебе по можно либо напрямую в фильтре событий менять масштаб в case : Qt::Key_Plus и case : Qt::Key_Minus либо высылать к примеру специальный сигнал об увеличении/уменьшении масштаба. Да эта переменная была создана, так скажем, просто для проверки, что функция входит в данное условие. Естественно, позднее я собирался ее заменить полезным кодом. Повторюсь, что при нажатии на кнопки в эту функцию вообще не попадает дебаггер. |
|
|
kwisp |
24.3.2010, 12:50
Сообщение
#15
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
подозревают мешают проверки о которых я говорил. попробуй убери их.
чем в дебагер смотреть не проще вести лог? извиняюсь. даже в функцию не попадает? т.е в eventFiler() ? тогда следи где находится фокус ввода и правильно ли установлены фильтры(правильно ли перопределен прототип функции)? попробуй проверить глобальный фильтр. попробуй изменяя фокус ввода, проверить вызывается ли функция eventFilter() ? |
|
|
AD |
24.3.2010, 13:00
Сообщение
#16
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
подозревают мешают проверки о которых я говорил. попробуй убери их. чем в дебагер смотреть не проще вести лог? извиняюсь. даже в функцию не попадает? т.е в eventFiler() ? тогда следи где находится фокус ввода и правильно ли установлены фильтры(правильно ли перопределен прототип функции)? попробуй проверить глобальный фильтр. попробуй изменяя фокус ввода, проверить вызывается ли функция eventFilter() ? Убрал проверки, не помогло. В eventFilter входит, конечно же. Не входит в первое условие
|
|
|
kwisp |
24.3.2010, 13:08
Сообщение
#17
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
AD,
остается фокус ввода. что дает его изменение и нажатие на +/- ? на каком виджете находится фокус ввода при "не заходит в условие" смотрел глобальный фильтр событий? П.С. предлагаю тему переименовать. "Установка фильтра собтий в множество виджетов" или подобное. |
|
|
AD |
24.3.2010, 15:38
Сообщение
#18
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
AD, остается фокус ввода. что дает его изменение и нажатие на +/- ? на каком виджете находится фокус ввода при "не заходит в условие" смотрел глобальный фильтр событий? В виджете, на который я хочу поставить фокус, в конструкторе, вызываю слот setFocus(). Все-равно не помогает. Нажатия на клавиши не отлавливаются. |
|
|
kwisp |
25.3.2010, 8:27
Сообщение
#19
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
В виджете, на который я хочу поставить фокус, в конструкторе, вызываю слот setFocus(). Все-равно не помогает. Нажатия на клавиши не отлавливаются. не так дело не пойдёт. от куда ты знаешь где фокус будет после создания окна нажатия на кнопки мыши и таб.? что с глобальным фильтром событий? |
|
|
AD |
25.3.2010, 9:59
Сообщение
#20
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
|
|
|
Текстовая версия | Сейчас: 27.11.2024, 14:35 |