簡體   English   中英

InvokeMethod不適用於SLOT(...),但適用於conts char *

[英]InvokeMethod doesn't work with SLOT(…), but works with conts char *

我有下一個課程: 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 *名稱時(如上面的代碼所示),它可以工作。

難道我做錯了什么?

PS FoxComFoxComCircle在不同的線程中。

提前致謝。

根據Qt文檔中的QMetaObject::invokeMethod描述:

在對象obj上調用成員(信號或插槽名稱 )。

因此,您必須提供插槽的名稱 ,而不是完整的簽名。 這是一致的,因為您提供了插槽的參數作為invokeMethod函數的以下參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM