2010-06-10 6 views
1

다른 여러 위젯이 포함 된 QWidget이 있습니다. 점차적으로 위에서 아래로 드러내면서 화면에 나타나는 애니메이션을 만들고 싶습니다. 높이를 0에서 자연 높이로 늘리십시오.Qt : QWidget의 '롤 다운'애니메이션하기

내가이 방법은 현재 :

mAnimation = new QPropertyAnimation(this, "maximumHeight"); 
mAnimation->setStartValue(0); 
mAnimation->setEndValue(400); 
mAnimation->start(); 

이 두 가지 문제가 있습니다 - 높이가 일정 높이에 도달하면 그것은과 충돌 "qDrawShadeRect : 잘못된 매개 변수"오류가 발생했습니다. - 0을 100으로 변경하면 잘 동작하지만 애니메이션을 적용하는 QWidget 내에 포함 된 위젯은 위젯이 움직이면서 모양이 바뀌면서 레이아웃이 변경되고 서로 뭉개지고 점차 공간이 넓어지면서 점차 넓어집니다. 이것은보기 흉하게 보인다!

누구에게 의견이 있습니까?

답변

0

충돌의 경우 스택 추적을 잡아서 문제가 코드에 없다고 가정하면 report it as a bug을 추천합니다.

두 번째로 위젯을 다른 크기로 원하는 위치에 정확하게 렌더링하지 말고 원하는대로 렌더링하십시오. 예를 들어 :

  • 은 두 가지 항목으로 QStackWidget을 사용하여 실제 위젯하고 원하는 위젯
  • 원하는 위젯 그냥 QWidget::render() 당신이 같이 할 수있는 위젯을 원하는의 픽스맵에 정말입니다.
  • 애니메이션의 경우 사전 렌더링 된 위젯을 표시 한 다음 대상 크기에 도달하면 전환하십시오.
+0

이것이 정말 최고의 전략인지, 아니면 평균 시간에 더 나은 해결책이 있는지 궁금합니다. – Trilarion

1

두 번째 문제는 고정 된 크기를 가진 다른 위젯에서 위젯 내부의 모든 것을 배치하는 것이 좋습니다. 위젯이 클리핑되기 때문에 이는 위젯이 애니메이션을 만드는 동안 전체 크기 위젯의 일부를 표시 함을 의미합니다.

+0

이전에 시도했지만 내부 위젯을 크기로 가져올 수 없었습니다. 수동으로 내부 위젯의 크기를 계산하지 않으려합니다. 올바른 크기를 잡아 레이아웃에 추가 한 다음 수동으로 설정하려고 시도했지만 레이아웃이 위젯을 즉시 레이아웃하지 않아서 잘못된 크기를 반환하고있는 것으로 보입니다. 만약 내가 이것을 풀 수 있다면, 효과가있을 것입니다! – eAi