Setting a variable angle for the Transform: Rotation {} element?



  • I am running Qt 5.1 and QtQuick 2.0 on a Mac with OS-X 10.8.4.

    I am having trouble setting a variable angle for the Transform: Rotation {} element, like this:
    @transform: Rotation {
    axis { x: 0; y: 1; z: 0 }
    angle: PathView.angle
    }@

    where PathView.angle varies for each image element of my model. I followed the "code here for a cover-flow style container":http://developer.nokia.com/Community/Wiki/Building_a_CoverFlow_component_with_QML but that example doesn't work either(!) - at least in terms of setting the rectangle angles correctly.

    To help troubleshoot this issue, I have put together a simple QML code to illustrate the issue. See Case 3 in the comments, that is the case I would like to get to work except that this case gives an error (once for each image container):

    Unable to assign [undefined] to double

    because a variable angle doesn't seem to work with Transform: Rotation {}: Why?

    Cases 1 & 2 are just test cases to help explore the issue, these work but are not what I want.

    Note that Case 1 would be fine except that the rotation axis is about z (that must be the default) but what I really want is the rotation axis to be defined about y. That is what brings me to using the Transform: Rotation {} element (to change the rotation axis).

    Any help or comments appreciated! Thanks.

    Code:

    @import QtQuick 2.0

    Rectangle {
    id: mainRect
    width: 1024; height: 300

    // Flow View:
    Rectangle {
        width: parent.width; height: parent.height
        color: "gray"
    
        PathView {
            id: myPV
            delegate: pathdelegate
            anchors.fill: parent
            model: 11 // provide a range of indices
    
            Keys.onLeftPressed: if (!moving && interactive) incrementCurrentIndex()
            Keys.onRightPressed: if (!moving && interactive) decrementCurrentIndex()
    
            preferredHighlightBegin: 0.5
            preferredHighlightEnd: 0.5
            focus: true
            interactive: true
    
            path: Path {
                id: pathElement
                startX: 0; startY: myPV.height / 2
                PathAttribute { name: "z"; value: 0 }
                PathAttribute { name: "angle"; value: 60 }
                PathAttribute { name: "scale"; value: 0.5 }
                PathLine { x: myPV.width / 2; y: myPV.height / 2;  }
                PathAttribute { name: "z"; value: 100 }
                PathAttribute { name: "angle"; value: 0 }
                PathAttribute { name: "scale"; value: 1.0 }
                PathLine { x: myPV.width; y: myPV.height / 2; }
                PathAttribute { name: "z"; value: 0 }
                PathAttribute { name: "angle"; value: -60 }
                PathAttribute { name: "scale"; value: 0.5 }
            }
        }
    
        // Delegate Component:
        Component {
            id: pathdelegate
            Rectangle {
                id: rect
                width: 256; height: 256
                z: PathView.z
                scale: PathView.scale
                color: "black"
                border.color: "white"
                border.width: 3
    
                // Case 1: This works:
                rotation: PathView.angle
    
                 //Case 2: This works:
                 //transform: Rotation {
                 //   axis { x: 0; y: 1; z: 0 }
                 //   angle: 60
                 //}
    
                // Case 3: This is the case that I need to work:
                // This DOES NOT work:
                // transform: Rotation {
                //    axis { x: 0; y: 1; z: 0 }
                //    angle: PathView.angle
                //}
            }
    
        } // End: Delegate Component
    
    } // End: Flow View:
    

    } // End: mainRect@


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.