Comments 25
А почему не на QGraphicsScene? Она же лучше подходит для всяких custom вещей.
Немножко оффтопом: вот достаточно интересная задачка от Интела software.intel.com/en-us/contests/threading-challenge-students-2011/codecontest.php для многопоточности, так же это поинтересней простой игры жизни)
А можно ли обновлять только часть виджета в paintEvent? Т.е. перерисовывать не всё поле, а только те клетки, которые изменились? Понятно, что вы специально так не сделали… Вопрос о возможности как таковой.
Нет. paintEvent по определению вызывается тогда, когда нужно перерисовать весь виджет или его часть (нужная область передается через параметр QPaintEvent * event). Причем под частью здесь подразумевается не область с изменившимися клетками, а область, вылезшая, например, из-за пределов данного виджета при прокрутке и т.п, т.е. определяемая внешними по отношению к данному виджету факторами.
Хотя, в update(), вызываемый из таймер эвента, конечно, можно передавать обновляемую область в качестве параметра.
Перерисовка тех клеточек, что изменились, по сути не связана с работой самого paintEvent, как уже говорил SiLiKhon. Это уже зависит от логики рендеринга.
Самый простой вариант реализации сей оптимизации — хранить не только текущую карту, но и предыдущую. Потом, методом обычного сравнение соответствующих ячеек из текущей и предыдущей карт, перерисовывать только то, что изменилось.
Для данного примера, изменений больше чем «не изменений», и скорость рендеринга работает предельно быстро. Собственно, для данного случае это делать не нужно).
Самый простой вариант реализации сей оптимизации — хранить не только текущую карту, но и предыдущую. Потом, методом обычного сравнение соответствующих ячеек из текущей и предыдущей карт, перерисовывать только то, что изменилось.
Для данного примера, изменений больше чем «не изменений», и скорость рендеринга работает предельно быстро. Собственно, для данного случае это делать не нужно).
Эх, жизнь была моим hello-world в Qt =)
Пойду откапывать исходники, посмеюсь над кривокодом.
Пойду откапывать исходники, посмеюсь над кривокодом.
Здорово получилось, конечно можно было бы все сделать совсем по другому, через QGraphicsScene например. Но все равно.
>Еще нужны кнопочки Start, Stop, Clear
Ещё нужны Save и Load
Ещё нужны Save и Load
Ух ты… Там в GIT еще и ваша GALACTICA лежит… осталось CONTINENT, KLIGON и ADVENTURES сделать. :)
Вы зря ржете. Вы похоже даже не читали что это за проект. Я его не афишировал еще — но через полгода это будет очень сильный проект. В вкратце это lightweight web developement ide с эвристическим анализом проекта.
А чем вам название не угодило?
А чем вам название не угодило?
Илья, вежливость наше все. Я не увидел насмешники в словах автора вышеуказанного коммента).
Прошу извинение у автора комментария если в этом комментарии не было насмешки.
Просто сколько раз мне уже про галактические компиляторы рассказывали которые, и только они должны мою IDE компилить — это уже рефлекс.
Просто сколько раз мне уже про галактические компиляторы рассказывали которые, и только они должны мою IDE компилить — это уже рефлекс.
Я не ржу… просто так называлась одна из игр времен ЕС-ЭВМ… если полазить на антресоли, то могу найти вам девятидорожечную бобину для ленточного ES-накопителя с этой игрой… :) Там же есть и CONTINENT, KLIGON и ADVENTURES… Кстати, CONTINENT, предтеча «Цивилизации», чудесно-бы смотрелся рядом с LIVE. Тогда цветных дислеев не было и это вызывало сложности считывания рельефа материков, а сейчас хоть 8 цветов на экране ей бы добавило очарования при полной аутентичной дикости первоисточника…
Sign up to leave a comment.
«Жизнь» Джона Конвея на Qt