А можно ли обновлять только часть виджета в paintEvent? Т.е. перерисовывать не всё поле, а только те клетки, которые изменились? Понятно, что вы специально так не сделали… Вопрос о возможности как таковой.
Нет. paintEvent по определению вызывается тогда, когда нужно перерисовать весь виджет или его часть (нужная область передается через параметр QPaintEvent * event). Причем под частью здесь подразумевается не область с изменившимися клетками, а область, вылезшая, например, из-за пределов данного виджета при прокрутке и т.п, т.е. определяемая внешними по отношению к данному виджету факторами.
Перерисовка тех клеточек, что изменились, по сути не связана с работой самого paintEvent, как уже говорил SiLiKhon. Это уже зависит от логики рендеринга.
Самый простой вариант реализации сей оптимизации — хранить не только текущую карту, но и предыдущую. Потом, методом обычного сравнение соответствующих ячеек из текущей и предыдущей карт, перерисовывать только то, что изменилось.
Для данного примера, изменений больше чем «не изменений», и скорость рендеринга работает предельно быстро. Собственно, для данного случае это делать не нужно).
Вы зря ржете. Вы похоже даже не читали что это за проект. Я его не афишировал еще — но через полгода это будет очень сильный проект. В вкратце это lightweight web developement ide с эвристическим анализом проекта.
Я не ржу… просто так называлась одна из игр времен ЕС-ЭВМ… если полазить на антресоли, то могу найти вам девятидорожечную бобину для ленточного ES-накопителя с этой игрой… :) Там же есть и CONTINENT, KLIGON и ADVENTURES… Кстати, CONTINENT, предтеча «Цивилизации», чудесно-бы смотрелся рядом с LIVE. Тогда цветных дислеев не было и это вызывало сложности считывания рельефа материков, а сейчас хоть 8 цветов на экране ей бы добавило очарования при полной аутентичной дикости первоисточника…
«Жизнь» Джона Конвея на Qt