Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: NetWorm от Мая 14, 2012, 19:38



Название: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: NetWorm от Мая 14, 2012, 19:38
Здравия всем! Вопрос такой! Есть например таблица. Там список сотрудников, и кнопки добавить, редактировать, удалить! При нажатии на первые 2 должна появится форма записи сотрудника, с соответствующими полями.. Таких похожих форм будет очень много! Вопрос обязательно ли для каждого ui файла создавать отдельный класс? т.е. помимо ui файла формы еще создавать .h и .cpp. Или же можно ui файл использовать прямо из текущего кода?


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: kambala от Мая 14, 2012, 20:15
можно, QUiLoader например


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: Bepec от Мая 14, 2012, 21:20
Насколько я понял ТСса - он хочет сказать, что ему нужно много одинаковых форм...

Или же я совсем разучился понимать людей.



Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: NetWorm от Мая 14, 2012, 21:31
Много мелких форм редактирования! Например добавление и редактирование сотрудника. Добавление и редактирование пользователей. Редактирование товара и прочих справочных данных... Как то не хочется для каждой мелкой формы писать свой класс. Хочется как-то оптимально чтоб все было. Например разные формы обрабатывались в одном классе!


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: iroln от Мая 14, 2012, 21:52
Класс должен выполнять одну единственную задачу. Если пихать в один класс обработку разных данных, такой код быстро превратится в лапшу и говнокод. Антипаттерн god object. У вас будет god form object. :) ну или я не понимаю вашу идею.  ::)


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: kambala от Мая 14, 2012, 21:55
можно просто свой базовый класс-наследник виджета или диалога создать, а потом всё наследовать от него


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: NetWorm от Мая 14, 2012, 22:00
Мне не хочется загромождать проект классами форм в которых будет по 2 метода init и save. Но сами формы внешне разные...


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: V1KT0P от Мая 14, 2012, 22:08
Мне не хочется загромождать проект классами форм в которых будет по 2 метода init и save. Но сами формы внешне разные...
И куда-же будешь пихать валидацию данных?
Я бы наверно сделал класс который считывает параметры формы из xml. Правда чем больше разницы между логикой форм тем запутанее будет класс.


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: NetWorm от Мая 14, 2012, 22:11
т.е. Предлагаете для каждой формы делать отдельный класс?


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: V1KT0P от Мая 14, 2012, 22:25
т.е. Предлагаете для каждой формы делать отдельный класс?
Нет, я же написал, один единственный класс. Логика которого задается xml файлом. В xml файле описание формы(ссылка на ui, валидаторы для полей, куда сохранять, откуда загружать и т.д.). Если у тебя действительно все очень похоже, то сможешь создавать новые формы не меняя ни одной строчки кода, просто добавить xml файл.


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: daimon от Мая 14, 2012, 23:05
т.е. Предлагаете для каждой формы делать отдельный класс?
Нет, я же написал, один единственный класс. Логика которого задается xml файлом. В xml файле описание формы(ссылка на ui, валидаторы для полей, куда сохранять, откуда загружать и т.д.). Если у тебя действительно все очень похоже, то сможешь создавать новые формы не меняя ни одной строчки кода, просто добавить xml файл.
прикольная затея

а вот погугли ещё тут http://www.learnqt.com/how-to-learn-qt/qt-bookvar/qt-designer-steps-more/ (http://www.learnqt.com/how-to-learn-qt/qt-bookvar/qt-designer-steps-more/)


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: NetWorm от Мая 15, 2012, 09:02
Меня вдохновила сия программа http://www.evolution-it.ru/files/KlatchSetup_Demo.exe (http://www.evolution-it.ru/files/KlatchSetup_Demo.exe) там в БД есть интересная таблица. "z_core" там хранится xml файл с описанием всего интерфейса... Вот что-то типа такого мне и нужно


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: daimon от Мая 15, 2012, 11:58
Меня вдохновила сия программа http://www.evolution-it.ru/files/KlatchSetup_Demo.exe (http://www.evolution-it.ru/files/KlatchSetup_Demo.exe) там в БД есть интересная таблица. "z_core" там хранится xml файл с описанием всего интерфейса... Вот что-то типа такого мне и нужно


