Здравствуйте, гость ( Вход | Регистрация )
Алексей1153 | Дата 1.12.2018, 7:24 |
Анна, лично я вообще не пользуюсь сигналами и слотами кроме тех, которые уже есть в классах Qt То есть, не ввожу новых И всё прекрасно получается. В твоём случае контейнер всех элементов можно сделать глобальным (учесть синхронизацию доступа, если имеется многопоточность). И пусть кто угодно и где угодно пишет и читает без слотов. А уведомления можно оставить сигналами, либо свою очередь уведомлений сделать |
|
Анна | Дата 30.11.2018, 17:27 |
Есть у меня огромная структура, которая представляет из себя внутренности некоторого устройства. Изначально требовалось приложение, которое скачивает в эту структуру из устройства значения, что-то меняет, записывает обратно. Потом появилась надобность в другом приложении, пользующемся этой же структурой, потом ещё одно приложение... В результате у меня родился класс, который обслуживает эту структуру по принципу "мне нужно такое-то значение" - "на тебе это значение", и т.п. - то есть куча сигналов и слотов. С одной стороны у меня есть ощущение, что делаю правильно (классы не зависят друг от друга, можно собирать их в какие угодно конструкции), с другой стороны класс практически состоит из нескольких десятков сигналов и нескольких десятков слотов. Вместо такого:
у меня получились :
Ну, и, конечно же, есть в главном окне штабеля коннектов:
Классов типа Interface несколько (они абсолютно разные. Среди них есть и QWidget и QObject), каждому нужны различные значения из структуры, спрятанной в Manager, каждый хочет какие-то поля менять и получать уведомления об изменениях. Мне вот интересно, это нормально нормальный подход к решению - всё решать через сигнал-слот, или нужно всё-таки делать гибрид, когда есть и обращение к менеджеру через указатель и с помощью сигналов, слотов и connect()? И, вообще, когда какое решение лучше применять? По ходу, получается паттерн Наблюдатель, но только оба класса являются взаимными Наблюдателями. |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 29.3.2024, 14:12 |