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)
所以我完全不明白为什么第一个变体不起作用..
您试图传递直接函数指针,而您引用的重载则采用const char *. 如果您仔细观察,您会发现模板支持传递直接函数指针,并且该模板不存在非静态形式。
对于使用 的重载const char *,请使用宏 SIGNAL 和 SLOT,例如SIGNAL(SignalA())和SLOT(slotMethod())。
| 归档时间: |
|
| 查看次数: |
260 次 |
| 最近记录: |