2
Invoke 메서드가 별도의 스레드에서 실행되고 메인 스레드에서 호출되는 Qt 프로젝트를 수행하고 있습니다. QByteArray
을 const로 전달하면 빌드가 실행됩니다. 그러나 const를 제거하면 컴파일되지만 실행하려고 할 때 종료됩니다 ( ). Q_ASSERT(b)
어설 션을 발생시킵니다.QMetaObject :: invokeMethod는 non const 인수를 취하지 않습니다.
왜 종료 되나요?
QByteArray
에 데이터를 추가해야합니다.
const bool b = QMetaObject::invokeMethod(m_thread, "calculateSpectrum",
Qt::AutoConnection,
Q_ARG(QByteArray, buffer),
Q_ARG(int, format.frequency()),
Q_ARG(int, bytesPerSample),
Q_ARG(qint64, dataLength));
Q_ASSERT(b);
Q_UNUSED(b) // suppress warnings in release builds
'calculateSpectrum'의 서명은 무엇입니까? 호출자에서 '버퍼'가 수정 될 것으로 예상됩니까? – Mat
예 버퍼 및 시그너처가 스펙트럼 분석기 (qbytearray 버퍼, int 주파수, int 바이트, qint64 데이터 길이)를 변경하려고합니다. – ken
올바른 방법의 서명을 질문에 편집하십시오 (태그 아래의 "편집"링크 사용). – Mat