Название: Signals and slots problem Отправлено: Алёна_4_12_1989 от Май 31, 2012, 10:14 Здравствуйте. У меня такая проблема. В базовом классе описан сигнал, который посылается (emit) в классе наследнике. Макрос Q_OBJECT размещен в базовом классе. Этот же базовый класс наследуется от QObject. Т.е. вот так:
class MBase : public QObject { signals: void mySignal(QString s); } class MChild : MBase { } в приложении: MBase *myObj = new MChild(); connect (myObj, SIGNAL(mySignal(QString)), this, SLOT(mySlot(QString))); В итоге в слот программа не заходит. В чем может быть причина? Название: Re: Signals and slots problem Отправлено: Пантер от Май 31, 2012, 10:17 Больше кода покажи.
Название: Re: Signals and slots problem Отправлено: Алёна_4_12_1989 от Май 31, 2012, 10:20 Чтобы больше кода, мне надо куски проекта копировать. Вы не могли бы мне объяснить как правильно использовать сигналы классов-родителей? Или здесь нет никаких особенностей?
Название: Re: Signals and slots problem Отправлено: Пантер от Май 31, 2012, 10:22 Сигнал-то эммитишь?
Название: Re: Signals and slots problem Отправлено: GreatSnake от Май 31, 2012, 10:34 Если mySlot() принадлежит MChild, то в MChild тоже нужно включать Q_OBJECT.
Название: Re: Signals and slots problem Отправлено: Алёна_4_12_1989 от Май 31, 2012, 10:48 Большое спасибо за помощь. Я кажется поторопилась с вопросом. Оказалось, что я не тому объекту назначила сигнал в коннекте.
Название: Re: Signals and slots problem Отправлено: sudo от Июнь 04, 2012, 10:12 class MBase : public QObject { signals: void mySignal(QString s); } class MChild : MBase { } MBase *myObj = new MChild(); connect (myObj, SIGNAL(mySignal(QString)), this, SLOT(mySlot(QString))); Каждый класс, работающий через метаобъектную систему, обязан содержать макрос Q_OBJECT. В приведённом куске сигналы эмиттиться не будут, пока там не будет макроса Название: Re: Signals and slots problem Отправлено: GreatSnake от Июнь 04, 2012, 10:33 Каждый класс, работающий через метаобъектную систему, обязан содержать макрос Q_OBJECT. Ну почему же, есть исключения) Производный класс использующий слоты базового класса сей макрос иметь не обязан.Название: Re: Signals and slots problem Отправлено: sudo от Июнь 04, 2012, 10:59 Каждый класс, работающий через метаобъектную систему, обязан содержать макрос Q_OBJECT. Ну почему же, есть исключения) Производный класс использующий слоты базового класса сей макрос иметь не обязан.Не будем путать топикстартера ;) А так, да, в документации и написано Цитировать The Q_OBJECT macro must appear in the private section of a class definition that declares its own signals and slots or that uses other services provided by Qt's meta-object system. Имхо, стоит указывать в любом случае при наследовании от QObject. И в качестве хорошего тона, и в качестве явного указания на принадлежность объекта к QObject |