Название: Сложное взаимодействие виджетов. Отправлено: Valeriy от Май 24, 2009, 15:52 Добрый день.
У меня есть вопрос по дизайну и правильному проектированию. Я пишу программу для рисования на графическом планшете. У меня есть несколько взаимодействующих объектов: кисть (генерирует "отпечатки", переносящиеся на "холст"), панель настроек (наследует QToolBar, позволяет выбирать тип кисти и её параметры) и "холст" (наследует QWidget, будет доступен как MDIwindow). Так вот, исходя из того, что одновременно может существовать несколько кистей и несколько холстов (по одному активному), я понял, что у меня сильно усложняется взаимодействие между ними. На первый вгляд, было бы рационально создать, например, класс Brush Controller, экземпляр которого будет централизованно следить за всеми вышеперечисленными объектами. Поскольку у меня нет большого опыта в объектно-ориентированного программировании, хочу спросить: этот путь правильный? И нет ли в идеологии Qt какого-нибудь специального способа для таких случаев? Название: Re: Сложное взаимодействие виджетов. Отправлено: ритт от Май 24, 2009, 16:56 на мой взгляд гораздо правильнее было бы зарегистрировать свою "кисть" в метатипах, а виджету "холст" задать свойство "кисть" данного типа. тогда данные об инструментах, кистях и т.п. будут храниться в самом "холсте", а при смене активности того или иного "холста" останется лишь прочитать их текущие значения и соответствующим образом обновить элементы управления...
если плохо объяснил, посмотри QTabBar::(icon|text|data) Название: Re: Сложное взаимодействие виджетов. Отправлено: Valeriy от Май 24, 2009, 21:58 Про Q_DECLARE_METATYPE прочитал, но не совсем понимаю, чем это мне поможет. Во-первых, у меня все рисунки будут открываться в QMdiArea, а у QMdiSubWindow нет никаких setData.
Но главное, если реализовать кисточку как свойство холста, то при смене холста на холст у которого текущая кисточка другая, ему придётся убирать с панели кистей настройки, соответствующие текущей кисти и заполнять настройками для новой. Вот это меня смущает. Может тогда стоит сделать метод Brush::populateBrushToolBar( BrushToolBar *btb), в котором кисть это сама будет делать? |