Re: Обработка сообщений и всё такое
От: Zhendos  
Дата: 18.08.18 23:12
Оценка: +1
Здравствуйте, Marty, Вы писали:


M>1) Qt. Там из очереди сообщений они извлекаются, где-то в каком-то ассоциативном массиве ищется объект, который подписался на событие, и его слот, и этот слот вызывается, всякие кастинги доп. данных сообщений производятся на основе метаинформации, полученной при помощи метакомпилера. Как-то так вроде, да?

M>Пользоваться в принципе удобно, но напрягает необходимость препроцессора, и неэффективность данного метода (и не надо мне рассказывать, что на современных системах это копейки )

ИМХО конечно, но все это совершенно неверно.
Механизм сигналов и слотов и работа Qt с сообщениями платформы это разные вещи.
Если коротко, то Qt получает события от платформы, некоторые обрабатывает только сама,
большинство превращает в наследников класса QEvent. Любой класс наследующий
от QObject или его детей, может переопределить виртуальный метод "bool QObject::event(QEvent *)"
и проверить QEvent::type и сделать "cast" в правильного наследника QEvent.
После этого он может сделать в принципе что угодно, может сделать "emit signal",
может послать другой QEvent другому объекту, ну или вообще вызывать метод другого объекта
напрямую. Можно также встроиться в систему с помощью "Qt event filter" и перехватывать
события предназначенные другому объекту.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.