на самый крайняк можно поменять всё содержимое формы, та где создаёшь её объект - через findChild, с XMLвсё равно получиться универсальн0))


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: NetWorm от Мая 15, 2012, 12:05
Короче я понял более универсально будет написать некий движок который будет строить формы на основании XML файла!!!


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: daimon от Мая 15, 2012, 12:07
Короче я понял более универсально будет написать некий движок который будет строить формы на основании XML файла!!!
выложишь потом на обозрение?

далеко не отходи глянь как дизайнер генерит ui


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: Igors от Мая 15, 2012, 12:17
Хз причем тут xml файл ???  Если форма никакой особой ф-циональности не имеет, то не видно зачем создавать класс. Загрузили из ресурсов, заполнили нужные контролы (выдернув их по имени) - и все дела


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: NetWorm от Мая 16, 2012, 10:11
Код
XML
<?xml version="1.0" encoding="UTF-8"?>
<ui>
<forms name="frm_users">
 <property
       title = "Форма пользователя"
modal = "true"
width = "289"
height= "227"
/>
</forms>
</ui>
 

Вот есть вот такой XML. Как грамотно его прочитать, чтобы например построить вот такую форму? Причем если сюда еще передавать вид класса на основании которого должно строиться. То создавать именно тот виджет который указан в файле уровень вложенности это будут Родители и наследники.


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: daimon от Мая 16, 2012, 10:15
Код
XML
<?xml version="1.0" encoding="UTF-8"?>
<ui>
<forms name="frm_users">
 <property
       title = "Форма пользователя"
modal = "true"
width = "289"
height= "227"
/>
</forms>
</ui>
 

Вот есть вот такой XML. Как грамотно его прочитать, чтобы например построить вот такую форму? Причем если сюда еще передавать вид класса на основании которого должно строиться. То создавать именно тот виджет который указан в файле уровень вложенности это будут Родители и наследники.
думаю самое главное сделать рекурсию обхода дерева, а дальше вытаскивать то названию тегов текущего нода или их родителей


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: mutineer от Мая 16, 2012, 10:20
Вот есть вот такой XML. Как грамотно его прочитать, чтобы например построить вот такую форму?

http://doc.crossplatform.ru/qt/4.7.x/html-qt/qxmlreader.html

