QML, как анимировать каждое изменение свойства? (видна только анимация последнего изменения)C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 QML, как анимировать каждое изменение свойства? (видна только анимация последнего изменения)

Сообщение Anonymous »

Мне нужно сделать механический счетчик, управляемый с C++. Я сделал это из изображения, содержащего цифры (0,1,2,3,4,5,6,7,8,9,0). Одновременно видна только одна цифра. Я хочу, чтобы этот счетчик менялся только в одном направлении (вверх), и я придумал такую ​​теорию: если новая цифра меньше старой, я сначала перехожу к последнему нулю, затем отключаю анимацию, перехожу к первому нулю, включаю анимацию и наконец перехожу к нужному числу. Но это не сработает.
Он мгновенно перемещается к первому нулю, а затем с анимацией переходит к нужному числу. Вот код:

Код: Выделить всё

import QtQuick 2.4
import QtQuick.Window 2.2
Window {
id: mainWindow
visible: true
visibility: "Maximized"
property int digit0Y: 0
property bool anim0Enabled: true
Item {
id: root
visible: true
anchors.fill: parent
Rectangle {
id: container
width: 940; height:172
anchors.centerIn: parent
clip: true
color: "black"
NumberElement {
id: digit0
y: mainWindow.digit0Y; x: 0
animationEnabled: anim0Enabled
}
}
}
}
NumberElement.qml:

Код: Выделить всё

import QtQuick 2.0
Rectangle {
id: root
property bool animationEnabled: true
width: 130; height: 1892
color: "transparent"
Behavior on y {
enabled: root.animationEnabled
SmoothedAnimation { velocity: 200; duration: 1500; alwaysRunToEnd: true }
}
Image {
id: digits
source: "http://s30.postimg.org/6mmsfxdb5/cifre_global.png"
}
}
РЕДАКТИРОВАТЬ:

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 
#include 

int number = 0;
int oldDigit = 0;

void set(QObject *object, int number) {
int newDigit = number%10;
if (newDigit < oldDigit) {
QQmlProperty::write(object, "digit0Y", -1720);
QQmlProperty::write(object, "anim0Enabled", false);
QQmlProperty::write(object, "digit0Y", 0);
QQmlProperty::write(object, "anim0Enabled", true);
}
QQmlProperty::write(object, "digit0Y",newDigit*(-172));
oldDigit = newDigit;
}
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlEngine engine;
QQmlComponent component(&engine, QUrl(QStringLiteral("qrc:/main.qml")));
if (component.status() == QQmlComponent::Error) {
qWarning() 

Подробнее здесь: [url]https://stackoverflow.com/questions/33387404/qml-how-to-animate-every-change-of-a-property-only-the-last-change-animation-i[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»