Russian Qt Forum
Ноябрь 25, 2024, 23:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сложное взаимодействие виджетов.  (Прочитано 2603 раз)
Valeriy
Гость
« : Май 24, 2009, 15:52 »

Добрый день.

У меня есть вопрос по дизайну и правильному проектированию. Я пишу программу для рисования на графическом планшете. У меня есть несколько взаимодействующих объектов: кисть (генерирует "отпечатки", переносящиеся на "холст"), панель настроек (наследует QToolBar, позволяет выбирать тип кисти и её параметры) и "холст" (наследует QWidget, будет доступен как MDIwindow). Так вот, исходя из того, что одновременно может существовать несколько кистей и несколько холстов (по одному активному), я понял, что у меня сильно усложняется взаимодействие между ними.

На первый вгляд, было бы рационально создать, например, класс Brush Controller, экземпляр которого будет централизованно следить за всеми вышеперечисленными объектами. Поскольку у меня нет большого опыта в объектно-ориентированного программировании, хочу спросить: этот путь правильный? И нет ли в идеологии Qt какого-нибудь специального способа для таких случаев?
Записан
ритт
Гость
« Ответ #1 : Май 24, 2009, 16:56 »

на мой взгляд гораздо правильнее было бы зарегистрировать свою "кисть" в метатипах, а виджету "холст" задать свойство "кисть" данного типа. тогда данные об инструментах, кистях и т.п. будут храниться в самом "холсте", а при смене активности того или иного "холста" останется лишь прочитать их текущие значения и соответствующим образом обновить элементы управления...

если плохо объяснил, посмотри QTabBar::(icon|text|data)
Записан
Valeriy
Гость
« Ответ #2 : Май 24, 2009, 21:58 »

Про Q_DECLARE_METATYPE прочитал, но не совсем понимаю, чем это мне поможет. Во-первых, у меня все рисунки будут открываться в QMdiArea, а у QMdiSubWindow нет никаких setData.

Но главное, если реализовать кисточку как свойство холста, то при смене холста на холст у которого текущая кисточка другая, ему придётся убирать с панели кистей настройки, соответствующие текущей кисти и заполнять настройками для новой. Вот это меня смущает. Может тогда стоит сделать метод Brush::populateBrushToolBar( BrushToolBar *btb), в котором кисть это сама будет делать?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.247 секунд. Запросов: 21.