Поведение QML без указания «включено»

#qt #qml

#qt #qml

Вопрос:

Согласно документации по анимации в разделе «Анимация по умолчанию как поведение», они говорят, что

Существует несколько способов присвоения анимации поведения свойствам.

Один из них заключается в том, что мы должны иметь возможность использовать Behaviour без on property , но мне не удается заставить его работать.

Вот мой пример кода. У меня есть цветной круг, и изменение цвета должно вызвать ColorAnimation, но это не так

 import QtQuick 2.5
import QtQuick.Window 2.2

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    Rectangle {
        width: 75; height: 75; radius: width
        id: ball
        color: "salmon"

        Behavior {
            ColorAnimation { target: ball; duration: 100 }
        }
    }

    Component.onCompleted: timer.start()

    Timer{
        id: timer
        onTriggered: {ball.color = "blue" }
        interval: 1000
    }
}
  

Если я добавлю on color , это сработает. Я также пытался добавить property: "color" в ColorAnimation определение, но ничего не происходит.

Комментарии:

1. Похоже, что это страница документации, которая имеет тенденцию быть ошибочной. Некоторое время назад была исправлена очень похожая ошибка: bugreports.qt.io/browse/QTBUG-11599

2. Behavior В вашем примере это не имеет смысла. Оно должно быть связано с каким-либо свойством, но в вашем случае это не так. Что, если элемент имеет несколько свойств «цвета»? Почему, кстати, вы хотите, чтобы это было без ключевого слова «on»?

3. Следует ли отправить ошибку в этот файл документа: qtdeclarative/src/quick/doc/snippets/qml/animation.qml

4. @folibis: просто потому, что так написано в документации. doc.qt.io/qt-5/qtquick-statesanimations-animations.html — раздел: Анимация по умолчанию как поведение.

5. Я тоже этого не понимаю, как я должен использовать поведение без синтаксиса on? Ошибка открыта с 13: (

Ответ №1:

После более подробного просмотра документов я не думаю, что есть другой способ указать свойство для поведения в QML, хотя документы animation предполагают это.

Поведение — это тип модификатора свойства, более конкретный перехватчик записи значения свойства. В настоящее время поведение является единственным, см.:

http://doc.qt.io/qt-5/qtqml-cppintegration-definetypes.html

Ответ №2:

Запись Behavior без on <property> единственного определяет новый Behavior компонент. Чтобы использовать его, оно должно быть применено к свойству. Код из документации Qt 5:

 // FadeBehavior.qml
import QtQuick 2.15
Behavior {
    ...
}
  

Затем используйте это Behavior :

 Text {
    FadeBehavior on text {}
}