Я пытаюсь реализовать показать/скрыть анимацию виджета. Виджет является QDockWidget и поэтому в QMainWindowLayout.
Используя QPropertyAnimation doens't, кажется, работают, я получил что-то бывшее похожее на это:
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), но та же проблема.
Я думал, что не устанавливал свое расположение виджета правильно с помощью разработчика, но даже если я играю с минимальными размерами, у меня все еще нет результата. Какую политику размера я должен использовать, если я хочу играть с размером?
Я застреваю, было бы настолько замечательно, если кто-то мог бы разъяснить мою проблему. Я не уверен, что делаю что-то не так...
Заранее спасибо за Вашу справку, Boris -
Кстати, вот как программисты 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);