4

OS-X 10.8.4 を搭載した Mac で Qt 5.1 と QtQuick 2.0 を実行しています。

次のように、Transform: Rotation {} 要素の可変角度を設定するのに問題があります。

transform: Rotation {
   axis { x: 0; y: 1; z: 0 }
   angle: PathView.angle
}

ここで、PathView.angle は画像要素ごとに異なります。カバー フロー スタイルのコンテナーのコード here に従いましたが、その例も機能しません。

要約すると、一番下のコードは以下を生成します (コメントのケース 1 を参照)。

ここに画像の説明を入力

変数 PathAttribute 角度を使用してデリゲートの四角形の角度を取得します。

PathAttribute { name: "angle"; value: somevalue }

次に、次を使用して角度を設定します。

rotation: PathView.angle

しかし、これは私が望むものではありません。なぜなら、回転軸は z 軸を中心に定義されているからです (y を中心に回転角度を定義する必要があります)。だから私は(ケース2)に近いものが欲しい:

ここに画像の説明を入力

これで回転軸は正しくなりましたが、各長方形の角度はすべて一定です (コードで定義されているように 60 度)。

以下のコードのケース 3 は、私が作業しようとしているものですが、可変角度が Transform: Rotation {} で機能しないように見えるため、エラーが発生します (画像コンテナーごとに 1 回)。

Unable to assign [undefined] to double

これを機能させる方法について何か提案はありますか?

ありがとう!

以下は、私がやろうとしていることを示す最も単純な QML コードです。

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
4

2 に答える 2