当我写作
时 connect(m_someClasspointer, &SomeClassName::SignalA, &CurrentClass::slotMethod);
我收到了错误
error: no matching function for call to 'QtPrivate::FunctionPointer<void (CurrentClass::*)()>::call(void (CurrentClass::*&)(), QObject*&, void**&)'
FuncType::template call<Args, R>(static_cast<QStaticSlotObject*>(this_)->function, r, a);
与
connect(m_someClasspointer, &SomeClassName::Signal, this, &CurrentClass::slotMethod);
一切都好。但是QObject中存在重载
inline QMetaObject::Connection QObject::connect(const QObject *asender, const char *asignal,
const char *amember, Qt::ConnectionType atype) const
所以我绝对不明白为什么第一个变体没有工作......
答案 0 :(得分:3)
您正在尝试传递直接函数指针,而您引用的重载需要const char *
。如果你看,你会发现模板支持传递直接函数指针,并且没有该模板的非静态形式。
对于使用const char *
的重载,请使用宏SIGNAL和SLOT,例如: SIGNAL(SignalA())
和SLOT(slotMethod())
。