Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
Анна |
30.11.2018, 17:27
Сообщение
#1
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 276 Регистрация: 22.5.2008 Из: Зеленоград Пользователь №: 181 Спасибо сказали: 30 раз(а) Репутация: 4
|
Есть у меня огромная структура, которая представляет из себя внутренности некоторого устройства.
Изначально требовалось приложение, которое скачивает в эту структуру из устройства значения, что-то меняет, записывает обратно. Потом появилась надобность в другом приложении, пользующемся этой же структурой, потом ещё одно приложение... В результате у меня родился класс, который обслуживает эту структуру по принципу "мне нужно такое-то значение" - "на тебе это значение", и т.п. - то есть куча сигналов и слотов. С одной стороны у меня есть ощущение, что делаю правильно (классы не зависят друг от друга, можно собирать их в какие угодно конструкции), с другой стороны класс практически состоит из нескольких десятков сигналов и нескольких десятков слотов. Вместо такого: у меня получились : Ну, и, конечно же, есть в главном окне штабеля коннектов: Классов типа Interface несколько (они абсолютно разные. Среди них есть и QWidget и QObject), каждому нужны различные значения из структуры, спрятанной в Manager, каждый хочет какие-то поля менять и получать уведомления об изменениях. Мне вот интересно, это нормально нормальный подход к решению - всё решать через сигнал-слот, или нужно всё-таки делать гибрид, когда есть и обращение к менеджеру через указатель и с помощью сигналов, слотов и connect()? И, вообще, когда какое решение лучше применять? По ходу, получается паттерн Наблюдатель, но только оба класса являются взаимными Наблюдателями. |
|
|
|
|
Алексей1153 |
1.12.2018, 7:24
Сообщение
#2
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2946 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34
|
Анна, лично я вообще не пользуюсь сигналами и слотами кроме тех, которые уже есть в классах Qt
И всё прекрасно получается. В твоём случае контейнер всех элементов можно сделать глобальным (учесть синхронизацию доступа, если имеется многопоточность). И пусть кто угодно и где угодно пишет и читает без слотов. А уведомления можно оставить сигналами, либо свою очередь уведомлений сделать |
|
|
|
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 5.1.2026, 6:28 |