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