2010-02-02 17 views
6

Próbuję zaimplementować animację widgetu pokaż/ukryj. Widżet jest widgetem QDockWidget i dlatego znajduje się wewnątrz obiektu QMainWindowLayout.Qt Pokaż/ukryj animację widgetu

Korzystanie QPropertyAnimation doens't wydają się działać, mam coś patrząc tak:

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

Niestety to nic nie robi. Próbowałem z innymi właściwościami (minimumHighight, fixedHeight), ale ten sam problem.

Pomyślałem, że nie ustawiłem poprawnie układu widżetów przy użyciu projektanta, ale nawet jeśli gram z minimalnymi rozmiarami, nadal nie mam żadnego wyniku. Jakich zasad dotyczących rozmiaru powinienem używać, jeśli chcę grać z rozmiarem?

Utknąłem, byłoby wspaniale, gdyby ktoś mógł wyjaśnić mój problem. Nie jestem pewien, że robię coś złego ...

Dzięki z góry za pomoc, Boris -

Odpowiedz

2

przy okazji, oto jak programiści Qt stosować go w QWidgetAnimator, wykorzystywane głównie do animacje widżetów doków, robię dokładnie to samo ...:

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