我有以下课程:FoxComFoxComCircle。在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 *名称时(如上面的代码所示),它可以工作。

难道我做错了什么?

附言FoxComFoxComCircle在不同的线程中。

提前致谢。

最佳答案

根据Qt文档中的QMetaObject::invokeMethod描述:


  在对象obj上调用成员(信号或插槽名称)。


因此,您必须提供插槽的名称,而不是完整的签名。这是一致的,因为您提供插槽的参数作为invokeMethod函数的以下参数。

关于c++ - InvokeMethod不适用于SLOT(...),但适用于conts char *,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22957348/

10-11 00:56