Название: Разработка интефейса Отправлено: Vladimir от Декабрь 15, 2011, 12:40 Доброго дня! =) вопрос такого плана.. как было бы правильно разрабатывать сложный интерфейс программы? Скажем есть класс CMainWindow:
Код: class MainWindow : public QWidget т.е. это виджет на котором будет толбар, строка состояния, область настроек, состояния и прорисовка OpenGL.. все будет делаться в Designer! но слоты и функции обработки элементов управления толбара, строки состояния и т.д описывается в MainWindow, отчего он становится большим и плохо читаемым.. есть ли способ создать отдельно классы для тулбара, панелей и т.д. в которых бы описывались элементы и методы их обработки! Скажем класс СToolBar, CSettingBar... но чтобы они корректно работали с ui.. и между собой.. пробовал делать наследование, что является очевидным, но возникает еще больше вопросов.. может я просто криво делал =) или есть другой способ.. подскажите) Название: Re: Разработка интефейса Отправлено: andrew.k от Декабрь 15, 2011, 12:47 В дизайнере есть возможность использовать свои виджеты.
Простой способ использовать promote to. На форму кладешь любой подходящий виджет делаешь ему promote to свой класс. И все. В коде будет использован твой класс. Второй это писать виджет по-хорошему с пропертями и прочими причиндалами. И потом регистрировать его в дизайнере. Подробнее может кто-то подскажет, думаю это не сложно. Я не делал. Меня первый способ устроил. Не часто нужно такое. Название: Re: Разработка интефейса Отправлено: Vladimir от Декабрь 15, 2011, 14:11 почему не находит описание класса (( делаю promote to виджету тулбара, указываю класс CToolBar и хэдер "СToolBar.h".. в ui_widget этот хэдер добавляется, но на добавленную CToolBar *toolBar; ругается.. не видит пути?? хэдер лежит в src/gui/СToolBar.h! если в promote to указать такой путь тоже не видит.. ( что делать?
Название: Re: Разработка интефейса Отправлено: Bepec от Декабрь 15, 2011, 14:35 ВАШ класс, если он promote, ищется в папке вашего проекта.
Если вы оформили свой класс как плагин ( не промоте, а полностью свой плагин), то его dll и lib будут искаться в qt\plugins\designer. Название: Re: Разработка интефейса Отправлено: Vladimir от Декабрь 15, 2011, 14:50 нет, никак плагин! просто нажал правой по виджету и добавил свой класс: название и хедер "СToolBar.h"
Код: class CToolBar : public QWidget /root/Project/Vostok-build-desktop/ui_widget.h:29: error: CToolBar.h: No such file or directory !!! Название: Re: Разработка интефейса Отправлено: kambala от Декабрь 15, 2011, 16:01 ну так напиши src/gui/СToolBar.h
Название: Re: Разработка интефейса Отправлено: Vladimir от Декабрь 15, 2011, 16:35 сразу не видело.. но потом именно так все и заработало!) Но суть в другом: сделал я promote to для виджета (QWidget) на котором расположены куча кнопок, комбобоксов и других элементов и как к ним обращаться теперь? Моей целью было сделать панель инструментов отдельным классом со своими элементами и методами обработки этих элементов! И такие классы для панели настроек, строки состояния и т.д.! И эти классы должны взимодействовать между собой и главной формой (класс МainWindow).. изменение в панели настроек, какого-то параметра должно отобразиться в панели инструментов скажем.. таким образом я хотел разгрузить класс МainWindow в котором в противном случае надо описывать все методы по обработке толбара, и всех других панелей..
Наследуя МainWindow, классами СToolBar и другими я вижу ui и могу изменять методами унаследованного класса, как бы так и хотелось бы.. но.. как тогда создавать в main эти классы? Код: int main(int argc, char *argv[]) при создании объектов toolBar и settBar будет вызываться констуктор класса родителя (еще 2 раза), т.е. MainWindow и обращение будет не к первоначально созданному ui.. следовательно ничерта работать не будет))) в общем как быть?) Название: Re: Разработка интефейса Отправлено: andrew.k от Декабрь 15, 2011, 17:01 Я даже не знаю, что тут написать? :o
До каких пор будут встречаться новички, которые не имеют времени и желания читать основы основ? Обращаться к promote виджету так же как и к остальным. Никакой разницы. Зачем ты создал еще два экземпляра - непонятно. Из фильма голая правда: "Если ты сама не хочешь заниматься с собой сексом, то почему кто-то другой будет хотеть?". В нашем контексте: "Если ты не хочешь тратить время на свое обучение, почему кто-то другой будет хотеть?" |