Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите с планировкой сигнально-слотовой иерархии проекта.
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
Obey-Kun
Скрин моего проекта.

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

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

Есть док. В нем расположены всяческие настойки инструмента. На картинке он слева. В зависимости от выбранного инструмента (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(). В этом слоте док испускает сигналы с настроками выбранного инструмента.


Спасибо всем осилившим сей поток информации! А теперь вопрос. Хороший ли это план, или же вы поступили бы иначе?
QtPogrammer
В принципе план хороший)!
но...... надо придомать что-нибудь чего не у кого нет!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.