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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Некоторые особенности connect  (Прочитано 3416 раз)
dr_Begemot
Гость
« : Апрель 15, 2009, 14:42 »

При работе с connect-ом столкнулся с таким багом:
есть некоторый набор enum-ов описанный так:
Код:
namespace MyNamespace{
  enum Type{
    Type1,
    Type2,
    Type3
  };
}//end namespace

Дальше есть сигнал 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 пишет что нет такого сигнала...

В чем загвоздка?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Апрель 15, 2009, 14:56 »

в коннекте не работает указание области видимости. Фактически, SIGNAL и SLOT переводят свои аргументы в строку - "my_signal(Type)". То же делается при объявлении сигналов и слотов. Более того, оно отказывается обрабатывать сигналы/слоты вида my_signal(Type t). Идет точно сравнение строк (по хэш-таблице) и указание области видимости поганит строку. Больше всего это раздражает при наследовании (когда объявляешь слот с тем же именем и до исходного добраться нет возможности)
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #2 : Апрель 15, 2009, 15:04 »

Я думаю, здесь может помочь qRegisterMetaType

qRegisterMetaType<MyNamespace::Type>();
connect(obj1, SIGNAL(my_signal(MyNamespace::Type)), obj2, SLOT(my_slot(MyNamespace::Type)) );
« Последнее редактирование: Апрель 15, 2009, 15:12 от pastor » Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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