Название: 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 значит не поможет :'(
|