2010-02-02 7 views
6

J'essaie d'implémenter une animation de widget show/hide. Le widget est un QDockWidget et est donc dans le QMainWindowLayout.Qt Afficher/Masquer l'animation du widget

En utilisant QPropertyAnimation doens't semblent travailler, je suis quelque chose qui ressemble que:

m_listViewDock->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); 
QPropertyAnimation* animation = new QPropertyAnimation(m_listViewDock, "geometry", m_listViewDock); 

animation->setDuration(1000); 

QRect g = m_listViewDock->geometry(); 
animation->setStartState(g); 
g.setHeight(80); 
animation->setEndState(g); 
animation->start(QAbstractAnimation::DeleteWhenStopped); 

Malheureusement, il ne fait rien. J'ai essayé avec d'autres propriétés (minimumHeight, fixedHeight), mais le même problème.

Je pensais que je n'avais pas configuré correctement la disposition de mon widget en utilisant le concepteur, mais même si je joue avec des tailles minimales, je n'ai toujours aucun résultat. Quel genre de politique de taille dois-je utiliser si je veux jouer avec la taille?

Je suis coincé, ce serait génial si quelqu'un pouvait clarifier mon problème. Je ne suis pas sûr que je fais quelque chose de mal ...

Merci d'avance pour votre aide, Boris -

Répondre

2

Par ailleurs, voici comment les programmeurs Qt utilisés dans le QWidgetAnimator, principalement utilisé pour animations de widgets de quai, je fais exactement la même chose ...:

const QRect final_geometry = _final_geometry.isValid() || widget->isWindow() ? _final_geometry : 
     QRect(QPoint(-500 - widget->width(), -500 - widget->height()), widget->size()); 

#ifndef QT_NO_ANIMATION 
    AnimationMap::const_iterator it = m_animation_map.constFind(widget); 
    if (it != m_animation_map.constEnd() && (*it)->endValue().toRect() == final_geometry) 
     return; 

    QPropertyAnimation *anim = new QPropertyAnimation(widget, "geometry", widget); 
    anim->setDuration(animate ? 200 : 0); 
    anim->setEasingCurve(QEasingCurve::InOutQuad); 
    anim->setEndValue(final_geometry); 
    m_animation_map[widget] = anim; 
    connect(anim, SIGNAL(finished()), SLOT(animationFinished())); 
    anim->start(QPropertyAnimation::DeleteWhenStopped);