Aug. 13th, 2020

66george: (Default)
Программистские будни. Есть объекты (геометрические фигуры) и программа, которая их рисует. Одни объекты могут зависеть от других. Например, прямая, проведённая через две точки, зависит от них обеих. Если одну точку сдвинуть, прямая тоже должна сдвинуться. Будем говорить, что эта прямая является "ребёнком" точки. В Qt объекты могут посылать друг другу "сигналы". Например, сдвинувшаяся точка посылает сигнал "я изменилась". Сигнал, в принципе, слышен всем (широковещание), но чтобы объект на него как-то реагировал, надо специально подсоединить. И вот объект-родитель (точка) посылает сигнал "изменилась", а объект-ребёнок (прямая) этот сигнал слышит, пересчитывает сама свои координаты и тоже шлёт сигнал "изменилась" (потому что от неё тоже может что-то зависеть, "внуки" точки тоже должны пересчитаться). Далее, рисовальная машинка, услышав сигнал "изменилась", перерисовывает картинку. И что мы видим? Пусть от объекта A зависят объекты B и C. Объект A меняется и посылает сигнал. B и C, услышав сигнал, тоже меняются и сами посылают сигналы. Рисовальная машинка слышит три сигнала по очереди и перерисовывает картинку три раза! Как этого избежать, но чтоб красиво? Добавляем новый сигнал "подтверждаю". Пусть каждый объект знает число своих детей (непосредственно зависящих от него объектов). Например, объект A изменился и послал сигнал "изменился". Его дети B и C, услышав сигнал, сами пересчитывают свои координаты и тоже шлют сигналы "изменился". Далее, объект B ждёт сигналы "подтверждаю" от своих детей D,E,F. Получив три сигнала "подтверждаю", он шлёт сигнал "подтверждаю" своему родителю A. Получив два сигнал "подтверждаю" (от своих детей B,C), объект A шлёт рисовальной машинке сигнал "рисуй". По-моему, хорошо, если я ничего не упустил.
Но это не все проблемы. Пусть у объекта A дети B и C, а у B и C общий ребёнок D. Если объект A меняется, его дети B и C тоже меняются и посылают сигналы, в результате D пересчитывает свои координаты два раза (получив сигналы от двух родителей). Можно ли тут что-то сделать?

Profile

66george: (Default)
66george

January 2026

S M T W T F S
     123
45678910
11121314151617
18192021222324
25262728293031

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 3rd, 2026 02:34 am
Powered by Dreamwidth Studios