2010-06-10 4 views
1

J'ai un QWidget qui contient divers autres widgets. Je veux l'animer en apparaissant sur l'écran en le révélant progressivement de haut en bas, en augmentant sa hauteur de 0 à ce que serait la hauteur naturelle.Qt: Animer le 'roll down' d'un QWidget

La façon dont je l'ai est actuellement:

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

Cela a deux problèmes: - Il se bloque lorsque la hauteur atteint une certaine hauteur, avec: erreur « qDrawShadeRect paramètres non valides ». - Si je change le 0 à 100, cela fonctionne bien, mais les widgets contenus dans le QWidget que j'anime ont leur disposition modifiée au fur et à mesure que le widget s'anime, commençant très serré et s'écartant graduellement. Cela semble moche!

Quelqu'un a-t-il des suggestions?

Répondre

0

Pour le plantage, je vous recommande de saisir une trace de pile et, en supposant que le problème ne figure pas dans votre code, report it as a bug. Pour la seconde, plutôt que de rendre le widget exactement où vous le souhaitez avec différentes tailles, affichez-le comme vous le souhaitez. Par exemple:

  • Utilisez un QStackWidget avec deux éléments: le widget réel et le widget souhaité
  • Le widget souhaité est vraiment juste un QWidget::render() à un pixmap de ce que vous voulez que le widget à ressembler.
  • Pour l'animation, affichez le widget prédéfini, puis basculez une fois que vous avez atteint la taille cible.
+0

Je me demande si c'est vraiment encore la meilleure stratégie ou s'il y a une meilleure solution dans le même temps. – Trilarion

1

Pour le deuxième problème, je suggérerais de tout emballer dans le widget dans un autre widget, qui a une taille fixe. En raison de l'écrêtage des widgets, cela signifie que le widget affichera des parties des widgets en taille réelle pendant son animation.

+0

Je l'ai déjà essayé, mais je n'arrivais pas à obtenir la taille du widget interne. Je veux éviter de calculer manuellement la taille du widget interne. J'ai essayé de l'ajouter à une mise en page pour saisir la bonne taille, puis de la configurer manuellement, mais il semble que les mises en page ne disposent pas immédiatement les widgets, ce qui rendait les tailles incorrectes. Si je pouvais résoudre ça, ça marcherait! – eAi

Questions connexes