2010-02-02 12 views
6

Estoy tratando de implementar una animación de widget show/hide. El widget es un QDockWidget y, por lo tanto, está dentro de QMainWindowLayout.Qt Mostrar/Ocultar animación de widget

Usando QPropertyAnimation doens't parecen funcionar, tengo algo con ese aspecto:

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); 

Por desgracia, no hace nada. Intenté con otras propiedades (minimumHeight, fixedHeight), pero el mismo problema.

Pensé que no configuré correctamente mi diseño de widgets utilizando el diseñador, pero incluso si juego con tamaños mínimos, todavía no tengo ningún resultado. ¿Qué tipo de política de tamaño debería usar si quiero jugar con el tamaño?

Estoy atascado, sería genial si alguien pudiera aclarar mi problema. No estoy seguro de que estoy haciendo algo mal ...

Gracias de antemano por su ayuda, Boris -

Respuesta

2

Por cierto, aquí es cómo los programadores utilizan Qt en el QWidgetAnimator, utiliza principalmente para animaciones de widgets de muelle, estoy haciendo exactamente lo mismo ...:

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);