Я пытаюсь добавить анимацию в событие нажатия кнопки. Но почему-то анимация не работает. Я сослался на справочные документы Qt, но не смог найти основную причину, вызывающую проблему
Ниже приведен пример кода:
void MainWindow::AnimationClick()
{
// define toolbar y movement positions for animation
TOOLBAR_Y_SHOWN = 0;
TOOLBAR_Y_HIDDEN = -m_AnimatedWidget->height();
m_AnimatedWidget = new AnimatedWidget(this);
QPropertyAnimation *m_ani = new QPropertyAnimation(m_AnimatedWidget, "pos", this);
m_ani->setDuration(500);
m_ani->setEndValue(QPoint(m_AnimatedWidget->pos().x(), TOOLBAR_Y_HIDDEN));
m_ani->setEasingCurve(QEasingCurve::InBack);
m_ani->start();
}
С вышеупомянутой реализацией ничего не происходит в событии click.
Любые предложения, спасибо.
Это выглядит неправильно:
TOOLBAR_Y_HIDDEN = -m_AnimatedWidget->height();
m_AnimatedWidget = new AnimatedWidget(this);
Сначала вы получаете доступ m_AnimatedWidget
затем Вы выделяете это?
Когда вы получаете сбой, такой как ошибка сегментации, всегда запускайте вашу программу в отладчике. Это помогло бы вам найти эту ошибку довольно легко, поскольку она остановилась бы на линии ошибки.
m_ani->setDuration(500);
setDuration()
аргумент выражается в миллисекундах. Вы, вероятно, должны уделять больше половины секунды, когда вы тестируете.
Я понял. Я не позволял m_AnimatedWidget показывать на экране.
Ниже отредактированный фрагмент.
void MainWindow::AnimationClick()
{
// define toolbar y movement positions for animation
TOOLBAR_Y_SHOWN = 0;
m_AnimatedWidget = new AnimatedWidget(this);
TOOLBAR_Y_HIDDEN = -m_AnimatedWidget->height();QPropertyAnimation *m_ani = new QPropertyAnimation(m_AnimatedWidget, "pos", this);
m_ani->setDuration(5000);
m_ani->setEndValue(QPoint(m_AnimatedWidget->pos().x(), TOOLBAR_Y_HIDDEN));
m_ani->setEasingCurve(QEasingCurve::InBack);
m_ani->start();
m_AnimatedWidget->show();
}