环绕 QObject::connect 错误
Wrapping QObject::connect error
我正在写一个订阅管理器,想法是创建一个信号和插槽连接,多个订阅可以挂在插槽上,当收到更新时,插槽的所有订阅都将收到新的通知数据.
问题是,在我管理订阅的 class 中,我有一个名为 'setupSubscription' 的方法,这是原型:
void setupSubscription(enum eSlotID ID
,const QObject* pobjSender
,const QMetaMethod& pobjSignal
,const QMetaMethod& pobjSlot);
枚举类型的eSlotID包含每个插槽的唯一ID,其思想是订阅者只需指定ID即可设置订阅。
它处于开发的早期阶段,设置订阅的代码:
void clsSlotSub::setupSubscription(enum eSlotID ID
,const QObject* pobjSender
,const QMetaMethod& pobjSignal
,const QMetaMethod& pobjSlot) {
QObject::connect(pobjSender, pobjSignal, this, pobjSlot);
}
当然还有很多事情要做,但这会导致编译错误:
error: no matching function for call to 'clsSlotSub::setupSubscription(clsSlotSub::eSlotID, Fcs::Mount*, void (Fcs::Mount::*)(Fcs::qfloat32), void (clsSlotSub::*)(float))'
,&clsSlotSub::update2Elevation);
^
我相信原型是正确的,在将其包装到我的设置方法之前,在调试器中单步执行连接。
我不确定错误是什么意思,因为 class 实现和原型匹配并且存在。
用法示例:
msSlotSubMngr.setupSubscription(clsSlotSub::ELEVATION_ANGLE
,Fcs::Mount::GetRef()
,&Fcs::Mount::signalElevation
,&clsSlotSub::update2Elevation);
msSlotSubMngr 是插槽订阅的实例 class。
这是包装前的原始代码,编译没有任何错误:
QObject::connect(Fcs::Mount::GetRef()
,&Fcs::Mount::signalElevation
,mpobjElevStrip
,&clsElevStrip::elevationChanged);
当我单独设置工作代码时,这是连接方法的原型:
static QMetaObject::Connection connect(const QObject *sender
,const QMetaMethod &signal
,const QObject *receiver
,const QMetaMethod &method
,Qt::ConnectionType type = Qt::AutoConnection);
eSlotID声明:
enum eSlotID {
...
/*1003*/ ,ELEVATION_ANGLE
...
};
插槽原型:
void update2Elevation(float fltValue);
插槽实现:
void clsSlotSub::update2Elevation(float fltValue) {
qDebug() << "clsSlotSub::New elevation: " << fltValue;
}
您需要出示您的调用代码。从错误消息来看,您似乎只是拼错了 setupSubscription。
找到了与原型完全无关的问题,但是编译器没有报告错误/原因。原来需要的header没有包含
我正在写一个订阅管理器,想法是创建一个信号和插槽连接,多个订阅可以挂在插槽上,当收到更新时,插槽的所有订阅都将收到新的通知数据.
问题是,在我管理订阅的 class 中,我有一个名为 'setupSubscription' 的方法,这是原型:
void setupSubscription(enum eSlotID ID
,const QObject* pobjSender
,const QMetaMethod& pobjSignal
,const QMetaMethod& pobjSlot);
枚举类型的eSlotID包含每个插槽的唯一ID,其思想是订阅者只需指定ID即可设置订阅。
它处于开发的早期阶段,设置订阅的代码:
void clsSlotSub::setupSubscription(enum eSlotID ID
,const QObject* pobjSender
,const QMetaMethod& pobjSignal
,const QMetaMethod& pobjSlot) {
QObject::connect(pobjSender, pobjSignal, this, pobjSlot);
}
当然还有很多事情要做,但这会导致编译错误:
error: no matching function for call to 'clsSlotSub::setupSubscription(clsSlotSub::eSlotID, Fcs::Mount*, void (Fcs::Mount::*)(Fcs::qfloat32), void (clsSlotSub::*)(float))'
,&clsSlotSub::update2Elevation);
^
我相信原型是正确的,在将其包装到我的设置方法之前,在调试器中单步执行连接。
我不确定错误是什么意思,因为 class 实现和原型匹配并且存在。
用法示例:
msSlotSubMngr.setupSubscription(clsSlotSub::ELEVATION_ANGLE
,Fcs::Mount::GetRef()
,&Fcs::Mount::signalElevation
,&clsSlotSub::update2Elevation);
msSlotSubMngr 是插槽订阅的实例 class。
这是包装前的原始代码,编译没有任何错误:
QObject::connect(Fcs::Mount::GetRef()
,&Fcs::Mount::signalElevation
,mpobjElevStrip
,&clsElevStrip::elevationChanged);
当我单独设置工作代码时,这是连接方法的原型:
static QMetaObject::Connection connect(const QObject *sender
,const QMetaMethod &signal
,const QObject *receiver
,const QMetaMethod &method
,Qt::ConnectionType type = Qt::AutoConnection);
eSlotID声明:
enum eSlotID {
...
/*1003*/ ,ELEVATION_ANGLE
...
};
插槽原型:
void update2Elevation(float fltValue);
插槽实现:
void clsSlotSub::update2Elevation(float fltValue) {
qDebug() << "clsSlotSub::New elevation: " << fltValue;
}
您需要出示您的调用代码。从错误消息来看,您似乎只是拼错了 setupSubscription。
找到了与原型完全无关的问题,但是编译器没有报告错误/原因。原来需要的header没有包含