2010-02-02 25 views
6

Sto tentando di implementare un'animazione del widget mostra/nascondi. Il widget è un QDockWidget e quindi è all'interno di QMainWindowLayout.Qt Mostra/nascondi animazione widget

Utilizzando QPropertyAnimation doens't sembra funzionare, ho qualcosa che sembra che:

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

Purtroppo non fa nulla. Ho provato con altre proprietà (minimumHeight, fixedHeight), ma lo stesso problema.

Pensavo di non aver impostato correttamente il layout del mio widget utilizzando il designer, ma anche se gioco con dimensioni minime non ho ancora alcun risultato. Che tipo di criterio di dimensione dovrei usare se voglio giocare con le dimensioni?

Sono bloccato, sarebbe così bello se qualcuno potesse chiarire il mio problema. Non sono sicuro che sto facendo qualcosa di sbagliato ...

Grazie in anticipo per il vostro aiuto, Boris -

risposta

2

A proposito, ecco come i programmatori Qt utilizzate nel QWidgetAnimator, utilizzato principalmente per animazioni di widget dock, sto facendo esattamente lo stesso ...:

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