8

ウィジェットの表示/非表示アニメーションを実装しようとしています。ウィジェットは QDockWidget であるため、QMainWindowLayout 内にあります。

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)で試しましたが、同じ問題です。

デザイナーを使用してウィジェットのレイアウトを正しく設定していないと思いましたが、最小サイズで遊んでも結果は得られません。サイズで遊びたい場合は、どのようなサイズ ポリシーを使用すればよいですか?

立ち往生しています。誰かが私の問題を明確にしてくれれば、とてもうれしいです。私は何か間違ったことをしているのかわからない...

助けてくれてありがとう、ボリス -

4

1 に答える 1

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); 
于 2010-02-02T02:44:07.727 に答える