没有这个,新的Qt会发出带过​​载的语法错误

时间:2014-06-16 20:34:25

标签: c++ qt qt5 signals-slots

当我写作

 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

所以我绝对不明白为什么第一个变体没有工作......

1 个答案:

答案 0 :(得分:3)

您正在尝试传递直接函数指针,而您引用的重载需要const char *。如果你看,你会发现模板支持传递直接函数指针,并且没有该模板的非静态形式。

对于使用const char *的重载,请使用宏SIGNAL和SLOT,例如: SIGNAL(SignalA())SLOT(slotMethod())