Название: Перехват сообщений клавиатуры и отправка их напрямую объектам QGraphicsItem Отправлено: OS2 от Апрель 22, 2009, 16:39 Всем доброго времени суток!
Столкнулся с такой проблемой: имеется класс Вида, унаследованный от QGraphicsView, на нем рисуется Сцена с N объектами, унаследованными от QGraphicsItem. На Виде есть полосы прокрутки, при нажатии одной из клавиш на клавиатуре(Key_Left.....Key_Down), происходит скролирование Вида, в свою очередь объекты на Сцене тоже получают и по своему обрабатывают эти сообщении. НО мне нужно, чтобы сообщения с клавиатуры(имеется в виду только нажатия на стрелочки) проходили мимо полос прокрутки Вида и попадали дальше, к объектам Сцены, для дальнейшей обработки. Скролингом Вида я хочу управлять, например, только мышкой. Как мне этого добиться? Подскажите, плиз.... Название: Re: Перехват сообщений клавиатуры и отправка их напрямую объектам QGraphicsItem Отправлено: Пантер от Апрель 22, 2009, 16:51 installEventFilter?
Название: Re: Перехват сообщений клавиатуры и отправка их напрямую объектам QGraphicsItem Отправлено: OS2 от Апрель 22, 2009, 16:54 А по подробней, если можно?
Название: Re: Перехват сообщений клавиатуры и отправка их напрямую объектам QGraphicsItem Отправлено: BaltikS от Апрель 22, 2009, 18:08 QGraphicsView -> метод installEventFilter и последующая обработка в eventFilter...
Название: Re: Перехват сообщений клавиатуры и отправка их напрямую объектам QGraphicsItem Отправлено: OS2 от Апрель 22, 2009, 18:52 QGraphicsView -> метод installEventFilter и последующая обработка в eventFilter... Да это понятно, я знаю как устанавливать фильтр событий, вопрос в другом: как в этом фильтре отловив нужное событие, отправить его объекту(наследнику QGraphicsItem) на Сцене, но не отправлять слайдеру?!Название: Re: Перехват сообщений клавиатуры и отправка их напрямую объектам QGraphicsItem Отправлено: BaltikS от Апрель 22, 2009, 20:03 Я например отлавливал события сцены и перемещал элементы (правда не по стрелкам) примерно вот так:
Код: QList<QGraphicsItem *> list = scene()->selectedItems (); А по-поводу eventFilter - гляди в ассистент, там был пример... Название: Re: Перехват сообщений клавиатуры и отправка их напрямую объектам QGraphicsItem Отправлено: OS2 от Апрель 22, 2009, 20:09 Так я же написал "отловив", а не "отловить", все нужные мне события от клавиатуры я отловил, а вот как поступить дальше:
Цитировать ...отправить его объекту(наследнику QGraphicsItem) на Сцене, но не отправлять слайдеру?! я не знаю.... ???ЗЫ: под словом "слайдер" я имею в виду скролл бар(бары). Название: Re: Перехват сообщений клавиатуры и отправка их напрямую объектам QGraphicsItem Отправлено: Kolobok от Апрель 23, 2009, 11:13 Послать event можно так:
bool QCoreApplication::sendEvent ( QObject * receiver, QEvent * event ) [static] а что бы оно больше нигде не обрабатывалось, вернуть в методе eventFilter() правду. Название: Re: Перехват сообщений клавиатуры и отправка их напрямую объектам QGraphicsItem Отправлено: OS2 от Апрель 23, 2009, 13:47 По видимому чего-то я понять не могу.....
на сколько я знаю: sendEvent можно вызвать для генерации сообщения объектам, унаследованным от QObject, но в моем случае я пытаюсь послать сообщение(keyPressEvent) объекту унаследованному от QGraphicsItem, а в QGraphicsItem QObjectом и не пахнет. :o Название: Re: Перехват сообщений клавиатуры и отправка их напрямую объектам QGraphicsItem Отправлено: Kolobok от Апрель 24, 2009, 00:39 Ну пошли событие сцене, а в сцене передай айтему.
|