Название: Проектирование Отправлено: lokoArt от Ноябрь 28, 2009, 11:58 Привет всем!!! Пишу программу с GUI. При нажатии кнопки на каком либо виджете конечно же должны срабатывать какое-либо событие. Подскажите как лучше это сделать.
Варианты: 1. В каждый класс виджета включать объект класса, который выполняет действия, свойственые для этой формы. 2. В каждом классе виджета писать функции которые что-либо выполняют. Или подскажите другие варианты которые буду лучше)))Заранее спасибо! Название: Re: Проектирование Отправлено: lit-uriy от Ноябрь 28, 2009, 15:20 виджет должен выполнять свою функцию полностью и не более того.
Название: Re: Проектирование Отправлено: lokoArt от Ноябрь 28, 2009, 15:46 Значит лучше в виджет встраивать объект класса, который будет что-то делать?
Название: Re: Проектирование Отправлено: lit-uriy от Ноябрь 28, 2009, 15:48 нет, просто виджет должен выполнять свою функцию. Т.е. определись с функциональностью виджета.
Название: Re: Проектирование Отправлено: lokoArt от Ноябрь 28, 2009, 15:54 Ну у меня например виджет должен отправлять заросы к базе данных... Получается что у меня должна быть в нём функция которая это делает?
Название: Re: Проектирование Отправлено: lit-uriy от Ноябрь 28, 2009, 18:53 опиши этот виджет, как он выглядит (можешь выложить его снимок)?
Название: Re: Проектирование Отправлено: lokoArt от Ноябрь 28, 2009, 19:25 Вот он.... При нажатии на OK мы должны обратиться к базе данных и вернуть список найденных клиентов)))
Название: Re: Проектирование Отправлено: spectre71 от Ноябрь 28, 2009, 19:28 Ну у меня например виджет должен отправлять заросы к базе данных... Получается что у меня должна быть в нём функция которая это делает? Виджет точно никому ничего не должен. :) Можно конечно сделать по всякому, но лучше для работы с базой данных иметь отдельную сущность(класс или классы). А виджет может: 1) получить указатель на нужный объект/объекты и вызывать его методы на те или иные управляющие команды(сигналы своих контролов) со своей стороны, получать нужную инфу из объекта и отображать ее в своих контролах, .. 2) может не знать ничего об объектах работающих с запросами, но посылать им и получать от них те или иные сигналы. А связать между собой сигналы/слоты виджета и объектов может как виджет, так и объект или другой объект не выполняющий запросы, а конторолирующий взаимодествие виджета с объектом запросов. 3) может быть смешанные 1-й и 2-й вариант Итд...... Все зависит от задачи, от твоих знаний, привычек, стиля итд. Придумывать вариантов можно много. Просто начни писать, а там поймешь что к чему и если что пределаешь. А абстрактно рассуждать безсмысленно. Название: Re: Проектирование Отправлено: spectre71 от Ноябрь 28, 2009, 19:37 Вот он.... При нажатии на OK мы должны обратиться к базе данных и вернуть список найденных клиентов))) - Если диалог модальный, то можно например после выхода из него по "ОК" считать информацию из его полей и инициализировать ей объект работающий с запросами, вызвать у него соответствующий метод для отправки запроса, итд...- Если не модальный, то видимо лучше перед вызовом диалога передать ему указатель на объект выполняющий запросы и соответственно инициализацию объекта данными и посылку запроса делать в слоте для кнопки "ОК" Это простые варианты. Название: Re: Проектирование Отправлено: lokoArt от Ноябрь 28, 2009, 19:44 диалог модальный)))
Название: Re: Проектирование Отправлено: lit-uriy от Ноябрь 28, 2009, 23:25 lokoArt, Насчёт данного диалога, лучше сделать так как предлагает Spectre для модального диалога. Тогда ты можешь этот диалог использовать во многих приложениях.
А по самой программе тоже могут быть варианты: - Реализовать основные алгоритмы программы в наслединке Qwidget или QMainWindow или QApplacation - Реализовать основные алгоритмы программы в наследнике QObject и в нём создавать объекты графического интерфейса (их логика взаимодействия может быть реализована в них самих) Первый вариант быстрый и привычный (так построены многие примеры Qt), второй вариант позволяет перерабатывать программу более основательно, например превратить её из ГПИ в консольное приложение, читающее данные из конфигурационного файла или из потока ввода. Название: Re: Проектирование Отправлено: nixman05 от Ноябрь 28, 2009, 23:50 В интерфейсных классах следует определять только интерфейс пользователя, а также программые интерфейсы взаимодействия с другими обьектами программы. Обращение же к файлам, базам данных и т.п. следует реализовывать в отдельных классах-сущностях. Взаимодействие интерфейса и сущности следует организовывать с использованием контролера. т.е. н.п. В классе диалогового окна определены сигналы отправки данных, сигнал запроса получения данных... слот сохранения данных, слот подготовки данных к отправке... в классе сущности слоты сохранения и загрузки данных из БД а также сигнал для отправки данных в контролере происходит соединение соответствующих сигналов и слотов. |