Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. Dealing with animations
Qt 6.11 is out! See what's new in the release blog

Dealing with animations

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
38 Posts 6 Posters 18.3k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M mostefa

    @tomy said in Dealing with animations:

    @mostefa

    I want to explain the first parts of the code based on my understanding and if possible, you please state your idea on it.

    Rectangle {
        id: root
        width: 100
        height: 100
        clip: true
        property real value: 0.0
        property int pointCount: 100
        property string title
        signal clicked()
    
        property alias easingType: anim.easing.type
    
    
        Image {
            anchors.fill: parent
            source: "blueprint.jpg"
        }
    
        Rectangle {
            anchors.fill: view
            anchors.leftMargin: -8
            anchors.rightMargin: -8
            color: 'transparent'
            border.color: "#53d769"
            border.width: 4
            opacity: 0.5
    
        }
    
        NumberAnimation {
            id: anim
            target: root
            property: "value"
            from: 0
            to: 1
        }
    

    First we have a squared rectangle (100, 100) that limits all painting to its borders. And it has some properties (of types real, int, string, signal and alias) which will be used later on the code. Until now that rectangle won't be shown because it hasn't a color.

    On Image, the blue square like one of these will fit onto the previous rectangle.

    After these two items, we reach the next Rectangle with the color transparent. This rectangle is mostly for drawing two top and down lines to act like two x-axes for the curve.
    The next object is NumberAnimation. It specifies the root as its target and the property as 'value' to be used by the AnimationController. It also sets the range to be used for making the curve from 0 to 1. I remove the duration property.

    Up to this point, is all of the above comprehension about each section correct please?

    For me i think that all your explanation is correct ! =)

    tomyT Offline
    tomyT Offline
    tomy
    wrote on last edited by
    #25

    @mostefa
    Thank you.

    M 1 Reply Last reply
    0
    • tomyT tomy

      @mostefa
      Thank you.

      M Offline
      M Offline
      mostefa
      wrote on last edited by
      #26

      @tomy said in Dealing with animations:

      @mostefa
      Thank you.

      You are welcome =)

      1 Reply Last reply
      0
      • E Offline
        E Offline
        Eeli K
        wrote on last edited by
        #27

        @tomy This is going to be off-topic, but I thought maybe I could help in another way.

        Maybe the problem is not so much the book (which really is problematic in some ways) but your learning strategy. You seem to want to understand every detail when you see it. It's a good thing but can lead to situation where you get stuck with things which are actually irrelevant for you at the moment. You have said you need and want to learn QML. Why? For what do you need it? Do you want to learn to animate cool visual things? Or do you want to create a working and practical user interface for some application which you need? If it's the latter, you don't need animations at all and can read the animation part of the book with a cursory glance. Nobody can expect to read a book with a new subject area and understand it all. There's much in Qt or even just in the QML part of it which you will never need or use. There's also much you don't need to know actively, for example you don't need to create grouped properties or attached properties right away, you just need to recognize them when you see them and use something which someone else has created.

        It's important to learn meta-learning skills, i.e. learn to how to learn effectively. One part of it is knowing what to not learn at the moment and just let some things be and go forward. Sometimes I read a book (not necessarily about programming) of which I understand maybe 10% or less. But when I read more and more I will understand those things which I didn't previously understood, and I wouldn't have understood them if I hadn't previously read that 90% which I didn't understand back then. Giving up isn't a bad thing if you know when and how to do it. Don't give up your greater goals, learn to give up some details if they hinder you from going forward.

        Another important thing is that if you don't have a personal task it's more difficult to learn. Just going through some examples which someone has made up is tedious, at least for me. I need some short-term goal, for example a user interface which does something for me which I actually want or need. Then I can search for things which are actually relevant for me and I can integrate them into my own task. The feeling when you get something done for your own needs is much better than when going through made-up examples. Do you have something specific you want to do with QML?

        tomyT 1 Reply Last reply
        2
        • E Eeli K

          @tomy This is going to be off-topic, but I thought maybe I could help in another way.

          Maybe the problem is not so much the book (which really is problematic in some ways) but your learning strategy. You seem to want to understand every detail when you see it. It's a good thing but can lead to situation where you get stuck with things which are actually irrelevant for you at the moment. You have said you need and want to learn QML. Why? For what do you need it? Do you want to learn to animate cool visual things? Or do you want to create a working and practical user interface for some application which you need? If it's the latter, you don't need animations at all and can read the animation part of the book with a cursory glance. Nobody can expect to read a book with a new subject area and understand it all. There's much in Qt or even just in the QML part of it which you will never need or use. There's also much you don't need to know actively, for example you don't need to create grouped properties or attached properties right away, you just need to recognize them when you see them and use something which someone else has created.

          It's important to learn meta-learning skills, i.e. learn to how to learn effectively. One part of it is knowing what to not learn at the moment and just let some things be and go forward. Sometimes I read a book (not necessarily about programming) of which I understand maybe 10% or less. But when I read more and more I will understand those things which I didn't previously understood, and I wouldn't have understood them if I hadn't previously read that 90% which I didn't understand back then. Giving up isn't a bad thing if you know when and how to do it. Don't give up your greater goals, learn to give up some details if they hinder you from going forward.

          Another important thing is that if you don't have a personal task it's more difficult to learn. Just going through some examples which someone has made up is tedious, at least for me. I need some short-term goal, for example a user interface which does something for me which I actually want or need. Then I can search for things which are actually relevant for me and I can integrate them into my own task. The feeling when you get something done for your own needs is much better than when going through made-up examples. Do you have something specific you want to do with QML?

          tomyT Offline
          tomyT Offline
          tomy
          wrote on last edited by tomy
          #28

          @Eeli-K

          I appreciate your good talks. That's very kind of you.
          I will make them remained in my mind.

          1 Reply Last reply
          1
          • tomyT Offline
            tomyT Offline
            tomy
            wrote on last edited by tomy
            #29

            I want to express my understanding on the rest of the code.
            On the way, we reach the ListModel type. It's like a container. After that is AnimationController, which executes its body instructions. So it first clears the container and then adds a hundred floating point numbers (0.0, 0.01, 0.02, ..., 0.99) to the container (using append).

            The next executed type (according to the from-top-to-down order) is PathView. Its job is displaying the data (those 100 floating point numbers stored in the ListModel). So the actual draw/design/display of the curve is done by PathView). On delegate it defines how data should be displayed by creating 4x4 orangish rectangles. In fact, it wants to put 100 4x4 rectangles to display the cure. By Path, the type creates a horizontal line (0, 100 to 100, 100). And then it finishes.

            The Text type is used for allowing the type EasyingType to have a text property. The MouseArea is used on the component to receive clicks.

            What about this part please? Is what I've understood mentioned-above correct?

            E 1 Reply Last reply
            0
            • tomyT tomy

              I want to express my understanding on the rest of the code.
              On the way, we reach the ListModel type. It's like a container. After that is AnimationController, which executes its body instructions. So it first clears the container and then adds a hundred floating point numbers (0.0, 0.01, 0.02, ..., 0.99) to the container (using append).

              The next executed type (according to the from-top-to-down order) is PathView. Its job is displaying the data (those 100 floating point numbers stored in the ListModel). So the actual draw/design/display of the curve is done by PathView). On delegate it defines how data should be displayed by creating 4x4 orangish rectangles. In fact, it wants to put 100 4x4 rectangles to display the cure. By Path, the type creates a horizontal line (0, 100 to 100, 100). And then it finishes.

              The Text type is used for allowing the type EasyingType to have a text property. The MouseArea is used on the component to receive clicks.

              What about this part please? Is what I've understood mentioned-above correct?

              E Offline
              E Offline
              Eeli K
              wrote on last edited by
              #30

              @tomy I think you have understood the purpose of almost all parts correctly, although terminology isn't very clear. Here are some details which aren't crucial:

              Types aren't "executed", I'd rather say that objects of those types are created. As I have said earlier (at least I remember having said), the creation order isn't necessarily top-down in implementation, but it's enough for understanding the logic. On the other hand it may be important to understand that Component.onCompleted functions are executed only after the object tree has been created to some point so that objects and their properties can be used in those Component.onCompleted functions, and the order of executing different objects' Component.onCompleted functions is undefined (it's explicitly told in the documentation) and I actually have stumbled on this fact, so it may be important in some situations.

              You make one mistake: the last Text element isn't a property. It's just an object which is added to its parent's children list and is one visible object amongst the Image, Rectangle and PathView objects.

              tomyT 1 Reply Last reply
              2
              • E Eeli K

                @tomy I think you have understood the purpose of almost all parts correctly, although terminology isn't very clear. Here are some details which aren't crucial:

                Types aren't "executed", I'd rather say that objects of those types are created. As I have said earlier (at least I remember having said), the creation order isn't necessarily top-down in implementation, but it's enough for understanding the logic. On the other hand it may be important to understand that Component.onCompleted functions are executed only after the object tree has been created to some point so that objects and their properties can be used in those Component.onCompleted functions, and the order of executing different objects' Component.onCompleted functions is undefined (it's explicitly told in the documentation) and I actually have stumbled on this fact, so it may be important in some situations.

                You make one mistake: the last Text element isn't a property. It's just an object which is added to its parent's children list and is one visible object amongst the Image, Rectangle and PathView objects.

                tomyT Offline
                tomyT Offline
                tomy
                wrote on last edited by
                #31

                @Eeli-K

                the last Text element isn't a property. It's just an object which is added to its parent's children list and is one visible object amongst the Image, Rectangle and PathView objects.

                Hi,
                Yes, I meant that object is used for populating the alias property of the root making it capable of having a property with the name 'title' on its use on the other component.

                Would you please take another look at the AnimationControler?

                AnimationController {
                        id: controller
                        animation: anim
                        Component.onCompleted: {
                            valueModel.clear()
                            for(var i=0; i<root.pointCount; i++) {
                                progress = i/root.pointCount
                                valueModel.append({value: root.value})
                            }
                        }
                    }
                

                In valueModel.append({value: root.value}), the progress values aren't used apparently! What is appended is a constant value, 0.0, which is the value of root!

                1 Reply Last reply
                0
                • tomyT Offline
                  tomyT Offline
                  tomy
                  wrote on last edited by
                  #32

                  Still I can't create a good story based on what I comprehended from that component.

                  E 1 Reply Last reply
                  0
                  • tomyT tomy

                    Still I can't create a good story based on what I comprehended from that component.

                    E Offline
                    E Offline
                    Eeli K
                    wrote on last edited by
                    #33

                    @tomy In the documentation for AnimationController you can see that it has the 'progress' property which is used here. It would have been better to be explicit about it by writing "controller.progress" instead of "progress". Now look at the NumberAnimation and read its documentation.

                    Does that help you forward? Can you see what happens to 'value' of root and to valueModel?

                    tomyT 1 Reply Last reply
                    0
                    • E Eeli K

                      @tomy In the documentation for AnimationController you can see that it has the 'progress' property which is used here. It would have been better to be explicit about it by writing "controller.progress" instead of "progress". Now look at the NumberAnimation and read its documentation.

                      Does that help you forward? Can you see what happens to 'value' of root and to valueModel?

                      tomyT Offline
                      tomyT Offline
                      tomy
                      wrote on last edited by tomy
                      #34

                      @Eeli-K
                      Yes, I read the documentation on NumberAnimation on Help and also the append function which adds a new item to the end of the list model.
                      But root.value is a constant, 0.0! In theory there is no benefit of adding many of them to the list, at least in an apparent manner.

                      PS: sorry for the delay, the situation is too complicated here.

                      J.HilkJ 1 Reply Last reply
                      0
                      • tomyT tomy

                        @Eeli-K
                        Yes, I read the documentation on NumberAnimation on Help and also the append function which adds a new item to the end of the list model.
                        But root.value is a constant, 0.0! In theory there is no benefit of adding many of them to the list, at least in an apparent manner.

                        PS: sorry for the delay, the situation is too complicated here.

                        J.HilkJ Offline
                        J.HilkJ Offline
                        J.Hilk
                        Moderators
                        wrote on last edited by
                        #35

                        @tomy Maybe I don't understand you, but

                        property real value: 0.0

                        is not a constant its a property that is initialized with 0.0


                        Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                        Q: What's that?
                        A: It's blue light.
                        Q: What does it do?
                        A: It turns blue.

                        tomyT 1 Reply Last reply
                        0
                        • J.HilkJ J.Hilk

                          @tomy Maybe I don't understand you, but

                          property real value: 0.0

                          is not a constant its a property that is initialized with 0.0

                          tomyT Offline
                          tomyT Offline
                          tomy
                          wrote on last edited by
                          #36

                          @J.Hilk
                          Yeah, sorry. I too meant that.
                          I meant its value doesn't change, it's 0.0, at least from the point of view I see.

                          tekojoT 1 Reply Last reply
                          0
                          • tomyT Offline
                            tomyT Offline
                            tomy
                            wrote on last edited by
                            #37

                            Anyway, if the example really sucks and if you advise me to do that, I skip this example and will go to the Grouped Animations section.

                            1 Reply Last reply
                            0
                            • tomyT tomy

                              @J.Hilk
                              Yeah, sorry. I too meant that.
                              I meant its value doesn't change, it's 0.0, at least from the point of view I see.

                              tekojoT Offline
                              tekojoT Offline
                              tekojo
                              wrote on last edited by
                              #38

                              @tomy but you do change the value here:

                                  NumberAnimation {
                                      id: anim
                                      target: root
                                      property: "value"
                                      from: 0
                                      to: 1
                                  }
                              

                              When you start the animation it will run root.value from 0 to 1.

                              1 Reply Last reply
                              2

                              • Login

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Categories
                              • Recent
                              • Tags
                              • Popular
                              • Users
                              • Groups
                              • Search
                              • Get Qt Extensions
                              • Unsolved