Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: GreatSnake от Апрель 29, 2010, 09:07



Название: QGraphicsScene: ненужная рассылка событий к QGraphicsItems
Отправлено: GreatSnake от Апрель 29, 2010, 09:07
Имеется сцена с достаточно большим количеством элементов. Под виндой при определенных ситуациях стали наблюдать дикие тормоза.
При внимательном наблюдении выяснилось, что при смене фокуса на главном окне cpu грузится по-полной. Причем никакой перерисовки в это время не делается. Т.е. поднимаем диалог и тачка встаёт в ступор! При дальнейших раскопках выяснилось, что при изменении фокуса top-level окна  QGraphicsScene::event() вызывает для каждого видимого элемента QGraphicsItem::sceneEvent(). Причём сцена по сути read-only, т.к. никакая обработка событий для отдельно взятого элемента не требуется. Получается, что публичными средствами API запретить такое безобразие никак нельзя. Единственным решением оказалось перегрузить QGraphicsScene::event(). Абсолютно непонятна такая политика троллей. И что интересно, непонятно, почему так всё проседает именно под виндой. Под линуксом всё гладко. Пробежался по исходникам и ничего platform-specific не обнаружил. У кого есть мысли насчёт всего этого?


Название: Re: QGraphicsScene: ненужная рассылка событий к QGraphicsItems
Отправлено: mal от Апрель 29, 2010, 16:54
проверь, вдруг поможет без перезагрузки event?
Код:
QGraphicsScene::BlockSignals()


Название: Re: QGraphicsScene: ненужная рассылка событий к QGraphicsItems
Отправлено: crossly от Апрель 29, 2010, 17:01
сигналы и события разные вещи....


Название: Re: QGraphicsScene: ненужная рассылка событий к QGraphicsItems
Отправлено: mal от Апрель 29, 2010, 17:46
значит не поможет  :'(