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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Разработка интефейса  (Прочитано 3965 раз)
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« : Декабрь 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.. и между собой.. пробовал делать наследование, что является очевидным, но возникает еще больше вопросов.. может я просто криво делал =)

или есть другой способ.. подскажите)

Записан
andrew.k
Гость
« Ответ #1 : Декабрь 15, 2011, 12:47 »

В дизайнере есть возможность использовать свои виджеты.
Простой способ использовать promote to. На форму кладешь любой подходящий виджет делаешь ему promote to свой класс.
И все. В коде будет использован твой класс.

Второй это писать виджет по-хорошему с пропертями и прочими причиндалами. И потом регистрировать его в дизайнере.
Подробнее может кто-то подскажет, думаю это не сложно. Я не делал. Меня первый способ устроил. Не часто нужно такое.
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #2 : Декабрь 15, 2011, 14:11 »

почему не находит описание класса (( делаю promote to виджету тулбара, указываю класс CToolBar и хэдер "СToolBar.h".. в ui_widget этот хэдер добавляется, но на добавленную CToolBar *toolBar;  ругается.. не видит пути?? хэдер лежит в src/gui/СToolBar.h! если в promote to указать такой путь тоже не видит.. ( что делать?
Записан
Bepec
Гость
« Ответ #3 : Декабрь 15, 2011, 14:35 »

ВАШ класс, если он promote, ищется в папке вашего проекта.

Если вы оформили свой класс как плагин ( не промоте, а полностью свой плагин), то его dll и lib будут искаться в qt\plugins\designer.
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #4 : Декабрь 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 !!!
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #5 : Декабрь 15, 2011, 16:01 »

ну так напиши src/gui/СToolBar.h
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #6 : Декабрь 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.. следовательно ничерта работать не будет))) в общем как быть?)
Записан
andrew.k
Гость
« Ответ #7 : Декабрь 15, 2011, 17:01 »

Я даже не знаю, что тут написать?  Шокированный
До каких пор будут встречаться новички, которые не имеют времени и желания читать основы основ?

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

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

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

В нашем контексте: "Если ты не хочешь тратить время на свое обучение, почему кто-то другой будет хотеть?"
« Последнее редактирование: Декабрь 15, 2011, 17:04 от andrew.k » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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