나는 우아한 방식으로 해결할 수없는 문제를 발견했습니다. 상황 : 응용 프로그램 외부에서 호출되는 콜백 함수가 있습니다. 콜백 함수는 일부 gui 객체를 업데이트해야합니다. 다른 스레드 내에서 (예를 들어) repaint()
을 호출 할 수 없기 때문에 몇 가지 방법으로 기본 이벤트 루프에 함수 호출을 추가해야합니다. 시각.Qt add 함수 호출을 다른 스레드에서 이벤트 루프로 호출
한 가지 가능한 방법이를 사용하는 것입니다 :
QMetaObject::invokeMethod(object, "functionName", Qt::QueuedConnection, Q_ARG(float, value));
그러나 이것은 단지 나에게 no such Method "Object::functionName"
그 응답을 제공합니다. (이것은 거짓말입니다!)
또한 이벤트 유형에서 Qt::QueuedConnection
으로 설정하여 이벤트 루프에서 호출 할 신호를 연결하는 방법에 대해서도 읽었습니다. 그러나 QOjbect.:connect()
을 사용하면 신호가 필요한 객체를 알지 못하기 때문에 작동하지 않습니다. 멋진 뭔가 QObject::emit(object, SIGNAL(function(flaot)), arg);
보통'QMetaObject :: invokeMethod'있다 잘 작동합니다. 또한 거짓말하지 않습니다. 호출에 오자가 있으면 런타임에 평가되므로 함수가 존재하는지 여부를 컴파일러가 확인하지 않고 실패하고 해당 메시지를 출력합니다. 전화를 확인하면 작동합니다. – Zaiborg