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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сигналы из подклассов  (Прочитано 2572 раз)
Frid
Гость
« : Август 04, 2018, 20:07 »

Здравствуйте уважаемые форумчане.

У меня примерно такая структура приложения Qt:
MainWindow -> Player ->  Manager -> (class1, class2, class2)
Собственно MainWindow класс интерфейса, по нажатию кнопки инициализирует класс Player наследованный от QThread. Player же в отдельном потоке читает кадры с камеры в цикле и посылает сигнал в MainWindow для отрисовки кадра. Так же Player инициализирует класс Manager, который получает кадр от Player, режет кадр по каналам и раздает получившиеся изображения трем классам (class1, class2, class2).

Вопрос в том, как из (class1, class2, class2) отправить сигнал в MainWindow?
А наоборот, отправить сигнал из MainWindow в (class1, class2, class2)?

Есть такие мысли:
     1. Передавать ссылку на MainWindow через конструкторы по цепочке до (class1, class2, class2) и в них делать коннект сигналов и слотов; (не пробовал)
     2. Коннектить сигналы к сигналам, т.е. отправлять сигнал от (class1, class2, class2) в Manager, сигнал Manager отправит сигнал в Player, а Player уже отправит сигнал в MainWindow;
     3. По тому же принципу что и 2й способ, только коннектить сигнал-слот и так передавать по цепочке.
На мой взгляд самый адекватный 1й способ (при условии что это сработает).
2й и 3й выглядит как костыль, куча бесполезного кода...

Может есть более элегантное решение такой задачи?




Записан
RedDog
Частый гость
***
Offline Offline

Сообщений: 221


Просмотр профиля
« Ответ #1 : Август 04, 2018, 20:25 »

Представьте, что завтра ваш код кто то захочет заюзать с другой гуйней, основанной не на MainWindow (QML например, или веб-морда), а он зачем то в конструкторах будет требовать ссылку на него.
Записан
Frid
Гость
« Ответ #2 : Август 04, 2018, 21:08 »

Ок, это не есть хорошо. А что вы предлагаете? Делать цепочки геттеров и сеттеров, потом проверять каждую итерацию тот ли результат что мне нужно?
Записан
RedDog
Частый гость
***
Offline Offline

Сообщений: 221


Просмотр профиля
« Ответ #3 : Август 04, 2018, 21:23 »

Насколько я понял, то Player это интерфейс некой "бизнес логики". Вот он и должен сигналить о своих изменениях, а кто на них подпишется, уже не его дело.
Ну и таки, да, "проксировать" сигналы снизу вверх, и по пути, на любом слое бизнес логики, им можно модифицировать аргументы, в зависимости от изменений реализации конкретного слоя.
Другими словами, каждый класс это некоторый самодостаточный "черный ящик" со своим АПИ, которым можно пользоваться без дополнительных телодвижений (в данном случае, не передавая туда никакую гуйню).
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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