Анимация Qt: структура анимации

1. Введение в класс анимации Qt

имя класса

Функции

Базовый класс анимации QAbstractAnimation

Предоставляет основные свойства и интерфейсы анимации, имеет два подкласса QVariantAnimation и QAnimationGroup. QAbstractAnimation является родительским классом для всех остальных классов. Он предоставляет основные свойства для всех анимаций в этой структуре.

QPropertyAnimation фактический класс анимации

Реализовано свойство анимации Qt, такое как анимационный эффект масштабирования размера элемента управления, перемещения положения и изменения прозрачности. Свойства, которые нужно изменить, должны быть свойствами класса, а класс должен иметь определения свойств Q_PROPERTY (QRect геометрия READ геометрия WRITE setGeometry), в противном случае свойства должны быть объявлены и реализованы методы READ и WRITE.

Класс параллельной анимации QParallelAnimationGroup

Добавьте несколько анимаций свойств QPropertyAnimation в QParallelAnimationGroup для параллельной реализации анимации.

Класс последовательной анимации QSequentialAnimationGroup

QSequentialAnimationGroup последовательно реализует несколько QPropertyAnimation и выполняет анимации в порядке их добавления.

Класс паузы QPauseAnimation

В серийной анимации добавление приостановленной анимации может привести к эффекту задержки.

Класс кривой скорости QEasingCurve

Существует 45 типов кривых скорости для анимации движения Qt, подробности см. в приложении.

QPropertyAnimation — это класс анимации, поставляемый с Qt. Этот класс может реализовывать простые эффекты анимации элементов управления, такие как эффекты анимации при перемещении элементов управления, масштабировании и непрозрачности (необходимо использовать функцию setPropertyName, чтобы указать желаемое имя свойства анимации перед использованием эффекта). , Следующие три уже определены Qt).

  • Перемещение (pos): в основном реализовать эффект перемещения, например, перемещение из одной точки в другую, тип используемой переменной — QPoint и так далее.
  • Масштабирование (геометрия): позволяет добиться эффектов масштабирования и перемещения Это свойство может реализовать масштабирование указанного элемента управления, а также реализовать движение на основе масштабирования.
  • Непрозрачность (windowOpacity): реализовать настройку прозрачности элемента управления (однако это свойство можно использовать только для окон верхнего уровня, и оно недопустимо для обычных элементов управления).

Преимущества этой статьи: бесплатный пакет учебных материалов по разработке Qt, техническое видео, в том числе (основа языка C++, введение в программирование Qt, механизм сигналов и слотов QT, рисование изображения разработки интерфейса QT, сеть QT, программирование базы данных QT, QT проектный бой, QSS, OpenCV, быстрый модуль, вопросы для интервью и т. д.) ↓↓↓↓↓↓См. ниже↓↓Нажмите внизу статьи, чтобы получить гонорар↓↓

Два, QPropertyAnimation

Класс QPropertyAnimation может изменять значения свойств Qt, таких как pos, геометрия и другие свойства. После установки начального значения и конечного значения анимации, а также продолжительности анимация свойства в основном завершена.

2.1 Мобильный

Если вам нужна только анимация смещения, вы можете изменить свойство pos элемента управления.

QPropertyAnimation *pAnimation = new QPropertyAnimation(ui->scaleButton, "pos");
pAnimation->setDuration(300); // 设置动画执行时间,单位毫秒
pAnimation->setStartValue(QPoint(140, 688)); // 初始值
pAnimation->setEndValue(QPoint(140, 668)); // 结束值

2.2 Масштаб

Изменяя свойство геометрии элемента управления, можно реализовать эффект масштабирования, а также реализовать анимацию смещения.Первые два значения свойства определяют положение левого верхнего угла элемента управления, а последние два значения определяют размер элемента управления.

QPropertyAnimation *pAnimation = new QPropertyAnimation(ui->scaleButton, "geometry");
pAnimation->setDuration(300); // 设置动画执行时间,单位毫秒
pAnimation->setStartValue(QRect(140, 688, 534, 48)); // 初始值
pAnimation->setEndValue(QRect(140, 688, 534, 96)); // 结束值
pAnimation->setEasingCurve(QEasingCurve::InOutQuad); // 设置速度曲线
//pAnimation->start(QAbstractAnimation::DeleteWhenStopped); // 执行动画,结束后删除对象

2.3 Непрозрачность

Поскольку элемент управления Qt не имеет свойства прозрачности opacity, необходимо реализовать эффект рисования элемента управления через QGraphicsOpacityEffect, чтобы добиться изменения прозрачности.