То создавать именно тот виджет который указан в файле уровень вложенности это будут Родители и наследники.
Чаво?


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: mks от Мая 16, 2012, 15:37
Вот (http://sourceforge.net/projects/guisettings/) примерно то что вам надо, посмотрите. А здесь (http://forum.vingrad.ru/forum/topic-347889.html) было обсуждение.


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: aliks-os от Мая 17, 2012, 17:02
можно, QUiLoader например

Использую этот метод для загрузки внешнего вида разных форм, а в классе сделал обработку данных типовых форм используемых в программе. Формы у меня в какой то степени однотипные.

Все зависит от того что вам нужно.


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: NetWorm от Мая 17, 2012, 19:51
Я планирую хранить файлы в blob поле базы данных.


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: Rikland от Мая 30, 2012, 23:02
Здравия всем! Вопрос такой! Есть например таблица. Там список сотрудников, и кнопки добавить, редактировать, удалить! При нажатии на первые 2 должна появится форма записи сотрудника, с соответствующими полями.. Таких похожих форм будет очень много! Вопрос обязательно ли для каждого ui файла создавать отдельный класс? т.е. помимо ui файла формы еще создавать .h и .cpp. Или же можно ui файл использовать прямо из текущего кода?

Если работа идет с БД и данные в таблицах достаточно "простые" можно обойтись и без xml-файла вообще. По нажатию кнопки "добавить/редактировать" строишь диалог "на лету" следующим образом:
Цикл по полям
- заголовок столбца =>метка с названием поля для редактирования;
- тип поля => внизу/рядом с меткой размещаешь соответствующий виджет (QLineEdit, QSpinBox, ...);
Потом дополняешь это двумя кнопками "Сохранить" и "Отмена" и диалог готов.
Я в свое время задачу ведения данных с множеством таблиц решил так. Плюс "зашивал" еще в имена виджетов наименования полей и по нажатию кнопки сохранить просто пробегался по всем виджетам и строил sql-запрос "имя поля = имя виджета, значение поля = значение в виджете".


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: NetWorm от Июня 05, 2012, 18:30
Вобщем кое что у меня получилось! Структура конечно жесткая но мне большего пока и не надо! А вопрос теперь вот в чем...

Есть у меня кусочек кода который выстраивает левое меню. Там я использую компомненту iisIconLabel ну это типа лейбл только как ссылка и на нее можно различные стили навешивать....
Код:
                    //Элементы меню
                    xmlItem xmlValue = xml.find(xmlGr,md_value);
                    while (!xmlValue.isNull()){
                        name = xml.attr(xmlValue,mda_name);
                        type = xml.attr(xmlValue,mda_type);
                        title = xml.attr(xmlValue,mda_title);

                        iisIconLabel *val = new iisIconLabel(title);
                        Gr->addIconLabel(val);

                        xmlValue = xml.nextSibling(xmlValue);
                    }

вот то что получилось...
(http://content.screencast.com/users/NetWorm/folders/Jing/media/afd46777-c416-4e45-b5a4-1289845cf396/2012-06-05_2227.png)

В правой части должны появляться формы в зависимости от того что выбрано в левой части меню... Вот и вопрос как организовать можно это???


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: Kurles от Июня 05, 2012, 18:36
В правой части должны появляться формы в зависимости от того что выбрано в левой части меню... Вот и вопрос как организовать можно это???
QStackedWidget (http://qt-project.org/doc/qt-4.8/qstackedwidget.html)


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: NetWorm от Июня 05, 2012, 18:40
Я это понимаю! Вопрос немного в другом... каким образом мне к пункту меню привязать определенную форму и показать ее на  панели справа!!!


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: V1KT0P от Июня 05, 2012, 18:48
Я это понимаю! Вопрос немного в другом... каким образом мне к пункту меню привязать определенную форму и показать ее на  панели справа!!!
Так добавь атрибут которому будет присваиваться имя формы которая должна быть вызвана при нажатии. А затем уже отображай форму зная имя.


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: NetWorm от Июня 05, 2012, 18:50
Именно в этом затык и состоит у меня!


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: NetWorm от Июня 05, 2012, 18:53
Нужно где-то хранить структуру эту чтобы потом в поиске открывать нужную форму!!!


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: V1KT0P от Июня 05, 2012, 19:04
Нужно где-то хранить структуру эту чтобы потом в поиске открывать нужную форму!!!
Перебрать при запуске все файлы-формы и вытянуть из каждой название, положить название и имя файла в QHash. Либо вместо названия просто хранить относительную ссылку на файл-форму которую требуется отобразить. Вроде все просто.


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: NetWorm от Июня 05, 2012, 19:59
Нужно где-то хранить структуру эту чтобы потом в поиске открывать нужную форму!!!
Перебрать при запуске все файлы-формы и вытянуть из каждой название, положить название и имя файла в QHash. Либо вместо названия просто хранить относительную ссылку на файл-форму которую требуется отобразить. Вроде все просто.

Благодарю за подсказочку!!! Вроде разобрался!!!!


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: Ground от Июня 14, 2012, 15:37
А никто не подскажет, как реализовать такой интерфейс, как NetWorm привел на скриншоте?


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: GreatSnake от Июня 14, 2012, 15:42
А никто не подскажет, как реализовать такой интерфейс, как NetWorm привел на скриншоте?
см. здесь (http://www.prog.org.ru/index.php?topic=21482.msg148896#msg148896)


Название: Re: Обязательно ли создание отдельного класса для каждой формы?
Отправлено: Ground от Июня 14, 2012, 15:46
А никто не подскажет, как реализовать такой интерфейс, как NetWorm привел на скриншоте?
см. здесь (http://www.prog.org.ru/index.php?topic=21482.msg148896#msg148896)
Спасибо! То что нужно