簡體   English   中英

隨機播放 QML 列表模型

[英]Shuffle QML ListModel

我有一個 ListModel 和一個中繼器。 轉發器從 ListModel 中繪制項目,一個在另一個之上。 到目前為止效果很好。

除了在每個應用程序啟動時,我想要一個不同的繪制順序。

所以我想最好在應用中繼器之前“洗牌”ListModel 中的 ListElements。 我怎樣才能做到這一點?

使用以下答案:

並適應ListModel您將獲得以下功能:

utils.js

//https://stackoverflow.com/a/2450976/6622587
function shuffle(model){
    var currentIndex = model.count, temporaryValue, randomIndex;

    // While there remain elements to shuffle...
    while (0 !== currentIndex) {
        // Pick a remaining element...
        randomIndex = Math.floor(Math.random() * currentIndex)
        currentIndex -= 1
        // And swap it with the current element.
        // the dictionaries maintain their reference so a copy should be made
        // https://stackoverflow.com/a/36645492/6622587
        temporaryValue = JSON.parse(JSON.stringify(model.get(currentIndex)))
        model.set(currentIndex, model.get(randomIndex))
        model.set(randomIndex, temporaryValue);
    }
    return model;
}

main.qml

import QtQuick 2.9
import QtQuick.Window 2.2
import "utils.js" as Util

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    ListModel {
        id: fruitModel
        ListElement {
            name: "Apple"
            cost: 2.45
        }
        ListElement {
            name: "Banana"
            cost: 1.95
        }
        ListElement {
            name: "Orange"
            cost: 3.25
        }
    }

    Column {
        Repeater {
            model: Util.shuffle(fruitModel)
            Row {
                spacing: 10
                Text { text: name }
                Text { text: '$' + cost }
            }
        }
    }
}

在此鏈接中,您可以找到一個示例。

函數調用然后返回模型怎么樣?

function shuffle(n)
{
     if(n === 1)
         return ["apples", "oranges", "pears"];
     else if(n === 2)
         return ["banana", "oranges", "pears"];
}

Column {
    Repeater {
        model: shuffle(1)
        Text { text: "Data: " + modelData }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM