【发布时间】:2015-08-27 09:39:04
【问题描述】:
使用 Qt 5.4,我在处理子类发出的信号时遇到问题。情况是这样的:
有一个
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。
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 在运行时。
看起来信号没有被继承!?任何人有任何想法我可能做错了什么?谢谢!
【问题讨论】:
-
尝试将信号声明为
void StateChagned(Adapter::state_t);(使用完全限定名称)。 -
你刚才是不是在 void StateChagned(state_t newState); 中写了错误;
-
@vahancho:省略限定名解决了它!谢谢!
标签: qt inheritance signals parent-child qobject