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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Перехват сообщений клавиатуры и отправка их напрямую объектам QGraphicsItem  (Прочитано 9135 раз)
OS2
Самовар
**
Offline Offline

Сообщений: 186



Просмотр профиля WWW
« : Апрель 22, 2009, 16:39 »

Всем доброго времени суток!
Столкнулся с такой проблемой: имеется класс Вида, унаследованный от QGraphicsView, на нем рисуется Сцена с N объектами, унаследованными от QGraphicsItem. На Виде есть полосы прокрутки, при нажатии одной из клавиш на клавиатуре(Key_Left.....Key_Down), происходит скролирование Вида, в свою очередь объекты на Сцене тоже получают и по своему обрабатывают эти сообщении. НО мне нужно, чтобы сообщения с клавиатуры(имеется в виду только нажатия на стрелочки) проходили мимо полос прокрутки Вида и попадали дальше, к объектам Сцены, для дальнейшей обработки. Скролингом Вида я хочу управлять, например, только мышкой. Как мне этого добиться? Подскажите, плиз....
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Апрель 22, 2009, 16:51 »

installEventFilter?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
OS2
Самовар
**
Offline Offline

Сообщений: 186



Просмотр профиля WWW
« Ответ #2 : Апрель 22, 2009, 16:54 »

А по подробней, если можно?
Записан
BaltikS
Гость
« Ответ #3 : Апрель 22, 2009, 18:08 »

QGraphicsView -> метод installEventFilter и последующая обработка в eventFilter...
Записан
OS2
Самовар
**
Offline Offline

Сообщений: 186



Просмотр профиля WWW
« Ответ #4 : Апрель 22, 2009, 18:52 »

QGraphicsView -> метод installEventFilter и последующая обработка в eventFilter...
Да это понятно, я знаю как устанавливать фильтр событий, вопрос в другом: как в этом фильтре отловив нужное событие, отправить его объекту(наследнику QGraphicsItem) на Сцене, но не отправлять слайдеру?!
Записан
BaltikS
Гость
« Ответ #5 : Апрель 22, 2009, 20:03 »

Я например отлавливал события сцены и перемещал элементы (правда не по стрелкам) примерно вот так:
Код:
QList<QGraphicsItem *> list = scene()->selectedItems ();
for (int i =0; i<list.size(); ++i)
    list.at(i)->moveBy(1,1);
Сразу оговорюсь, я намеренно не обрабатывал события клавиатуры у Итема, так как фокус имеет лишь только один итем.

А по-поводу eventFilter - гляди в ассистент, там был пример...
Записан
OS2
Самовар
**
Offline Offline

Сообщений: 186



Просмотр профиля WWW
« Ответ #6 : Апрель 22, 2009, 20:09 »

Так я же написал "отловив", а не "отловить", все нужные мне события от клавиатуры я отловил, а вот как поступить дальше:
Цитировать
...отправить его объекту(наследнику QGraphicsItem) на Сцене, но не отправлять слайдеру?!
я не знаю....  Непонимающий

ЗЫ: под словом "слайдер" я имею в виду скролл бар(бары).
« Последнее редактирование: Апрель 22, 2009, 21:13 от OS2 » Записан
Kolobok
Гость
« Ответ #7 : Апрель 23, 2009, 11:13 »

Послать event можно так:

bool QCoreApplication::sendEvent ( QObject * receiver, QEvent * event )   [static]

а что бы оно больше нигде не обрабатывалось, вернуть в методе eventFilter()  правду.
Записан
OS2
Самовар
**
Offline Offline

Сообщений: 186



Просмотр профиля WWW
« Ответ #8 : Апрель 23, 2009, 13:47 »

По видимому чего-то я понять не могу.....
на сколько я знаю: sendEvent можно вызвать для генерации сообщения объектам, унаследованным от QObject, но в моем случае я пытаюсь послать сообщение(keyPressEvent) объекту унаследованному от QGraphicsItem, а в QGraphicsItem QObjectом и не пахнет.  Шокированный
Записан
Kolobok
Гость
« Ответ #9 : Апрель 24, 2009, 00:39 »

Ну пошли событие сцене, а в сцене передай айтему.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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