2017-04-18 4 views
2

항목의 스냅 샷을 (ShaderEffectSource을 사용하여 live: false) 만들고 있지만 가끔 (빈도가 1 인 경우) 빈 스냅 샷이 나타납니다. 다음과 같은 신호를 기반으로 스냅 샷을 만듭니다.항목의 다시 칠이 완료되면 알림을받을 수 있습니까?

Image { 
    onStatusChanged: { 
     if (status == Image.Ready) { 
      snapshotter.makeSnapshot(); 
     } 
    } 
} 

이것은 전체적인 상황과 같습니다. 큰 응용 프로그램이고 아직 테스트 케이스를 격리하지 않았으므로 지금은 테스트 케이스를 게시하지 않겠습니다. 그것은 미래의 질문을 위해 중요 할 수도 있습니다.

그래서 "내 코드에서 버그가있는 곳"을 묻지 않습니다. 대신 버그를 해결하는 데 도움이 될 것이라고 생각되는 간단한 질문이 있습니다.

항목이 다시 칠하기를 마쳤을 때 알림을받을 수 있습니까?

이론적 근거 : 나는 status == Image.Ready을 얻을 때 어쩌면, 이미지는 단지 을로드하고 아직 오프 스크린 표면에로드 된 데이터를 그린 않았습니다. 원하는 신호가 있다면, 에 연결하면 Image.statusChanged에 연결될 수 있습니다.

참고 : 내가 Image처럼 작동하지만 추가로 repainted 신호를 노출하는 내 자신의 NotifyingImage 구성 요소를 구현할 수 있습니다. 하지만 기본 방법이 있는지 알고 싶습니다.

관련 질문 : "Get notified when QQuickItem will need updating". 그러나 질문자가 데이터 데이터가 업데이트되면 언제인지 묻는 것에 만족하며, repainted 신호에 대해 묻습니다. 나중에이 요청하는 것입니다.

답변

2

내가 아는 한 Window은 항상 전체적으로 렌더링됩니다. 따라서 WindowafterRendering 신호를 사용할 수 있습니다.

단점 : 창에 내용이 변경되면 트리거됩니다. 그러나 (status == Image.Ready)과 결합하면 효과가있을 수 있습니다.

편집 :에서
blog post, announcing the release of Qt5.8Qt는 회사 CTO 썼다 :

또한

은 씬 그래프가 지금 화면에 무대 미술의 경우 단지 작은 영역을 부분 업데이트 지원 변경되었습니다. Qt Quick 2D 렌더러의 성능이 약간 향상되었습니다.

나는 신호 afterRendering의 구현 세부 사항을 모르는, 그래서 나는이이 같은 부분 업데이트를 후 트리거 여부를 알 수 없으며, 만약 그렇다면, 어떻게 그 부분 업데이트가 우려 여부, 말 부분, 당신은에 관심이 있습니다.

+0

그건 작동하고 꽤 의미가 있습니다. 나는 그것에 관해 약간의 예약을 가지고있다. 그러나 그것이 매우 잘 움직이게하기 때문에, 그것이 다시 부서 질 때까지 나는 그것을 그것에 맡길 것이다. 내 "qt"질문에 대한 모든 도움을 주셔서 감사합니다 :) –

+0

당신을 환영합니다! 귀하의 질문은 항상 재미 있고 흥미로운 도전입니다 :-) – derM

관련 문제