2013-08-30 3 views
0

나는 애니메이션 이벤트에서 세로 그림을 세로로 스크롤하는 내 SonogramWidget에 연결했습니다. '긴 그림'은 미리 계산 된 100 개의 미리 계산 된 QPixmap 객체 1024x128로 세로로 배치되어 있습니다. 그들은 SonogramWidget::paintEvent()QPainter으로 표시했습니다. 드로잉 절차는 모두 QPixmap이 아니라 위젯 높이 및 현재 수직 오프셋을 고려하여 한 번에 볼 수 있습니다. QPixmap은 그림을 표시하는 가장 빠른 방법이므로 CPU는 거의 무료입니다. 모든이 미리 계산되어 메모리에 저장되기 때문에 스크롤하는 동안 큰 계산이 없습니다.Qt 애니메이션 프레임 워크를 사용하여 QPixmap을 천천히 스크롤

이상한 효과가 나타납니다. 맥동 운동 : 초당 2 회 속도가 약간 빨라지고 보통 모션보다 1..2 픽셀 빠르게 움직입니다. Qt Animation Framework를 단일 60fps QTimer로 대체하고 SLOT에서 이미지를 스크롤 할 때와 같은 효과입니다.

동영상 : http://www.youtube.com/watch?v=KRk_LNd7EBg#t=8 (시계는 00:08부터, 내 파이어 폭스는 동영상 재생에 더 많은 부분을 추가하며, Google 크롬은 동영상을 훨씬 더 잘 재생합니다.)

내 Linux 및 Windows 빌드에 대해 동일한 효과가 나타납니다.

해결책 나는 문제를 파악했습니다. "도마뱀 찍기"는 버그가 아니며 기능이었습니다! 정수 계산의 기능이기 때문에 16,16,16,16,16,16, 17, 16,16,16,16,16, 17과 같이 애니메이션에 다른 수를 사용해야하는 경우가 있습니다. 이 트리거 경우에 당신은 당신이 대신 속성 값의 currentValue()을 사용해야합니다 알고,

Q_ASSERT(m_animation->currentValue() == m_animatedPropertyValue); 

: ... paintEvent에서

+0

CPU 부하가 무엇입니까? 스크롤이 느리게 진행되면 '흰색'이 더 많이 표시됩니다. 그리는 픽셀이 흰색인지 검은 색인지 여부는 QPainter에서 차이를 만들어서는 안되기 때문에 계산과 함께해야합니다. 만약 당신의 머신이 한계에 가깝다면 나는 이상한 출력물을 기대할 것이다. 아니면 '천천히'환상 착각입니까? 확실하지 않다. – Greenflow

+0

모든 QPixmap은 사전 계산되어 메모리에 저장됩니다. 스크롤하는 동안 계산이 없습니다. 검정색 픽셀 만 있으면 이미지 전체의 콘트라스트가 떨어지고 설명 된 효과를 알 수 없습니다. – pavelkolodin

+0

나는 전혀 모른다. 그래서 그것은 순수한 추측이다. 그러나 때로는 이것이 도움이됩니다. :-) 그래서, 모든 픽스맵에 모두 넣을 수 있습니까? 임시 만? 어떻게 든 100 개의 수직 QPixmap이 이상하게 상호 작용한다는 것을 배제하기 위해? – Greenflow

답변

0

는 다음 어설 추가합니다. 이것은 사실 일 수 있습니다. 알려줘.