Я хочу выполнить слот в другом классе. Является ли это возможным

 UI_CDSK Obj;
 connect(Obj.penDrive,SIGNAL(clicked()),this,SLOT( Obj.caller()));

Этот код находится в другом классе, и из этого класса я хочу выполнить слот другого класса (UI_CDSK)

Здесь penDrive и вызывающий абонент принадлежит классу функции UI_CDSK, а упомянутый код находится в другом классе.

0
Sijith 21 Апр 2010 в 13:35

2 ответа

Лучший ответ

Это немного сложно, не зная внутреннего устройства UI_CDSK, но правильный синтаксис должен быть таким:

connect( Obj.penDrive, SIGNAL(clicked()), Obj, SLOT(caller()) );

Пока caller() является общедоступным слотом в UI_CDSK.

3
kurige 21 Апр 2010 в 13:41
Я дал подобное, но снова показываю ошибку. Мой слот общедоступен, только ОШИБКА не может преобразовать параметр 3 из UI_CDSK в const QObject *.
 – 
Sijith
21 Апр 2010 в 13:47

Метод подключения принимает указатель в качестве объекта-получателя, поэтому, если Obj не является указателем на объект UI_CDSK:

connect(Obj.pendrive, SIGNAL(clicked()), &Obj, SLOT(caller()));

Также это, вероятно, уже сделано (иначе ваш компилятор пожаловался бы), но чтобы использовать механизм сигнальных слотов Qt, ваш класс UI_CDSK должен унаследовать от QObject.

Похоже, слот не обязательно должен быть общедоступным.

0
Leiaz 21 Апр 2010 в 14:19
Я унаследовал QObject в UI_CDSK. Когда я вызвал вызывающего абонента, используя другой слот в том же классе, он работает нормально.
 – 
Sijith
21 Апр 2010 в 14:28
Спасибо за внимание - я понятия не имел, что слоты не обязательно должны быть общедоступными при использовании в контексте Qt Signal / Slot.
 – 
kurige
22 Апр 2010 в 00:04