Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Vladimir от Декабрь 15, 2011, 12:40



Название: Разработка интефейса
Отправлено: Vladimir от Декабрь 15, 2011, 12:40
Доброго дня! =) вопрос такого плана.. как было бы правильно разрабатывать сложный интерфейс программы? Скажем есть класс CMainWindow:
Код:
 class MainWindow : public QWidget
       {
          Q_OBJECT

          public:
                     MainWindow(QWidget *parent = 0);
                   ~MainWindow();

          private:
                   Ui::MainWindowUi   *ui;

т.е. это виджет на котором будет толбар, строка состояния, область настроек, состояния и прорисовка 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
    {
    public:
        CToolBar();
        ~CToolBar();

    };
в ui_widget добавилось #include "CToolBar.h", но не находит..
/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[])
{
    QApplication app(argc, argv);
    MainWindow mainWnd;
    CToolBar toolBar;      //// ?????
    CSettingBar settBar; //// ?????

    app.setActiveWindow(&mainWnd);
    QApplication::setStyle( new QPlastiqueStyle );

    mainWnd.show();


    return app.exec();
}

при создании объектов toolBar и settBar будет вызываться констуктор класса родителя (еще 2 раза), т.е. MainWindow и обращение будет не к первоначально созданному ui.. следовательно ничерта работать не будет))) в общем как быть?)


Название: Re: Разработка интефейса
Отправлено: andrew.k от Декабрь 15, 2011, 17:01
Я даже не знаю, что тут написать?  :o
До каких пор будут встречаться новички, которые не имеют времени и желания читать основы основ?

Обращаться к promote виджету так же как и к остальным. Никакой разницы.

Зачем ты создал еще два экземпляра - непонятно.

Из фильма голая правда: "Если ты сама не хочешь заниматься с собой сексом, то почему кто-то другой будет хотеть?".

В нашем контексте: "Если ты не хочешь тратить время на свое обучение, почему кто-то другой будет хотеть?"