Физический движок Qt / C ++ похож на iOS UIKit Dynamics

Мне было интересно, есть ли какие-либо инструменты для моделирования физического движения для анимации в Qt, Я помню, я когда-то видел на iOS что можно быстрее перетащить панель вниз, и панель будет подпрыгивать в нижней части экрана с интенсивностью, пропорциональной силе, с которой ее перетаскивали; я верю, что это называется UIKit Динамика. Что-то вроде этого:

введите описание изображения здесь

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

введите описание изображения здесь

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

Кто-нибудь знает, есть ли способы создания этих типов анимации с Qt Widgets или же Qt Quick? Есть ли что-то, что может быть интегрировано с Qt Animations?

0

Решение

У каждой анимации API есть, и это не «физический движок», это называется «кривые ослабления». Они обычно используются для имитации физического взаимодействия и оживления скучной и безжизненной анимации. Естественно, У Qt тоже есть, Есть множество самых часто используемых, и вы можете сделать свой собственный.

Эти эффекты не могут быть сделаны только с помощью кривых Qt анимации
предлагает.

Кажется, ты даже не пытался. Все примеры эффектов, которые вы разместили, могут быть достигнуты с помощью кривых замедления. Например, кривая ослабления для второго эффекта должна выглядеть примерно так:

введите описание изображения здесь

Нарастает почти линейно, пока не перешагнет цель, удерживая на мгновение, после чего отступает к цели.

Кроме того, если вы планируете создавать необычные анимированные интерфейсы, я бы предложил вместо этого использовать QML и держаться подальше от QtWidget stack — QML значительно быстрее и проще в создании современного пользовательского интерфейса. Виджеты не подходят для этого, вы могли бы к этому, но это будет утомительный процесс.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]