LINUX.ORG.RU

[Qt] [хороший стиль] Помогите с планировкой сигнально-слотовой архитектуры проекта. Или не только с ней.

 


0

1

Скрин моего проекта.

Можно было бы обойтись без него, но может вы порадуетесь за меня :). Всё пилю и пилю свой проект. Сейчас конкретно занимаюсь рефакторингом. Удалил кучу всего и переделывают это с нуля.

А теперь по теме.

Есть док. В нем расположены всяческие настойки инструмента. На картинке он слева. В зависимости от выбранного инструмента (6 синих иконок) там показываются соответствующие параметры инструмента (как в GIMP и куче других программ).

Есть сцена. В ней пользователь может создавать инструмент. На картинке один из инструментов расположен по центру, зелёненький такой. Разные инструменты характеризуются разными параметрами. Геометрически это всегда или полилинии, или прямоугольники, так что во-первых они характеризуются геометрическими параметрами. Помимо этого, есть и другие параметры, персональные для каждого инструмента. Все они унаследованы от QGraphicsObject, то есть умеют сигналы и слоты.

Когда пользователь создаёт инструмент, нужно:

  1. Наладить связь между изменением значений в доке и инструментом. Пользователь меняет циферки — меняется инструмент.
  2. Наладить связь между изменением геометрии инструмента и обновлением значений в доке. Пользователь меняет инструмент (мышкой таскает) — обновляются значения в доке.
  3. Передать инструменту изначальные параметры (те, что вбиты в доке на момент создания его пользователем).

Было сделано совсем коряво, даже и не буду говорить как. Теперь хочу сделать так.

Все параметры можно условно разделить на параметры геометрии и параметры конкретного типа инструмента. Значит, можно ввести сигналы-слоты, связанные с геометрией (аргументы QRectF или QPolygonF), и сигналы-слоты, связанные с параметрами конкретного типа инструмента (в качестве аргументов — SelectionParameters, BlockCreatorParameters и т.п.).

  1. Сцена дублирует все сигналы, посылающиеся доком для изменения параметров инструментов. То есть там есть сигналы: setToolGeometry(QRectF), setToolGeometry(QPolygonF), setToolProperties(SelectionParameters), setToolProperties(BlockCreatorParameters), ... Эти сигналы MainWindow в конструкторе соединяет с соответствующими сигналами дока. Инструмент в конструкторе подключает часть из этих сигналов к своим слотам.
  2. Сцена дублирует все сигналы, посылающиеся при изменении параметров инструментов: toolGeometryChanged(QRectF), toolGeometryChanged(QPolygonF), toolPropertiesChanged(SelectionParameters). MainWindow в конструкторе соединяет эти сигналы с соответствующими слотами дока. Инструмент в конструкторе подключает свои сигналы к части сигналов сцены.
  3. Инструмент после налаживания всех связей испускает сигнал needSettings(). Это вызывает испускание сценой сигнала needToolSettings(). Этот сигнал принимается слотом дока emitToolSettings(). В этом слоте док испускает сигналы с настроками выбранного инструмента.

Спасибо всем осилившим сей поток информации! А теперь вопрос. Хороший ли это план, или же вы поступили бы иначе?

★★★★★

Последнее исправление: Obey-Kun (всего исправлений: 1)

ничего не понял из того что вы написали, но вставлю свои 2 копейки.

сделать 2 signal mapper, где id - N объекта в каком либо списке. при изменении объекта на сцене и при изменении пользователем в доке
параметров.

bukaka
()
Ответ на: комментарий от Obey-Kun

метод контрольного объема слышали?

могу литературкой на почту поспамить.

bukaka
()
Ответ на: комментарий от bukaka

openfoam для механики, а у меня теплофизика, да ещё и довольно узко-специализированная.

да и создание модели (граничных условий и блоков) оптимизировано под цели геокриологов.

что за метод контрольного объёма?

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

насчёт механики погорячился. но всё равно, там общего назначения, а у меня узкого. но за наводку спасибо, вдруг пригодится.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

Да и openfoam далеко не все на кафедре осилят. Плюс алгоритмы моделирования в геокриологии свои, использующиеся уже много лет.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

> Плюс алгоритмы моделирования в геокриологии свои, использующиеся уже много лет.

глубоко сомневаюсь. я так думаю - у вас там решается обычное уравнение Лапласа. (могу и ошибаться, болею и думать лень)

что за метод контрольного объёма?


метод основан на интегрировании исходных уравнений по контрольному объему.

есть литература. поделюсь )

bukaka
()
Ответ на: комментарий от Obey-Kun

>openfoam для механики, а у меня теплофизика, да ещё и довольно узко-специализированная.

да и создание модели (граничных условий и блоков) оптимизировано под цели геокриологов.


вообще то теплофизика - часть механики.


с удовольствием вдался бы в дебаты, да вот аспирантуру уже давно как бросил и в голове мало что осталось)

bukaka
()
Ответ на: комментарий от bukaka

> глубоко сомневаюсь. я так думаю - у вас там решается обычное уравнение Лапласа. (могу и ошибаться, болею и думать лень)

Одно дело что решают, и другое — как :). В задачах геокриологии используется свой метод, показавший себя хорошо.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от bukaka

> вообще то теплофизика - часть механики.

my bad.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

>Одно дело что решают, и другое — как :). В задачах геокриологии используется свой метод, показавший себя хорошо.

Вот блин интрига. где можно почитать? а то так и помру в невежестве.

bukaka
()
Ответ на: комментарий от bukaka

http://obey.su/cryo.tar.gz

Упоминания про регуляризацию можете упустить, т.к. на современных скоростях она не нужна. Ещё можно упустить упоминание про энтальпию, как не имеющую прямого отношения к способу решения.

Вся суть в 1.119 и 1.120. Фактически, ничего сложного в математике тут нет. У меня ядро занимает 400 строк кода. И 7500 строк занимает гуй.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

Т.е. основная цель проекта — предоставить специалистам удобный оптимизированный под _их_ задачи гуй. А что касается метода, то тут какой угодно можно в ядре применить (я планирую потом сделать выбор ядра). Просто пока что применил тот, что используется в нашей науке уже лет 30. Тем более, это позволит проверить сходимость со старой программой, по которой все поголовно считали.

Obey-Kun ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.