簡體   English   中英

的QList <int> 不能用作Repeater的模型

[英]QList<int> cannot be used as a model for Repeater

我有一個QObject屬性聲明為:

Q_PROPERTY( QList< int > keys READ getKeys NOTIFY keysChanged )

文檔中說明:

在QML中透明地支持某些C ++序列類型作為JavaScript數組類型。

特別是,QML目前支持:

  • QList <int>

...

但是,當我使用此屬性來驅動Repeater模型時:

QtObject {
    id: d_
    property var keys: base.proxy.keys // A binding to the C++ keys property
    onKeysChanged: {
        ...
    }
}

Column {
    spacing: 4

    Repeater {
        id: repeater
        model: d_.keys
        delegate: Rectangle {
            height: 24
            width: 24
            color: "red"
        }
    }
}

Repeater模型不產生代理。 如果我查詢d_.keys的長度,它會顯示正確的數量,如果我從C ++更改屬性, d_.onKeyChanged:{}觸發d_.onKeyChanged:{} - 但Repeater永遠不會構建任何內容。

如果我將QML keys屬性更改為JS數組:

property var keys: [1,2,3]

Repeater按預期工作。 如果我使用C ++屬性,但手動將數據轉換為JS數組,它也可以按預期工作:

QtObject {
    id: d_
    property var keys: base.proxy.keys

    onKeysChanged: {
        var list = [];
        for ( var i = 0; i < keys.length; ++i ) {
            list.push( keys[i] );
        }
        repeater.model = list;
    }
}

這強烈表明,盡管文檔說的是, QList<int> 並不等同於JS數組。 我做錯了什么,或者這是一個錯誤?

如所描述的在這里 ,所述QVariantList轉換為JS陣列,因此該問題可以是內容的類型不列表本身。

也就是說,我同意你的觀點,文檔不夠清晰,因為QList似乎也是一個有效的選擇。

暫無
暫無

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

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