我有以下课程: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 *名称时(如上面的代码所示),它可以工作。
难道我做错了什么?
附言
FoxCom
和FoxComCircle
在不同的线程中。提前致谢。
最佳答案
根据Qt文档中的QMetaObject::invokeMethod
描述:
在对象obj上调用成员(信号或插槽名称)。
因此,您必须提供插槽的名称,而不是完整的签名。这是一致的,因为您提供插槽的参数作为invokeMethod
函数的以下参数。
关于c++ - InvokeMethod不适用于SLOT(...),但适用于conts char *,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22957348/