Название: Сигналы, слоты и наследование Отправлено: blood_shadow от Сентябрь 20, 2011, 20:51 Суть в том что обрабатываю сообщения 2 классами:
Код
Хотелось бы сделать так: Код
Но подключение не проходит и выбрасывает сообщение Код: QObject::connect: Incompatible sender/receiver arguments Я понимаю что дело как раз не в совпадении типов, но хотелось бы поддержки динамического полиформизма в данном случае, возможно ли что-то сделать? поможет ли мне допустим boost::signal? Название: Re: Сигналы, слоты и наследование Отправлено: alexman от Сентябрь 20, 2011, 20:58 Может стоит передавать в кач-ве арг-та Message*?
Название: Re: Сигналы, слоты и наследование Отправлено: Akon от Сентябрь 20, 2011, 21:00 Проблема в MOC - он тупо считает типы Base и DerivedFromBase разными, хотя с точки зрения C++ DerivedFromBase является Base (upcast), поэтому с бустом проблем не будет.
Название: Re: Сигналы, слоты и наследование Отправлено: blood_shadow от Сентябрь 20, 2011, 21:03 Проблема в MOC - он тупо считает типы Base и DerivedFromBase разными, хотя с точки зрения C++ DerivedFromBase является Base (upcast), поэтому с бустом проблем не будет. ок, ща буду разбираться с бустом, спасибо :)Название: Re: Сигналы, слоты и наследование Отправлено: blood_shadow от Сентябрь 20, 2011, 21:04 Может стоит передавать в кач-ве арг-та Message*? та можно... только я организовал красивую иерархию ошибок и сообщений ::)Название: Re: Сигналы, слоты и наследование Отправлено: Vass от Сентябрь 20, 2011, 21:18 та можно... только я организовал красивую иерархию ошибок и сообщений ::) Так тогда и будет красиво, ваш обработчик и знать не будет какой класс к нему пришел а будет вызывать просто виртуальную ф-цию showMessage() по-моему как раз пример красоты и изящества полиморфизма. Название: Re: Сигналы, слоты и наследование Отправлено: Akon от Сентябрь 20, 2011, 21:44 Нихрена - я про пример красоты, изящества и полиморфизма! Тип указывается в сигнале и какому-то клиенту в его обработчике нужен именно этот тип.
Название: Re: Сигналы, слоты и наследование Отправлено: Igors от Сентябрь 21, 2011, 12:31 Почему не просто "невиртувоьный слот вызывает виртуал"? (и при connect привести к базовому типу)
|