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