отрицательное значение размера изображения qml

Я хочу сделать анимацию QML со свойством height элемента изображения QML. Но отрицательное значение свойства Высота изображения не работает в Таймере.

Скажите, что не так с этой анимацией?

import QtQuick 1.1

Rectangle {
    width: 300
    height: 300

    property int mySize: 10

    Image {
        x: 150; y: 150
        width: 20
        height: -mySize       // animation does not work in Timer, Why?
        //height: mySize      // animation works in Timer
        source: "Bar.jpg"
    }
    Timer {
        interval: 200
        running: true
        repeat: true
        onTriggered: mySize +=5
    }
}

person serkan gezer    schedule 16.10.2012    source источник


Ответы (1)


Во-первых (чтобы ответить на ваш вопрос), вы не можете использовать отрицательные размеры. Вместо этого используйте масштабирование, которое поддерживает отрицательные значения.

Scale {
    yScale: ...                // <-- change this value; 1 = original size

    Image {
        x: 150; y: 150
        width: 20; height: 10  // <-- use constant size
        source: "Bar.jpg"
    }
}

Во-вторых, вам определенно следует прочитать об анимациях в QML. В QML вам не нужны таймеры для реализации анимации. Идея состоит в том, что вы указываете только начальное и конечное значение анимируемого свойства и активируете эту анимацию. Вы также можете настроить скорость/продолжительность анимации и даже кривую замедления (для замедления анимации в конце и причудливых вещей, таких как подпрыгивание...). Одним из примеров может быть:

import QtQuick 1.1

Rectangle {
    width: 300; height:300

    Scale {
        Image {
            x: 150; y: 150
            width: 20; height: 10
            source: "Bar.jpg"
        }

        NumberAnimation on yScale {
            from: 1
            to: -1
            running: ...     // <-- Animation is running while expression is true
        }
    }
}

Или, если вы не хотите использовать выражение с привязкой свойства к Animation.running, вы также можете использовать методы Animation.start(), stop() и т. д. (Установите идентификатор анимации, чтобы сделать ее доступной из JavaScript.)

Но понимание и работа с привязками свойств в выражениях является важной частью QML, поэтому вы должны попытаться выразить то, что вы хотите, с помощью выражений, а не с помощью вызовов методов, событий, условий и т. д. Таков QML и почему он прекрасен. ;)

person leemes    schedule 16.10.2012