crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Помогите с планировкой сигнально-слотовой иерархии проекта., Или не только этой иерархии.
Obey-Kun
  опции профиля:
сообщение 23.1.2011, 5:50
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 96
Регистрация: 24.3.2010
Пользователь №: 1556

Спасибо сказали: 3 раз(а)




Репутация:   0  


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

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

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

Есть док. В нем расположены всяческие настойки инструмента. На картинке он слева. В зависимости от выбранного инструмента (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 - 23.1.2011, 7:08
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_QtPogrammer_*
сообщение 29.1.2011, 13:33
Сообщение #2





Гости








    


В принципе план хороший)!
но...... надо придомать что-нибудь чего не у кого нет!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.6.2022, 12:13