Events |
Здравствуйте, гость ( Вход | Регистрация )
Events |
quarz |
5.10.2010, 2:18
Сообщение
#1
|
Студент Группа: Участник Сообщений: 49 Регистрация: 3.11.2009 Пользователь №: 1202 Спасибо сказали: 5 раз(а) Репутация: 0 |
Есть класс KeyboardItem - это itemGroup, содержащий клавиши клавиатуры.
При нажатии на клавиатуру определяю какая клавиша находилась под мышью и заменяю ее на нажатую. Еще у меня есть маркер, который представляет собой Item, рисующийся поверх клавиатуры. Его родителем является KeyboardItem
Маркер находится всегда выше всех клавиш по оси z. Значит, при клике по нему, событие MousePressEvent должно в первую очередь приходить к маркеру, а не к клавиатуре. А получается так, что событие нажатия никогда не доходит до маркера. В чем я ошибся? |
|
|
kwisp |
5.10.2010, 9:51
Сообщение
#2
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
В чем я ошибся? возможно в обработчике нажатия клавиши с последующей заменой ты не передаёшь событие дальше.... в конце блока обработчика должно быть что то подобное этому return QWidget::keyPressEvent(event); есть это у тебя? на счет того что событие не приходит в маркер первым это возможно фокус ввода влияет на положение дела. |
|
|
quarz |
5.10.2010, 11:54
Сообщение
#3
|
Студент Группа: Участник Сообщений: 49 Регистрация: 3.11.2009 Пользователь №: 1202 Спасибо сказали: 5 раз(а) Репутация: 0 |
return QWidget::keyPressEvent(event); есть это у тебя? да, я вызываю в обработчике QGraphicsItemGroup::mousePressEvent(event). Кстати, если маркер положить на сцену, не прописывая ему родителя, то все работает. Видимо дело в том, что у родителя (KeyboardItem) переопределено mousePressEvent. Но я же вызываю в нем QGraphicsItemGroup::mousePressEvent(event), значит событие должно передаваться и другим Item`ам на сцене, находящимся в этой точке, а оно почему-то не передается. |
|
|
quarz |
5.10.2010, 13:28
Сообщение
#4
|
Студент Группа: Участник Сообщений: 49 Регистрация: 3.11.2009 Пользователь №: 1202 Спасибо сказали: 5 раз(а) Репутация: 0 |
Попробую описать проще:
Есть класс, производный от QGraphicsItemGroup. В нем переопределен MousePressEvent. в эту группу добавлен класс, производный от QGraphicsItem, в котором тоже переоределен MousePressEvent. Надо чтоб группа и Item ловили только свои события. Т.е. если я кликну мышью над Item`ом - событие возникло у него, а если вне этого Item`а, на группе - то событие возникло у группы. Сейчас же все события приходят в группу. Сообщение отредактировал kwisp - 5.10.2010, 13:40 |
|
|
igor_bogomolov |
5.10.2010, 13:46
Сообщение
#5
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Попробуй установить для группы свойство
Этот метод сейчас правда считается устаревшим. Я не знаю чем его заменили, но найти будет не сложно |
|
|
quarz |
5.10.2010, 13:53
Сообщение
#6
|
Студент Группа: Участник Сообщений: 49 Регистрация: 3.11.2009 Пользователь №: 1202 Спасибо сказали: 5 раз(а) Репутация: 0 |
Спасибо, Игорь. Тоже нашел этот метод и как раз искал, чем его заменили в новой версии. Но с ним работает
|
|
|
igor_bogomolov |
5.10.2010, 14:19
Сообщение
#7
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
заменили на
Цитата void QGraphicsItem::setFiltersChildEvents ( bool enabled ) Вот те на, setFiltersChildEvents для групп не работает так же как setHandlesChildEvents. Поэтому пока можно использовать только последнюю, не смотря на то, что она устарела QTBUG-6861 |
|
|
Текстовая версия | Сейчас: 21.12.2024, 15:33 |