На этом шаге рассмотрим понятие смягчающих линий.
Смягчающие линии (Easing Curves) придают особую реалистичность проводимой анимации и создают у пользователей чувство того, что в программе реализован серьезный математический движок для симуляции динамики изменения объектов. Продемонстрируем применение смягчающих линий на простом примере (рис. 1), в котором будут анимированы два окна виджетов.
Рис.1. Использование смягчающих линий
QLabel lbl1("Animated Window1");//создаем два виджета надписи QLabel lbl2("Animated Window2"); QPropertyAnimation* panim1 = new QPropertyAnimation(&lbl1, "geometry");/*создаем анимацию свойств, которая будет применяться к свойству виджета geometry для изменения местоположения и размеров*/ panim1->setDuration(3000);//присваиваем продолжительность, равную трем секундам panim1->setStartValue(QRect(120, 0, 100, 100));/*устанавливаем начальные значения для изменений*/ panim1->setEndValue(QRect(480, 380, 200, 200));/*устанавливаем конечные значения для изменений*/ panim1->setEasingCurve(QEasingCurve::InOutExpo);/*устанавливает в анимации смягчающие линии*/ QPropertyAnimation* panim2 = new QPropertyAnimation(&lbl2, "pos");/*создаем анимацию свойств, которая будет применяться к свойству виджета pos для изменения только местоположения*/ panim2->setDuration(3000); panim2->setStartValue(QPoint(240, 0)); panim2->setEndValue(QPoint(240, 480)); panim2->setEasingCurve(QEasingCurve::OutBounce); QParallelAnimationGroup group;/*используем параллельную группу, чтобы оба окна были анимированы одновременно*/ group.addAnimation(panim1);//добавляем в нее анимации group.addAnimation(panim2); group.setLoopCount(3);//устанавливаем количество ее исполнений равное трем group.start();//из группы анимаций запускаем ее на исполнение lbl1.show(); lbl2.show();
Файлы приложения можно взять здесь.
На следующем шаге рассмотрим машину состояний и переходы в Qt.