다음 클래스가 있습니다 : FoxCom
및 FoxComCircle
입니다.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. FoxCom
및 FoxComCircle
은 다른 스레드에 있습니다.
미리 감사드립니다. Qt는 문서 내의 QMetaObject::invokeMethod
설명에 따르면
감사합니다. 대개 Qt가 표준화 된 호출을 사용하지만 지금은 사용하지 않는 것이 이상하지 않습니까? –
@AlexTiger, 당신은 무엇을 의미합니까? SLOT과 SIGNAL은 QObject :: connect() 함수에서 사용되어야하며, 문서에는 명시 적으로 언급되어 있지만, invokeMethod의 경우는 그렇지 않습니다. – vahancho