Название: QGraphicsScene оптимизация? Отправлено: qwyllum от Май 19, 2013, 21:40 С-но есть небольшая задача - программа отрисовки карты Беларуси. Данные хранятся в базе Postgresql с дополнением POSTGis. Саму программу уже реализовал. Есть только одна проблемка - десятки тысяч дорог и рек вешают компьютер наглухо. Компьютер весьма слабый - 2ГБ ОЗУ и 2GHz 2 ядра - покупал еще в 2008.
Так что встал вопрос оптимизации. Программа без наворотов вроде масштабирования, просто перемещаешь ползунок и двигаешься по карте. Объекты реализованы классами, наследуемыми от QGraphicsItem, с переопределенными методами paint & boundingrect. Сейчас в программе просто реализован запрос в БД, после чего все объекты добавляются на сцену. Может кто сталкивался с похожей ситуацией и подскажет, как быть? PS ламерский вопрос - надо ли освобождать память от Qt-шных объектов? Название: Re: QGraphicsScene оптимизация? Отправлено: xokc от Май 20, 2013, 08:44 Может кто сталкивался с похожей ситуацией и подскажет, как быть? Для начала - определить "узкие" места и тогда уже разбираться с необходимыми оптимизациямиPS ламерский вопрос - надо ли освобождать память от Qt-шных объектов? Если объекты создаются динамически и в качестве parent указан не NULL, то - не надо. Но я привык удалять созданное собой самостоятельно - хуже не будет.Название: Re: QGraphicsScene оптимизация? Отправлено: Igors от Май 20, 2013, 09:56 Ну проблема стандартна/объективна. Какое бы железо ни взяли - всегда найдется "достаточно большая сцена" где это будет тормозить. Конечно надо профилить, как уже сказали. И делать рисование прерываемым. Это выглядит примерно так
- пр отрисовке через каждые напр 100 объектов проверять не двинулся ли ползунок, не нажата ли клавиша и др. (все что вызывает обновление) Если да - выскочить из рисования Название: Re: QGraphicsScene оптимизация? Отправлено: qwyllum от Май 20, 2013, 10:09 - пр отрисовке через каждые напр 100 объектов проверять не двинулся ли ползунок, не нажата ли клавиша и др. (все что вызывает обновление) Если да - выскочить из рисования и как это реализовать? придется наследовать класс от QGraphicsScene и там переопределять метод отрисовки? Я вообще думал так сделать - смотреть координаты ползунка и делать запрос в БД на объекты с похожими координатами. Но если для мест, которые отображаются точкой это сделать легко, то многие линии дорог и водные области все равно через полкарты ползут. Плюс,затрудняется поиск тем, что данные на выходе получаешь в виде Line(x1 y1, x2 y2....), т.е. придется все это делать переводить в числовой формат для поиска. И не будет ли работа с тысячей строк серьезно замедлять программу? Название: Re: QGraphicsScene оптимизация? Отправлено: kamre от Май 20, 2013, 11:19 придется наследовать класс от QGraphicsScene и там переопределять метод отрисовки? Класс QGraphicsScene не наследуется от QWidget => нет возможности "переопределять метод отрисовки".Может глянуть что-то более готовое (http://www.qgis.org/about-qgis/screenshots.html), чем самому с нуля писать? Название: Re: QGraphicsScene оптимизация? Отправлено: Igors от Май 20, 2013, 12:10 и как это реализовать? придется наследовать класс от QGraphicsScene и там переопределять метод отрисовки? Да просто вставить в рисование каждого айтема проверку на abort.Да, ну и принципиальный подход - использовать OpenGL |