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

Ale*_*ecs 1 c++ qt signals-slots qt5

当我写像

 connect(m_someClasspointer, &SomeClassName::SignalA, &CurrentClass::slotMethod);
Run Code Online (Sandbox Code Playgroud)

我收到错误

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);
Run Code Online (Sandbox Code Playgroud)

当与

 connect(m_someClasspointer, &SomeClassName::Signal, this, &CurrentClass::slotMethod);
Run Code Online (Sandbox Code Playgroud)

一切都好。但是QObject中存在重载

inline QMetaObject::Connection QObject::connect(const QObject *asender, const char *asignal,
                                        const char *amember, Qt::ConnectionType atype) const
Run Code Online (Sandbox Code Playgroud)

所以我完全不明白为什么第一个变体不起作用..

01d*_*d55 5

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

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