animation2
объявлено как локальная переменная. Когда включающая функция
выходит, он больше не находится в области видимости и удаляется. Анимация никогда не запускается как
он не существует, когда Qt возвращается в цикл обработки событий и, как отмечено в QAbstractAnimation
Документация
(QPropertyAnimation
наследует QAbstractAnimation), для выполнения QPropertyAnmiation
он должен существовать, когда Qt возвращается в цикл обработки событий.
Когда элемент управления достигает цикла обработки событий, анимация запускается сама по себе,
периодически вызывая updateCurrentTime () во время анимации.
Решение состоит в том, чтобы динамически распределять animation2
, а не объявлять его как
локальная переменная.
QPropertyAnimation *animation2 = new QPropertyAnimation(ui->textBrowser,"geometry");
animation2->setDuration(1000);
animation2->setStartValue(QRect(10,220/4,1,1));
animation2->setEndValue(QRect(10,220,201,71));
animation2->setEasingCurve(QEasingCurve::OutBounce);
animation2->start();
Обратите внимание, что это тот же метод, который используется в C ++
пример предоставлен в QPropertyAnmiation
Документация
QPropertyAnimation *animation = new QPropertyAnimation(myWidget, "geometry");
animation->setDuration(10000);
animation->setStartValue(QRect(0, 0, 100, 30));
animation->setEndValue(QRect(250, 250, 100, 30));
animation->start();
Оригинальные примечания к вопросу:
я могу видеть эту анимацию, только когда я показываю окно сообщения после нее
Это интересный побочный эффект работы QMessageBox
. exec()
Метод выполняет цикл обработки событий. Поскольку цикл событий выполняется в области видимости
функции, включающей animation2
, animation2
, все еще существует, и
желаемая анимация выполняется.
По умолчанию animation2
будет удалено, когда родитель, ui->textBrowser
в
оригинальный вопрос, удален. Если вы хотите, чтобы анимация была
удаляется по завершении выполнения, QAbstractAnimation
предоставляет свойство
это контролирует, когда анимация удаляется. Чтобы автоматически удалить
animation2
когда он завершит выполнение, измените метод start()
на:
animation2->start(QAbstractAnimation::DeleteWhenStopped);