InvokeMethod不适用于SLOT(...),但适用于conts char *

时间:2014-04-09 08:51:32

标签: c++ qt signals-slots

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

我做错了吗?

P.S。 FoxComFoxComCircle位于不同的主题中。

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

  

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

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