我有下一个课程:FoxCom
和FoxComCircle
。在FoxCom
我有下一个代码:
...
public slots:
void bytesWrite(QByteArray bytes, qint32 requestedTimeout = -1);
...
FoxComCircle * circle;
...
void FoxCom::bytesWrite(QByteArray bytes, qint32 requestedTimeout)
{
QMetaObject::invokeMethod(circle,
//SLOT(bytesToWrite(QByteArray,qint32)),
"bytesToWrite",
Qt::QueuedConnection,
Q_ARG(QByteArray, bytes),
Q_ARG(qint32, requestedTimeout));
}
在FoxComCircle
:
...
public slots:
void bytesToWrite(QByteArray bytes, qint32 requestedTimeout);
...
void FoxComCircle::bytesToWrite(QByteArray bytes, qint32 requestedTimeout)
{
//some stinky code here
}
还有下一个行为:当我评论"bytesToWrite",
并使用SLOT(bytesToWrite(QByteArray,qint32)),
时,在调用FoxCom::bytesWrite
时,我会在输出控制台中显示下一条消息:
QMetaObject::invokeMethod: No such method FoxComCircle::1bytesToWrite(QByteArray
,qint32)(QByteArray中,qint32)
但是当我直接使用const char * name时(如上面的代码所示),它可以工作。
我做错了吗?
P.S。 FoxCom
和FoxComCircle
位于不同的主题中。
提前致谢。
答案 0 :(得分:1)
根据Qt文档中的QMetaObject::invokeMethod
描述:
在对象obj上调用成员(信号或插槽名称)...
因此,您必须提供广告位的名称,而不是完整的签名。这是一致的,因为您提供slot的参数作为invokeMethod
函数的以下参数。