![]() |
|
![]() ![]() ![]() |
|
petroline |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 11.8.2013 Репутация: нет Всего: нет |
Собственно идея вот в чем... Требуется создать некий базовый класс (виджет), представляющий собой диалоговое окно, включающее пару виджетов (в нижнем кнопки Ок, отмена, в верхнем элементы ввода данных). В общем, базовый класс для создания форм ввода данных. Позволяют ли возможности QtCreator делать всё это визуально. Т.е. не только создать саму форму базового класса (это не проблема), но и использовать ее в дальнейшем. Сам опыт создания визуальных виджетов встраиваемых в Qt у меня пока не увенчался успехом Тут поднимал тему..., но возникает вопрос, стоит-ли вообще эту тему дальше копать ? Т.е., по сути, в дальнейшем в наследниках своей формы, я должен буду размещать элементы управления в верхнем виджете базового класса.
Приношу извинения за некоторую сумбурность в тексте. Qt как и с++ начал изучать недавно. В С# на VS.NET или Visual FoxPro такие вещи делаются без проблем, в пару кликов. В NetBeans на Java не получилось такой финт повторить (как я понял, просто возможности IDE не позволяют). |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
petroline |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 11.8.2013 Репутация: нет Всего: нет |
Эм... вобще-то об этом и речь ![]() 1. Создали форму Ui (Form1). Описали в исходниках бизнеслогику. 2. Создаем новую форму (Form2), в качестве базового класса указываем для нее ранее созданную Form1. 3. Кидаем на нее поля ввода данных, подключаем данные и все красивенько и быстренько.... Но это в мечтах... В реалии, при создании новых форм QtCretor предлагает в качестве базовых, только свои базовые (QWindow, QDialog и т.д.). Преобразовать в свою ее так же не получается (нет такой возможности в QtCreator как я понял). Я конечно попробовал подправить в тектовике Form2.ui, прописав там свой класс, но хорошего из этого то же ничего не вышло (элементы базового класса не отрисовались, виджеты, расположенные на нем не доступны в визуальном редакторе и т.д.)... От того и вопрос тут... Ну, или в целом, как делают программисты с++ Qt в таких случаях... Не рисуют же каждую форму отдельно описываю заново всю бизнес логику... Может вообще какой-то другой подход... Это сообщение отредактировал(а) petroline - 10.9.2013, 12:00 |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
petroline, вообще-то наследование основных форм редко используется. А потом, никто тебе не мешает сделать форму отдельно, а потом из конструктора наследованного класса вызвать ui->setupUi(this):
|
|||
|
||||
petroline |
|
||||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 11.8.2013 Репутация: нет Всего: нет |
Хм... "вообще-то наследование основных форм редко используется"... тогда как ? Предположим я пишу какую-то прогу для автоматизации торговли... товары, прайсы, приходы, расход и т.д... это чертова туча табличных форм (журналы) и чертова туча форм редактирования данных. Все формы просмотра журналов создаются на основании базового класса - браузера(назовем его так), где табличка и панель инструментов с кнопками "добавить", "изменить", "удалить" и т.д.. При запуске такой формы достаточно передать ей текст запроса ну и воткнуть на нее несколько специфических кнопок с обработками. То же касается и форм редактирования данных - их много, но все они по сути схожи (передать идентификатор редактируемой записи, получить данные, привязать к полям ввода, считать с полей ввода, записать в базу). Все это входит в функции базового класа. В наследнике только кидаем поля и привязываем данные. Как можно это реализовать не используя наследование основных форм ? Это что же, описывать каждую форму в ручную или свою IDE писать ? ![]() Предоженный Вами вариант я пытался рассматривать, но... Вот стандартный состав базового класса (vs.net, vfp, delphi и т.д.) Форма, на ней кнопки "Записать", "Отмена", к кнопам подключены функции (методы, процедуры и т.д., в зависимости от языка и среды) которые выполняют работу по записи данных. Так в формах есть методы получения данных из базы, вызываемые публичные методы перед сохранением, после сохранения и т.д. В конечном итоге, я создаю наследника этой формы и все что мне остается сделать, так это разместить на форме элементы ввода данных, привязать к ним поля (в vfp просто выбрать как свойства, в vs.net настроить databind и т.д.). Форма готова. Ну может добавить какие-то специфические обработки (контроль правильности ввода данных в полях, заполнение по умолчанию и т.д.) Т.е. вся основная работа программиста сводится к созданию этих самых базовых классов. Сам проект может лепить потом студент по простой документации использования базовых классов. Теперь по Вашему предложению.... Созадл я форму описал в исходниках всю бизнес-логику.... Всё это явило мне некий базовый класс... Создаю от него наследника... В качестве MyWidget (по Вашему примеру), я указываю уже новую форму ? И опять на нее втыкаю кнопки и как-то привязываю к ним сигналы - слоты базового класса ? Или создаю копию формы ? Или как ? Я, честно говоря, пока пытаюсь вникнуть в механизм, используемый в QtCreator для построения приложений, потому могу нести много ерести. За что приношу извинения... С классом просмотрщика я кое как выкртился (просто создал виджет с QTableView и кнопками управления, который бросаю на форму и передаю ему текст запроса)... а вот с созданием класса редактора завис напроч... Это сообщение отредактировал(а) petroline - 10.9.2013, 18:07 |
||||
|
|||||
Guinness |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: 2 Всего: 10 |
petroline, QStackedLayout + QAction, которые запихиваем в тулбар, либо связываем их сигналы с соответствующими кнопками.
Если в двух словах, то Вы создаёте форму с полями для заполнения, Добавляете её в QStackedLayout. Таких форм у Вас может быть очень много, не суть. Далее у текущей формы, которая в даннуый момент отображается, Вы запращиваете список QAction. В данном случае, это действия которые можно воспроизвести с текущей формой. Если не париться, то можно это всё засунуть в QToolBar, там автоматически отобразятся названия и иконки для QAction( если, конечно, Вы их задали при создании формы ;) ). Или можно просто привязать каждый QAction к конкретному QAbstractButton или QToolButton. Это если я правильно понял то, что Вы хотите сделать. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |