2010-02-02 38 views
6

Tôi đang cố gắng triển khai hoạt ảnh tiện ích con/ẩn. Các widget là một QDockWidget và do đó là bên trong QMainWindowLayout.Qt Hiển thị/Ẩn hình động của tiện ích con

Sử dụng QPropertyAnimation doens't có vẻ làm việc, tôi nhận được một cái gì đó trông như rằng:

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

Đáng tiếc là nó không làm gì cả. Tôi đã thử với các thuộc tính khác (minimalHeight, fixedHeight), nhưng cùng một vấn đề.

Tôi nghĩ rằng tôi đã không thiết lập bố cục tiện ích của mình một cách chính xác bằng cách sử dụng trình thiết kế nhưng ngay cả khi tôi phát với kích thước tối thiểu, tôi vẫn không có bất kỳ kết quả nào. Tôi nên sử dụng loại chính sách kích thước nào nếu tôi muốn chơi với kích thước?

Tôi bị kẹt, sẽ thật tuyệt vời nếu ai đó có thể làm rõ vấn đề của tôi. Tôi không chắc chắn tôi đang làm điều gì sai trái ...

Cảm ơn trước sự giúp đỡ của bạn, Boris -

Trả lời

2

Bằng cách này, đây là cách lập trình Qt sử dụng nó trong QWidgetAnimator, sử dụng chủ yếu cho hoạt ảnh của tiện ích con dock, tôi đang làm chính xác như vậy ...:

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); 
Các vấn đề liên quan