新的Qt信号语法错误与重载没有这个

New Qt signals syntax error with overload without this

本文关键字:重载 Qt 信号 语法 错误 新的      更新时间:2023-10-16

当我写

 connect(m_someClasspointer, &SomeClassName::SignalA, &CurrentClass::slotMethod);

I got error

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

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

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

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