2014-04-09 1 views
0

다음 클래스가 있습니다 : FoxComFoxComCircle입니다.InvokeMethod가 SLOT (...)과 작동하지 않지만 conts char *와 작동합니다.

... 
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 
} 

그리고 다음 행동이 : FoxCom에서 나는 다음 코드를 가지고 내가 "bytesToWrite",을 언급하고 SLOT(bytesToWrite(QByteArray,qint32)),를 사용할 때 출력 콘솔 경우에 다음 메시지가 FoxCom::bytesWrite가 호출됩니다 : qint32)

QMetaObject::invokeMethod: No such method FoxComCircle::1bytesToWrite(QByteArray 

, qint32) (QByteArray

하지만 위의 코드에서와 같이 const char * 이름을 직접 사용하면 작동합니다.

내가 잘못 했나요?

P. FoxComFoxComCircle은 다른 스레드에 있습니다.

미리 감사드립니다. Qt는 문서 내의 QMetaObject::invokeMethod 설명에 따르면

답변

1

:

가 부재 (a 신호 또는 슬롯 이름) 오브젝트 OBJ 온 호출 ... 따라서

하면 제공 할 슬롯의 이름은이며 완전한 서명은 아닙니다. 슬롯의 인수를 invokeMethod 함수의 다음 인수로 제공하기 때문에 일관성이 있습니다.

+0

감사합니다. 대개 Qt가 표준화 된 호출을 사용하지만 지금은 사용하지 않는 것이 이상하지 않습니까? –

+0

@AlexTiger, 당신은 무엇을 의미합니까? SLOT과 SIGNAL은 QObject :: connect() 함수에서 사용되어야하며, 문서에는 명시 적으로 언급되어 있지만, invokeMethod의 경우는 그렇지 않습니다. – vahancho

관련 문제