2010-02-02 143 views
6

我試圖實現顯示/隱藏部件動畫。該小部件是一個QDockWidget,因此在QMainWindowLayout中。Qt顯示/隱藏部件動畫

使用QPropertyAnimation好好嘗試似乎工作,我得到的東西看起來就像是:

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

遺憾的是它沒有做任何事情。我嘗試過其他屬性(minimumHeight,fixedHeight),但同樣的問題。

我以爲我沒有使用設計器正確設置我的小部件佈局,但即使我用最小尺寸玩,我仍然沒有任何結果。如果我想玩尺寸,應該使用什麼樣的尺寸策略?

我被卡住了,如果有人能夠澄清我的問題,那將會非常棒。我不知道我做錯了什麼......在您的幫助, 鮑里斯

謝謝 -

回答

2

順便說一句,這裏是Qt的程序員如何在QWidgetAnimator用它,主要用於碼頭小工具的動畫,我做的完全一樣...:

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