2015-08-27 5 views
1

Использование Qt 5.4 У меня возникают проблемы с сигналом, испускаемым из дочернего класса. Это ситуация:Qt, «нет такого сигнала» ошибка времени выполнения из дочернего класса, с макросом Q_OBJECT

Существует

class Player : public QDialog{ 
Q_OBJECT 
/*...*/ 
public slots: 
    void ReactToAdapter(Adapter::state_t newState); 
private: 
    Adapter* adapter; 
} 

class Adapter : public QObject{ 
Q_OBJECT 
public: 
    enum state_t {/*...*/} 
signals: 
    void StateChagned(state_t newState); 
} 

является чисто виртуальным. Одна из его Реализации дается как

class AdapterCAN : public Adapter{ 
O_OBJECT 
/*...*/ 
} 

AdapterCAN излучает в StateChagned в пределах одного из его methodes.

state_t можно увидеть везде включая. Все три класса имеют макрос Q_OBJECT.

Когда я пытаюсь сделать

Player::ConnectToCANBus(/*...*/){ 

    adapter = new AdapterCAN(/*...*/); 

    connect(adapter, SIGNAL(StateChanged(Adapter::state_t), 
    this, SLOT(ReactToAdapter(Adapter::state_t)); 

} 

Это создает сообщение об ошибке QObject::connect: No such signal AdapterCAN::StateChanged(Adapter::state_t) in ..\player.cpp:90 во время выполнения.

Похоже, что сигнал не унаследован !? У кого-нибудь есть идеи, что я могу делать неправильно? Благодаря!

+1

Попробуйте объявить сигнал как 'void StateChagned (Adapter :: state_t);' вместо этого (с полным именем). – vahancho

+0

Вы только что пишете ошибку в void StateChagned (state_t newState); –

+0

@vahancho: Оставив квалифицированное имя, решила его! Спасибо! – vertigo89

ответ

0

Изменение определения сигнала

class Adapter : public QObject{ 
/*...*/ 
    void StateChagned(state_t); 
} 

решил. Квалифицированное имя должно быть исключено.

Спасибо @vahancho за указание на это!

 Смежные вопросы

  • Нет связанных вопросов^_^