QGraphicsOpacityEffect *pButtonOpacity = new QGraphicsOpacityEffect(this);
pButtonOpacity->setOpacity(1);
ui->scaleButton->setGraphicsEffect(pButtonOpacity);

QPropertyAnimation *pOpacityAnimation1 = new QPropertyAnimation(pButtonOpacity, "opacity");
pOpacityAnimation1->setDuration(1000);
pOpacityAnimation1->setStartValue(1);
pOpacityAnimation1->setEndValue(0);

2.4 Кривая анимации

Анимации также можно задать кривую интерполяции времени, по умолчанию это linear, то есть линейное движение, установив QEasingCurve. Qt предоставляет 40 определенных кривых (при необходимости вы также можете настроить кривую):

pAnimation->setEasingCurve(QEasingCurve::InOutQuad);

2.5 Настройка направления выполнения анимации

Выполнение анимации Qt может задавать направление выполнения, то есть вперед и назад.Например, изменение прозрачности — это начальное значение setStartValue(0), конечное значение — setEndValue(1), элемент управления меняется от скрытого к отображению. Вы можете установить обратное направление выполнения анимации, pAnimation->setDirection(QAbstractAnimation::Backward), чтобы можно было выполнять анимацию от отображения к скрытию. Выполнение анимации обычно является двунаправленным и может управляться по направлению, чтобы избежать создания обратного потока анимации.

enum Direction {
   Forward,
   Backward
};

// 设置动画执行方向为反向
pAnimation–>setDirection(QAbstractAnimation::Backward);

2.6 Настройка времени цикла анимации

Иногда необходимо выполнить анимацию несколько раз или зациклить бесконечно, вы можете установить количество циклов анимации. При значении -1 это означает бесконечный цикл.

void setLoopCount(int loopCount);

2.7 Действия в конце выполнения анимации

Чтобы выполнить некоторые работы по очистке или настройке свойств после окончания анимации, вы можете подключить сигнал QAbstractAnimation::finished и выполнить некоторые операции после окончания анимации. Также можно поместить очистку объекта анимации в функцию слота. Таким образом, вы не можете запустить (QAbstractAnimation::DeleteWhenStopped);

connect(pSequenAno, &QAbstractAnimation::finished, [=]() {
	ui->pushButtonAddVideo->setDisabled(true);
    ui->pushButtonDelVideo->setDisabled(true);
    ui->pushButtonAddPic->setDisabled(true);
    ui->pushButtonDelPic->setDisabled(true);
    PausePlayVedio(1, 0);//先创建索引,准确时间定位
});

3. QSequentialAnimationGroup

QSequentialAnimationGroup — это группа последовательных анимаций.При добавлении QPropertyAnimation или QPauseAnimation формируется группа анимаций, которая воспроизводится в порядке добавления.Общая продолжительность группы анимаций равна сумме добавленных анимаций.

QSequentialAnimationGroup *pPosGroup = new QSequentialAnimationGroup(this);
pPosGroup->addPause(500);
pPosGroup->addAnimation(pAnimation1);
pPosGroup->addAnimation(pAnimation2);

Взад и вперед

Анимация Qt может задавать количество циклов. Цикл по умолчанию — это повторное воспроизведение с самого начала. Движение туда и обратно может быть реализовано путем добавления группы анимаций с противоположными начальным значением и конечным значением в группу последовательных анимаций.

Четыре, QParallelAnimationGroup

QParallelAnimationGroup — это группа параллельных анимаций. Анимации, добавленные в группу параллельных анимаций, будут воспроизводиться одновременно. Общая продолжительность группы анимаций — это время, необходимое для самой длинной анимации.

m_group = new QParallelAnimationGroup(this);
m_group->addAnimation(pScaleGroup);
m_group->addAnimation(pPosGroup);
m_group->addAnimation(pOpacityGroup);

отложенное воспроизведение

Добавьте QPauseAnimation в начале группы последовательной анимации, а затем добавьте различные группы последовательной анимации Pause в группу параллельной анимации, чтобы добиться эффекта задержки.

Преимущества этой статьи: бесплатный пакет учебных материалов по разработке Qt, техническое видео, в том числе (основа языка C++, введение в программирование Qt, механизм сигналов и слотов QT, рисование изображения разработки интерфейса QT, сеть QT, программирование базы данных QT, QT проектный бой, QSS, OpenCV, быстрый модуль, вопросы для интервью и т. д.) ↓↓↓↓↓↓См. ниже↓↓Нажмите внизу статьи, чтобы получить гонорар↓↓

Supongo que te gusta

Origin blog.csdn.net/QtCompany/article/details/131603592
Recomendado
Clasificación