Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: vux от Апрель 19, 2013, 20:48



Название: переопределение событий QGraphicsScene
Отправлено: vux от Апрель 19, 2013, 20:48
У меня в QGraphicsScene может находиться куча элементов.
Для оптимизации решил в элементах не переопределять ничего кроме boundingRect и paint.
Меня интересует где лучше переопределять события мыши, клавиатуры - в view или в scene?
И в чем вообще отличие отлавливания событий в QGraphicsView и QGraphicsScene?


Название: Re: переопределение событий QGraphicsScene
Отправлено: GreatSnake от Апрель 20, 2013, 10:52
Меня интересует где лучше переопределять события мыши, клавиатуры - в view или в scene?
И в чем вообще отличие отлавливания событий в QGraphicsView и QGraphicsScene?
Это как тебе будет удобнее.
В любом случае всё события приходят сначала на QGraphicsView::viewport(), фильтруются в QGraphicsView
и уже после в случае QGraphicsView::isInteractive() попадают в QGraphicsScene, который доставляет события непосредственно элементам сцены.
Т.к. все события интерактивные, то, имхо, оптимизировать здесь особо нечего.

PS. Но не стоит забывать про то, что одна сцена может обслуживаться несколькими вью. И вот в этом случае нужно самому определять поведение для каждого вью.


Название: Re: переопределение событий QGraphicsScene
Отправлено: vux от Апрель 20, 2013, 10:55
1. Спасиба
2. Но я правильно делаю что не переопределяю событий самого QGraphicsItem ?
3. В чем вообще смысл isInteractive ?


Название: Re: переопределение событий QGraphicsScene
Отправлено: GreatSnake от Апрель 20, 2013, 11:08
2. Но я правильно делаю что не переопределяю событий самого QGraphicsItem ?
Я же выше уже сказал, что решать тебе самому.
Если ты хочешь, чтобы QGraphicsItem был независимым объектом, дай ему самому обрабатывать события.

Цитировать
3. В чем вообще смысл isInteractive ?
В случае включения (включёно по умолчанию) события доставляются до QGraphicsItem.


Название: Re: переопределение событий QGraphicsScene
Отправлено: vux от Апрель 20, 2013, 11:09
2. Но я правильно делаю что не переопределяю событий самого QGraphicsItem ?
Я же выше уже сказал, что решать тебе самому.
Если ты хочешь, чтобы QGraphicsItem был независимым объектом, дай ему самому обрабатывать события.

Цитировать
3. В чем вообще смысл isInteractive ?
В случае включения (включёно по умолчанию) события доставляются до QGraphicsItem.

Все понял, еще раз спасибо.