Название: Некоторые особенности connect Отправлено: dr_Begemot от Апрель 15, 2009, 14:42 При работе с connect-ом столкнулся с таким багом:
есть некоторый набор enum-ов описанный так: Код: namespace MyNamespace{ Дальше есть сигнал my_signal(Type type); и есть слот my_slot(Type type); когда сигнал со слотом соединяю таким образом: bool ok = connect(obj1, SIGNAL(my_signal(Type)), obj2, SLOT(my_slot(Type)) ); то все работает и ok = true, а если так: bool ok = connect(obj1, SIGNAL(my_signal(MyNamespace::Type)), obj2, SLOT(my_slot(MyNamespace::Type)) ); то ok=false и соответственно ничего не работает... в Output пишет что нет такого сигнала... В чем загвоздка? Название: Re: Некоторые особенности connect Отправлено: Авварон от Апрель 15, 2009, 14:56 в коннекте не работает указание области видимости. Фактически, SIGNAL и SLOT переводят свои аргументы в строку - "my_signal(Type)". То же делается при объявлении сигналов и слотов. Более того, оно отказывается обрабатывать сигналы/слоты вида my_signal(Type t). Идет точно сравнение строк (по хэш-таблице) и указание области видимости поганит строку. Больше всего это раздражает при наследовании (когда объявляешь слот с тем же именем и до исходного добраться нет возможности)
Название: Re: Некоторые особенности connect Отправлено: pastor от Апрель 15, 2009, 15:04 Я думаю, здесь может помочь qRegisterMetaType
qRegisterMetaType<MyNamespace::Type>(); connect(obj1, SIGNAL(my_signal(MyNamespace::Type)), obj2, SLOT(my_slot(MyNamespace::Type)) ); |