Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Визуальное проектирование базовых виджетов в Qt, Речь идет о своих собственных.... 
:(
    Опции темы
petroline
Дата 10.9.2013, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 11.8.2013

Репутация: нет
Всего: нет



Собственно идея вот в чем... Требуется создать некий базовый класс (виджет), представляющий собой диалоговое окно, включающее пару виджетов (в нижнем кнопки Ок, отмена, в верхнем элементы ввода данных). В общем, базовый класс для создания форм ввода данных. Позволяют ли возможности QtCreator делать всё это визуально. Т.е. не только создать саму форму базового класса (это не проблема), но и использовать ее в дальнейшем. Сам опыт создания визуальных виджетов встраиваемых в Qt у меня пока не увенчался успехом Тут поднимал тему..., но возникает вопрос, стоит-ли вообще эту тему дальше копать ? Т.е., по сути, в дальнейшем в наследниках своей формы, я должен буду размещать элементы управления в верхнем виджете базового класса. 

Приношу извинения за некоторую сумбурность в тексте. Qt как и с++ начал изучать недавно. В С# на VS.NET или Visual FoxPro такие вещи делаются без проблем, в пару кликов. В NetBeans на Java не получилось такой финт повторить (как я понял, просто возможности IDE не позволяют).
PM MAIL   Вверх
borisbn
Дата 10.9.2013, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(petroline @  10.9.2013,  08:52 Найти цитируемый пост)
(в нижнем кнопки Ок, отмена, в верхнем элементы ввода данных

а чем это не подходит ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
petroline
Дата 10.9.2013, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 11.8.2013

Репутация: нет
Всего: нет



Цитата(borisbn @ 10.9.2013,  15:04)
Цитата(petroline @  10.9.2013,  08:52 Найти цитируемый пост)
(в нижнем кнопки Ок, отмена, в верхнем элементы ввода данных

а чем это не подходит ?


Эм... вобще-то об этом и речь smile Я спрашиваю, реализуемо ли то, что я хочу, средствами QtCreator? Речь не идет о том, возможно ли это делать на языке c++ с библиотекой Qt в коде. Понятно, что возможно и тут проблем в создании классов, наследовании и т.д. никаких нет. Проблема именно в том, что бы это работало визуально. В мечтах это выглядит так:

1. Создали форму Ui (Form1). Описали в исходниках бизнеслогику.
2. Создаем новую форму (Form2), в качестве базового класса указываем для нее ранее созданную Form1.
3. Кидаем на нее поля ввода данных, подключаем данные и все красивенько и быстренько....

Но это в мечтах... В реалии, при создании новых форм QtCretor предлагает в качестве базовых, только свои базовые (QWindow, QDialog и т.д.). Преобразовать в свою ее так же не получается (нет такой возможности в QtCreator как я понял). Я конечно попробовал подправить в тектовике Form2.ui, прописав там свой класс, но хорошего из этого то же ничего не вышло (элементы базового класса не отрисовались, виджеты, расположенные на нем не доступны в визуальном редакторе и т.д.)... От того и вопрос тут...

Ну, или в целом, как делают программисты с++ Qt в таких случаях... Не рисуют же каждую форму отдельно описываю заново всю бизнес логику... Может вообще какой-то другой подход...

Это сообщение отредактировал(а) petroline - 10.9.2013, 12:00
PM MAIL   Вверх
bsa
Дата 10.9.2013, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



petroline, вообще-то наследование основных форм редко используется. А потом, никто тебе не мешает сделать форму отдельно, а потом из конструктора наследованного класса вызвать ui->setupUi(this):
Код
MyClass::MyClass(QWidget *parent)
    : MyBaseClass(parent)
    , ui(new Ui::MyWidget)
{
   ui->setupUi(this);
}

PM   Вверх
petroline
Дата 10.9.2013, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 11.8.2013

Репутация: нет
Всего: нет



Цитата(bsa @ 10.9.2013,  21:33)
petroline, вообще-то наследование основных форм редко используется. А потом, никто тебе не мешает сделать форму отдельно, а потом из конструктора наследованного класса вызвать ui->setupUi(this):
Код
MyClass::MyClass(QWidget *parent)
    : MyBaseClass(parent)
    , ui(new Ui::MyWidget)
{
   ui->setupUi(this);
}

Хм... "вообще-то наследование основных форм редко используется"... тогда как ?

Предположим я пишу какую-то прогу для автоматизации торговли... товары, прайсы, приходы, расход и т.д... это чертова туча табличных форм (журналы) и чертова туча форм редактирования данных. Все формы просмотра журналов создаются на основании базового класса - браузера(назовем его так), где табличка и панель инструментов с кнопками "добавить", "изменить", "удалить" и т.д.. При запуске такой формы достаточно передать ей текст запроса ну и воткнуть на нее несколько специфических кнопок с обработками. То же касается и форм редактирования данных - их много, но все они по сути схожи (передать идентификатор редактируемой записи, получить данные, привязать к полям ввода, считать с полей ввода, записать в базу). Все это входит в функции базового класа. В наследнике только кидаем поля и привязываем данные. Как можно это реализовать не используя наследование основных форм ? Это что же, описывать каждую форму в ручную или свою IDE писать ?smile

Предоженный Вами вариант я пытался рассматривать, но... 
Вот стандартный состав базового класса (vs.net, vfp, delphi  и т.д.)
Форма, на ней кнопки "Записать", "Отмена", к кнопам подключены функции (методы, процедуры и т.д., в зависимости от языка и среды) которые выполняют работу по записи данных.
Так в формах есть методы получения данных из базы, вызываемые публичные методы перед сохранением, после сохранения и т.д. В конечном итоге, я создаю наследника этой формы и все что мне остается сделать, так это разместить на форме элементы ввода данных, привязать к ним поля (в vfp просто выбрать как свойства, в vs.net настроить databind и т.д.). Форма готова. Ну может добавить какие-то специфические обработки (контроль правильности ввода данных в полях, заполнение по умолчанию и т.д.) Т.е. вся основная работа программиста сводится к созданию этих самых базовых классов. Сам проект может лепить потом студент по простой документации использования базовых классов. 

Теперь по Вашему предложению....
Созадл я форму описал в исходниках всю бизнес-логику....
Всё это явило мне некий базовый класс...

Создаю от него наследника... В качестве MyWidget (по Вашему примеру), я указываю уже новую форму ? И опять на нее втыкаю кнопки и как-то привязываю к ним сигналы - слоты базового класса ?
Или создаю копию формы ? Или как ?

Я, честно говоря, пока пытаюсь вникнуть в механизм, используемый в QtCreator для построения приложений, потому могу нести много ерести. За что приношу извинения...
С классом просмотрщика я кое как выкртился (просто создал виджет с QTableView и кнопками управления, который бросаю на форму и передаю ему текст запроса)... а вот с созданием класса редактора завис напроч...


Это сообщение отредактировал(а) petroline - 10.9.2013, 18:07
PM MAIL   Вверх
Guinness
Дата 11.9.2013, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 21.6.2009
Где: Зеленоград

Репутация: 2
Всего: 10



petrolineQStackedLayout + QAction, которые запихиваем в тулбар, либо связываем их сигналы с соответствующими кнопками.
Если в двух словах, то Вы создаёте форму с полями для заполнения,
Цитата(petroline @  10.9.2013,  19:01 Найти цитируемый пост)
В наследнике только кидаем поля и привязываем данные.

Добавляете её в QStackedLayout. Таких форм у Вас может быть очень много, не суть. Далее у текущей формы, которая в даннуый момент отображается, Вы запращиваете список QAction. В данном случае, это действия которые можно воспроизвести с текущей формой.
Если не париться, то можно это всё засунуть в QToolBar, там автоматически отобразятся названия и иконки для QAction( если, конечно, Вы их задали при создании формы ;) ). Или можно просто привязать каждый QAction к конкретному QAbstractButton или QToolButton.
Это если я правильно понял то, что Вы хотите сделать.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0895 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.