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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: проектирование пользовательского интерфейса  (Прочитано 9137 раз)
_OLEGator_
Гость
« Ответ #15 : Июль 15, 2014, 21:49 »

Пффф. Гибкая система подразумевает слабую связанность и компактность ее частей, которые можно легко изменять/заменять/расширять. Каждый класс должен выполнять строго свою конкретную функцию, в отличие от суперклассов. Ну и т.д.
Записан
qt_newer
Гость
« Ответ #16 : Июль 15, 2014, 23:52 »

Спасибо всем за ответы! Было бы здорово получить какие-то конкретные советы по динамическому проектированию, а еще лучше примеры. В составе Qt Creator пока ничего похожего найти не удалось. Или, все-таки, разбить приложение на несколько основных форм, а внутри них уже организовать динамику? Это было бы самым логичным, имхо, но начальство уже на этапе выбора режима работы приложения- первая форма с двумя кнопками: режим 1, режим 2- хочет одну форму Грустный
Записан
Bepec
Гость
« Ответ #17 : Июль 16, 2014, 00:20 »

Для пользователя не будет никакой визуальной разницы. Что несколько динамических форм, что полностью гибкий интерфейс. Это имеет значение только для программиста Веселый
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #18 : Июль 16, 2014, 10:41 »

Ну вот, пошла "архитектура", "слабая связанность и компактность" и.т.п. Улыбающийся  А какие собственно проблемы делать все в 1 форме? Удачные обобщения наверняка найдутся, вообще что здесь "страшно-архитектурного"?  Улыбающийся

Было бы здорово получить какие-то конкретные советы по динамическому проектированию, а еще лучше примеры.
Есть термин "динамическое программирование", классический пример
Цитировать
Есть N монеток, у каждой свой номинал. Какое минимальное число монеток нужно чтобы получить заданную сумму S ?
Это не то что Вы хотели - но тоже (зато) интересно
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #19 : Июль 16, 2014, 12:28 »

Спасибо всем за ответы! Было бы здорово получить какие-то конкретные советы по динамическому проектированию, а еще лучше примеры. В составе Qt Creator пока ничего похожего найти не удалось. Или, все-таки, разбить приложение на несколько основных форм, а внутри них уже организовать динамику? Это было бы самым логичным, имхо, но начальство уже на этапе выбора режима работы приложения- первая форма с двумя кнопками: режим 1, режим 2- хочет одну форму Грустный
Susenin в самом начале дал дельные советы, к которым я тоже рекомендую прислушаться. У вас уже есть функциональное ядро программы, к которому надо прилепить GUI? Или начальство хочет в динамический интерфейс динамический функционал вставить? Улыбающийся Если хотите конкретики, то нарисуйте хоть на бумаге набор необходимых форм, тогда будет понятно, как много там всего меняется, и как лучше это реализовать. И здесь примеры предоставьте, чтобы могли конкретные советы давать.
Вообще, похоже, то что вы хотите получить, реализовано в QML, который использовать нельзя Улыбающийся. Думаю, в любом случае, пригодится погуглить "state machine gui".
Записан

Пока сам не сделаешь...
Susenin
Новичок

Offline Offline

Сообщений: 35


Просмотр профиля
« Ответ #20 : Июль 16, 2014, 16:42 »

Я тут подумал, что можно сделать так:

1. Создаем минимально необходимый пул виджетов, которые нужны для проектирования.
Т.е. если форм всего 10, и на каждой не больше 2-х кнопок, значит в пуле всего 2 кнопки.

При старте приложения заполняем пул.
Код:
std::vector<QWidget *> widgets;
widgets.push_back(new QPushButton);
widgets.push_back(new QPushButton);
widgets.push_back(new QComboBox);

2. Нужно создать классы-описания формы. Если при стандартном подходе эти классы генерит uic из *.ui файлов, тот тут их нужно создать самим. Первое что приходит в голову - копипастой.
И заменить в методе
Код:
void setupUi(QWidget *)
динамическое создание виджетов на выбор их из пула. Самое ценное, что есть в файлах, созданных uic, это настройка виджетов.
Для этого:
Создаем вспомогательный проект. В нем создаем столько *.ui файлов, сколько форм в приложении. Редактируем их в Дизайнере до полного удовлетворения.
После прохода uic по *.ui файлам получаем несколько ui_<имя_ui_файла>.h файлов. Далее копируем их в свой проект, изменяем создание виджетов на выбор из пула.

Я бы просто в методе
Код:
void setupUi(QWidget *)
просто удалил строки с new. Выбор из пула сделал бы в конструкторе.

Пока выглядит несложно.

Как только форма скрывается  - ее нужно удалять, которая появляется - создавать. Это будет работать быстро, ведь нет выделения памяти, только выбор из пула и настройка виджетов под новый вид.
« Последнее редактирование: Июль 16, 2014, 16:48 от Susenin » Записан
qt_newer
Гость
« Ответ #21 : Июль 16, 2014, 17:36 »

Спасибо! А у меня сегодня появилась такая идея (частично реализованная):
свой класс лейаут (на основе грида): у него 3 раздела- заголовок, центральная изменяемая часть и управление (2 кнопки)
потом много классов виджетов: виджет создается, устанавливается для центральной части, потом удаляется, создается след., опять устанавливается и т.д. И соответственно, меняются управлящие кнопки: их слоты, заголовки. Это должно работать для одной ветви проекта, потом надо как-то реализовать переключение между ветвями. Вообщем, заранее спасибо за любые идеи-примеры, как это сделать правильно (вкл. создание своего класса лейаут)
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #22 : Июль 16, 2014, 17:45 »

Или начальство хочет в динамический интерфейс динамический функционал вставить? Улыбающийся
Ну это вряд ли  Улыбающийся

Создаем вспомогательный проект. В нем создаем столько *.ui файлов, сколько форм в приложении. Редактируем их в Дизайнере до полного удовлетворения.
Полностью согласен

После прохода uic по *.ui файлам получаем несколько ui_<имя_ui_файла>.h файлов. Далее копируем их в свой проект, изменяем создание виджетов на выбор из пула.
Совершенно не согласен. Не нужна тонна файлов что наколбасил дизайнер. Гораздо лучше задействовать QFormBuilder и грузить прямо ui файл. Тогда легко сделать общую часть, напр
Код
C++ (Qt)
QPushButton *button = parentWidget->findChild<QPushButton *>("button1");
Смысл - одна переменная для всех форм, а имя "button1" обеспечим в дызайнере.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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