x
xintreaJan. 24, 2018, 6:36 a.m.

В чем отличие NumberAnimation от PropertyAnimation в языке QML?

qml, анимация

Вопрос назрел, по документации непонятно зачем сделано два идентичных типа.

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

5
Evgenii Legotckoi
  • Jan. 24, 2018, 6:54 a.m.

PropertyAnimation - это базовый тип для нескольких видов анимации, в том числе и для NumberAnimation, который наследован от него.

Единственное видимое отличие NumberAnimation от PropertyAnimation в том, что в документации присутствует переопределение свойств from и to. Если посмотреть другие анимации, которые наследованы от PropertyAnimation, то можно увидеть, что там также переопределены свойства from и to, с некоторым дополнениями свойств в отдельных случаях.

То есть все эти анимации свойств являются специализированными объектами для выполнения анимаций. Единственное, что мне приходит на ум, так это то, что это было сделано в целях специализации типов QML, а также что под капотом этих специализированных анимаций присутствует некая оптимизация для специализированных типов данных значений from и to. Но я в исходники этих типов не заглядывал, так что это только предположение.

    x
    • Jan. 24, 2018, 2:41 p.m.

    В декументации есть какая-то странная фраза про свойство from:


    This property holds the starting value for the animation.
    For example, the following animation is not applied until the x value has reached 100:

    Я перевел как: Это свойство устанавливает начальное значение, которое будет анимироваться. Например, следующая анимация не будет применяться пока значение X не достигнет 100.

    Сижу и думаю, что бы это значило.

      Evgenii Legotckoi
      • Jan. 24, 2018, 4:38 p.m.

      Учитывая пример из документации, в котором Вы это смотрели

      Item {
          states: [
              // ...
          ]
      
          transition: Transition {
              NumberAnimation { properties: "x"; from: 100; duration: 200 }
          }
      }
      Смысл данного предложения заключается в следующем:
      Добавленная анимация может быть применена к объектом в том и только в том случае, когда его свойство x будет равно 100.
      То есть, если положение объекта по оси X будет отлично от 100, то анимация выполняться не будет ни при каких условиях. Но это не значит, что Вы не можете её добавить в ваш объект QML, просто запустить вы её сможете только тогда, когда объект будет иметь позицию по координате X равную 100.
        x
        • Jan. 30, 2018, 3:22 p.m.

        А что вообще это за странная анимация, которая начинается при x=100, длится 200мс, но непонятно на каком значении заканчивается и непонятно какую переменную обрабатывает?

          Evgenii Legotckoi
          • Jan. 30, 2018, 4:12 p.m.

          Вот вам пример такой "странной" анимации.

          import QtQuick 2.9
          import QtQuick.Window 2.2
          import QtQuick.Controls 2.2
          
          Window {
              visible: true
              width: 640
              height: 480
              title: qsTr("Hello World")
          
              Rectangle {
                  id: rect
                  color: "green"
                  width: 50
                  height: 50
                  x: 100
          
                  transitions: Transition {
                      NumberAnimation { properties: "x"; from: 100; duration: 200 }
                  }
          
                  states: [
                      // This adds a second state to the container where the rectangle is farther to the right
          
                      State { name: "other"
          
                          PropertyChanges {
                              target: rect
                              x: 200
                          }
                      }
                  ]
              }
          
              Button {
                  text: qsTr("Click me")
          
                  anchors.bottom: parent.bottom
                  anchors.horizontalCenter: parent.horizontalCenter
          
                  onClicked: rect.state = "other"
              }
          }
          Эти анимации и изменения свойств предназначены для работы со состояниями. Состояние изменяет целевое свойство. И если одно из изменений позволяет данное изменение, то есть первоначальное положение объекта по оси x равно 100, то анимация, а если быть точным анимированое изменение свойства сработает. В противном случае не будет работать. Ну а длительность изменения будет равна 200 мс.

            Comments

            Only authorized users can post comments.
            Please, Log in or Sign up
            e
            • ehot
            • March 31, 2024, 2:29 p.m.

            C++ - Тест 003. Условия и циклы

            • Result:78points,
            • Rating points2
            B

            C++ - Test 002. Constants

            • Result:16points,
            • Rating points-10
            B

            C++ - Test 001. The first program and data types

            • Result:46points,
            • Rating points-6
            Last comments
            k
            kmssrFeb. 8, 2024, 6:43 p.m.
            Qt Linux - Lesson 001. Autorun Qt application under Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
            Qt WinAPI - Lesson 007. Working with ICMP Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
            EVA
            EVADec. 25, 2023, 10:30 a.m.
            Boost - static linking in CMake project under Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
            J
            JonnyJoDec. 25, 2023, 8:38 a.m.
            Boost - static linking in CMake project under Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
            G
            GvozdikDec. 18, 2023, 9:01 p.m.
            Qt/C++ - Lesson 056. Connecting the Boost library in Qt for MinGW and MSVC compilers Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
            Now discuss on the forum
            a
            a_vlasovApril 14, 2024, 6:41 a.m.
            Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
            Павел Дорофеев
            Павел ДорофеевApril 14, 2024, 2:35 a.m.
            QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
            f
            fastrexApril 4, 2024, 4:47 a.m.
            Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…
            AC
            Alexandru CodreanuJan. 19, 2024, 11:57 a.m.
            QML Обнулить значения SpinBox Доброго времени суток, не могу разобраться с обнулением значение SpinBox находящего в делегате. import QtQuickimport QtQuick.ControlsWindow { width: 640 height: 480 visible: tr…

            Follow us in social networks