crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Events
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
igor_bogomolov Дата 5.10.2010, 14:19
  заменили на
Цитата
void QGraphicsItem::setFiltersChildEvents ( bool enabled )


Вот те на, setFiltersChildEvents для групп не работает так же как setHandlesChildEvents. Поэтому пока можно использовать только последнюю, не смотря на то, что она устарела
QTBUG-6861
quarz Дата 5.10.2010, 13:53
  Спасибо, Игорь. Тоже нашел этот метод и как раз искал, чем его заменили в новой версии. Но с ним работает
igor_bogomolov Дата 5.10.2010, 13:46
  Попробуй установить для группы свойство
setHandlesChildEvents(false);

Этот метод сейчас правда считается устаревшим. Я не знаю чем его заменили, но найти будет не сложно
quarz Дата 5.10.2010, 13:28
  Попробую описать проще:
Есть класс, производный от QGraphicsItemGroup. В нем переопределен MousePressEvent.
в эту группу добавлен класс, производный от QGraphicsItem, в котором тоже переоределен MousePressEvent.
Надо чтоб группа и Item ловили только свои события. Т.е. если я кликну мышью над Item`ом - событие возникло у него, а если вне этого Item`а, на группе - то событие возникло у группы.
Сейчас же все события приходят в группу.
quarz Дата 5.10.2010, 11:54
 
Цитата(kwisp @ 5.10.2010, 10:51) *
return QWidget::keyPressEvent(event);

есть это у тебя?


да, я вызываю в обработчике QGraphicsItemGroup::mousePressEvent(event).

Кстати, если маркер положить на сцену, не прописывая ему родителя, то все работает. Видимо дело в том, что у родителя (KeyboardItem) переопределено mousePressEvent. Но я же вызываю в нем QGraphicsItemGroup::mousePressEvent(event), значит событие должно передаваться и другим Item`ам на сцене, находящимся в этой точке, а оно почему-то не передается.
kwisp Дата 5.10.2010, 9:51
 
Цитата(quarz @ 5.10.2010, 3:18) *
В чем я ошибся?

возможно в обработчике нажатия клавиши с последующей заменой ты не передаёшь событие дальше....
в конце блока обработчика должно быть что то подобное этому

return QWidget::keyPressEvent(event);

есть это у тебя?

на счет того что событие не приходит в маркер первым это возможно фокус ввода влияет на положение дела.
quarz Дата 5.10.2010, 2:18
  Есть класс KeyboardItem - это itemGroup, содержащий клавиши клавиатуры.
class KeyboardItem: public QObject, public QGraphicsItemGroup
{
  Q_OBJECT
...
private:
  void mousePressEvent(QGraphicsSceneMouseEvent *event);
...
};

void KeyboardItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
  //рисуем нажатую клавишу
  // ....
  QGraphicsItemGroup::mousePressEvent(event);
}


При нажатии на клавиатуру определяю какая клавиша находилась под мышью и заменяю ее на нажатую.
Еще у меня есть маркер, который представляет собой Item, рисующийся поверх клавиатуры. Его родителем является KeyboardItem

class MarkerItem: public QGraphicsSvgItem
{
...
private:
  void mousePressEvent(QGraphicsSceneMouseEvent *event);
...
}


Маркер находится всегда выше всех клавиш по оси z. Значит, при клике по нему, событие MousePressEvent должно в первую очередь приходить к маркеру, а не к клавиатуре. А получается так, что событие нажатия никогда не доходит до маркера.
В чем я ошибся?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 3.3.2024, 5:38