2013-07-18 4 views
1

내 응용 프로그램은 네트워크를 통해 JPEG의 실시간 스트림 (초당 16 프레임)을 수신합니다. 라이브 스트림은 QML을 사용하여 표시해야합니다. 수신 부분은 C++로 작성되었으며, 모든 UI는 QML을 사용하여 작성됩니다.QImage into QML

어떻게 이미지 데이터를 QML 창에 가져 옵니까? QImage를 표시하는 방법을 살펴 보았지만 아직 해결책을 찾지 못했습니다.

QDeclarativeImageProvider를 구현하고 다른 이름을 사용하여 이미지의 소스를 새로 고침하는 것이 유일한 해결책 인 것 같습니다 (http://qt-project.org/doc/qt-4.8/qdeclarativeimageprovider.html 참조).

답변

7

예, 불행히도 Image 요소에 update() 메서드가 누락되었습니다 (강제로 재설정하는 경우). 동일한 소스 URL을 설정하더라도 업데이트가 트리거되지 않습니다..

당신은 해결 방법으로이 같은 것을 사용할 수 있습니다

Image { 
    source: "image://yourImageProvider/something" 
    cache: false 
    function reload() { 
     var oldSource = source; 
     source = ""; 
     source = oldSource; 
    } 
} 

(또는 다른 경로를 같은 공급자 이름으로, 두 개의 URL을 전환,하지만 ...)

또한해야 QML 레이어에 수신되는 JPEG를 푸시합니다. 새 이미지를 받으면 은 QML 엔진에 노출 된 일부 객체에서 C++ 측에서 신호를 내보내고 해당 신호를 해당 reload() 함수에 연결해야합니다. Connections 요소가 도움이 될 것입니다.

Connections { 
    target: myC++ObjectExposedToTheQMLEngine 
    onNewFrameReceived: image.reload(); 
}