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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проектирование  (Прочитано 5269 раз)
lokoArt
Гость
« : Ноябрь 28, 2009, 11:58 »

Привет всем!!! Пишу программу с GUI. При нажатии кнопки на каком либо виджете конечно же должны срабатывать какое-либо событие. Подскажите как лучше это сделать.

Варианты:
1. В каждый класс виджета включать объект класса, который выполняет действия, свойственые для этой формы.
2. В каждом классе виджета писать функции которые что-либо выполняют.

Или подскажите другие варианты которые буду лучше)))Заранее спасибо!
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Ноябрь 28, 2009, 15:20 »

виджет должен выполнять свою функцию полностью и не более того.
Записан

Юра.
lokoArt
Гость
« Ответ #2 : Ноябрь 28, 2009, 15:46 »

Значит лучше в виджет встраивать объект класса, который будет что-то делать?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Ноябрь 28, 2009, 15:48 »

нет, просто виджет должен выполнять свою функцию. Т.е. определись с функциональностью виджета.
Записан

Юра.
lokoArt
Гость
« Ответ #4 : Ноябрь 28, 2009, 15:54 »

Ну у меня например виджет должен отправлять заросы к базе данных... Получается что у меня должна быть в нём функция которая это делает?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Ноябрь 28, 2009, 18:53 »

опиши этот виджет, как он выглядит (можешь выложить его снимок)?
Записан

Юра.
lokoArt
Гость
« Ответ #6 : Ноябрь 28, 2009, 19:25 »

Вот он.... При нажатии на OK мы должны обратиться к базе данных и вернуть список найденных клиентов)))
Записан
spectre71
Гость
« Ответ #7 : Ноябрь 28, 2009, 19:28 »

Ну у меня например виджет должен отправлять заросы к базе данных... Получается что у меня должна быть в нём функция которая это делает?

Виджет точно никому  ничего не должен. Улыбающийся

Можно конечно сделать по всякому, но лучше для работы с базой данных иметь отдельную сущность(класс или классы).
А виджет может:
1) получить указатель на нужный объект/объекты и вызывать его методы на те или иные управляющие команды(сигналы своих контролов) со своей стороны, получать нужную инфу из объекта и отображать ее в своих контролах, ..
2) может не знать ничего об объектах работающих с запросами, но посылать им и получать от них те или иные сигналы. А связать между собой сигналы/слоты виджета и объектов может как виджет, так и объект или другой объект не выполняющий запросы, а конторолирующий взаимодествие виджета с объектом запросов.
3) может быть смешанные 1-й и 2-й вариант
Итд......

Все зависит от задачи, от твоих знаний, привычек, стиля итд.

Придумывать вариантов можно много. Просто начни писать, а там поймешь что к чему и если что пределаешь. А абстрактно рассуждать безсмысленно.


Записан
spectre71
Гость
« Ответ #8 : Ноябрь 28, 2009, 19:37 »

Вот он.... При нажатии на OK мы должны обратиться к базе данных и вернуть список найденных клиентов)))
- Если диалог модальный, то можно например после выхода из него по "ОК" считать информацию из его полей и инициализировать ей объект работающий с запросами, вызвать у него соответствующий метод для отправки запроса, итд...
- Если не модальный, то видимо лучше перед вызовом диалога передать ему указатель на объект выполняющий запросы и соответственно инициализацию объекта данными и посылку запроса делать в слоте для кнопки "ОК"
Это простые варианты.
Записан
lokoArt
Гость
« Ответ #9 : Ноябрь 28, 2009, 19:44 »

диалог модальный)))
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #10 : Ноябрь 28, 2009, 23:25 »

lokoArt, Насчёт данного диалога, лучше сделать так как предлагает Spectre для модального диалога. Тогда ты можешь этот диалог использовать во многих приложениях.

А по самой программе тоже могут быть варианты:
- Реализовать основные алгоритмы программы в наслединке Qwidget или QMainWindow или QApplacation
- Реализовать основные алгоритмы программы в наследнике QObject и в нём создавать объекты графического интерфейса (их логика взаимодействия может быть реализована в них самих)

Первый вариант быстрый и привычный (так построены многие примеры Qt), второй вариант позволяет перерабатывать программу более основательно, например превратить её из ГПИ в консольное приложение, читающее данные из конфигурационного файла или из потока ввода.
Записан

Юра.
nixman05
Гость
« Ответ #11 : Ноябрь 28, 2009, 23:50 »


В интерфейсных классах следует определять только интерфейс пользователя, а также  программые интерфейсы взаимодействия с другими обьектами программы.
Обращение же к файлам, базам данных и т.п. следует реализовывать в отдельных классах-сущностях.  Взаимодействие интерфейса и сущности следует организовывать с использованием контролера.

т.е. н.п. В классе диалогового окна определены сигналы отправки данных, сигнал запроса получения данных...
слот сохранения данных, слот подготовки данных к отправке...

в классе сущности слоты сохранения и загрузки данных из БД
а также сигнал для отправки данных

в контролере происходит соединение соответствующих сигналов и слотов.

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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