0

QML の Image オブジェクトにいくつかの画像をロードしたいと思います。アニメーションのふりをする必要があるので、少し遅れてループで次々とやりたいと思います。私は Qt と QML が初めてなので、始め方や何かを手伝ってくれる人はいますか? :)

4

2 に答える 2

1

QML 1.x および 2.0 で機能する最も簡単な解決策は、 aRepeaterおよび aを使用することTimerです。

import QtQuick 2.0

Rectangle {
    id: base;
    width: 800;
    height: 600;

    property variant images : [
        "image1.jpg",
        "image2.jpg",
        "image3.jpg",
        "image4.jpg",
        "image5.jpg"
    ];
    property int currentImage : 0;

    Repeater {
        id: repeaterImg;
        model: images;
        delegate: Image {
            source: modelData;
            asynchronous: true;
            visible: (model.index === currentImage);
        }
    }

    Timer {
        id: timerAnimImg:
        interval: 500; // here is the delay between 2 images in msecs
        running: false; // stopped by default, use start() or running=true to launch
        repeat: true;
        onTriggered: {
            if (currentImage < images.length -1) {
                currentImage++; // show next image
            }
            else {
                currentImage = 0; // go back to the first image at the end
            }
        }
    }
}

currentImage = 0;最後の画像に達したときにアニメーションを再開したくない場合はstop();、タイマーのonTriggered.

また、必要な外観 (サイズ、塗りつぶしモード、位置など) を与えるために、Imageデリゲートを少し調整する必要がある場合があります。Repeater

于 2013-03-27T12:11:47.927 に答える
0

QtQuick 2 を使用している場合は、AnimatedSprite が最適な方法です: http://qt-project.org/doc/qt-5.0/qtquick/qtquick-effects-sprites.html

それ以外の場合は、Timer または NumberAnimation を使用して画像ソースの変更をトリガーできますが、画像が初めて読み込まれるときに予期しない遅延が発生する可能性があります (これは、最初のループの後にキャッシュによって解決されるはずです)。少数の画像しかない場合は、3 つの画像を使用してそれらの可視性を循環させることができます。

于 2013-03-22T23:31:39.690 に答える