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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Глобальная система событий (обмен сигналами между ветками)  (Прочитано 9640 раз)
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #15 : Июль 18, 2014, 13:13 »

Насчет специального класса идею понял. А как это все обходить? По-любому понадобится какая-то глобальная штука, которая будет из конструкторов передавать в какой-то глобальный объект список всех объектов, а потом по сингналу тыкать.
Опять же в простом случае, можно сделать статический список указателей на объекты, куда они сами будут вписываться/выписываться, и статическую функцию broadcast, которая будет пробегаться по этому списку и дергать нужный метод.
Записан
Ginger_Ministrel
Гость
« Ответ #16 : Июль 18, 2014, 13:43 »

О, вот это хорошее решение на данный момент.
Хоть и не люблю я статические функции.
Записан
_OLEGator_
Гость
« Ответ #17 : Июль 18, 2014, 14:24 »

Смотрю мой класс остался без внимания))
Записан
Bepec
Гость
« Ответ #18 : Июль 18, 2014, 14:28 »

Ну, так оно и бывает. Ухватываются за то, что ближе к их мыслям Улыбающийся
Записан
Ginger_Ministrel
Гость
« Ответ #19 : Июль 18, 2014, 14:44 »

Смотрю мой класс остался без внимания))
Нет, почему. Я его просмотрел, но с ходу пока не понял, как он вообще работает. Поэтому я его отложил на покурить позднее, а пока занялся общей структурой проекта, которая почт не меняется в зависимости от сигнальной системы.
Записан
_OLEGator_
Гость
« Ответ #20 : Июль 18, 2014, 15:41 »

Подписывание на событие:
Код
C++ (Qt)
CXEventMachine::subscribe(this, PRISM_EVENT(SelectData), PRISM_METHOD(setSelectData()));

Причем SelectData это по сути текстовая метка, это не сигнал и не слот. setSelectData - это слот.

Испускание события:
Код
C++ (Qt)
CXEventMachine::postEvent(PRISM_EVENT(SelectData));

Это события без параметров.

Есть возможность использовать до 3х параметров в событии:
Код
C++ (Qt)
CXEventMachine::postEvent<QString>(PRISM_EVENT(SelectData), "test");
Записан
Ginger_Ministrel
Гость
« Ответ #21 : Июль 18, 2014, 17:09 »

О! Реально похоже на то, что мне нужно. Попробую потыкать, посмотрим, что выйдет.
Записан
Ginger_Ministrel
Гость
« Ответ #22 : Июль 22, 2014, 14:26 »

Я решил все-таки ради обучения написать свой вариант. Возник вопрос: как лучше реализовывать точку доступа?
Вижу два разных варианта. Первый - набор глобальных функций. Второй - аналогично QApplication: создаваемый в мэйне синглтон + глобальный указатель на него.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #23 : Июль 22, 2014, 15:16 »

Первый - набор глобальных функций.
Наверное лучше класс с статическими членами.

Второй - аналогично QApplication: создаваемый в мэйне синглтон + глобальный указатель на него.
Если вы уверены, что такая система нужна одна на всю систему (а я не вижу смысла в нескольких), то хватит статических методов, но можно и синглетон завести.
Записан
Ginger_Ministrel
Гость
« Ответ #24 : Июль 22, 2014, 15:52 »

Она нужна будет одна. По крайней мере, на данный момент я не вижу, зачем может понадобиться две разные системы связи удаленных объектов.
Синглтон больше подходит, потому что с одним и тем же массивом абонентов будет иметь дело несколько разных функций.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #25 : Июль 22, 2014, 16:03 »

Синглтон больше подходит, потому что с одним и тем же массивом абонентов будет иметь дело несколько разных функций.
С массивом будет работать одна функция broadcast и две закрытых функции listen/unlisten (помещающая/удаляющая слушателя из массива). Их можно просто сделать статическими методами класса и все смогут к ним обращаться. Две последние я бы сделал закрытыми и подружил этот класс с базовым Object, что бы он мог регистрироваться в системе оповещения.
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #26 : Июль 23, 2014, 10:10 »

Может здесь подойдет шаблон Медиатор?..
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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