7

私は QML ListView を持っています。デリゲートは、スレッドとQWidgets.

しかし、ListView をスクロールするか、デリゲートをプログラム ウィンドウに展開すると、目に見えないデリゲートが破棄されます。

デリゲートを に保存するにはどうすればよいListModelですか?

私のコード例:

    import Qt 4.7

    Rectangle {
    width: 320; height: 200; color: "white"
    Text {
        id: debugText
        font.pixelSize: 24
        color:"blue"
        text: "count of created delegates: " + added.toString()
    }
    property int added: 0
    Component {
        id: delegate
        Item {
            id: wrapper
            Component.onCompleted: added += 1
            width: 180; height: 50
            Column {
                x: 5; y: 5
                Text { text: '<b>Name:</b> ' + name }
                Text { text: '<b>Number:</b> ' + number }
            }
        }
    }
    ListView {
        width: parent.width; height: parent.height
        model: contactModel
        delegate: delegate
    }

    ListModel {
        id: contactModel
        ListElement {
            name: "Bill Smith"
            number: "555 3264"
        }
        ListElement {
            name: "John Brown"
            number: "555 8426"
        }
        ListElement {
            name: "Sam Wise"
            number: "555 0473"
        }
        ListElement {
            name: "Bill Smith"
            number: "555 3264"

        }
        ListElement {
            name: "John Brown"
            number: "555 8426"
        }
        ListElement {
            name: "Sam Wise"
            number: "555 0473"
        }
    }
}

ありがとう!私は問題を解決します!最初の方法 - Flickable オブジェクト、Column および Repeater を作成します。このソリューションは私に適しています。2番目の方法-メインビュー(SCADAのようなプログラム)の複数のグリッドの場合、各オブジェクトがQObjectListで、各オブジェクトが私のDataObjectであるQObjectListを使用します:)

4

1 に答える 1

5

ListView がデリゲートを破壊しないようにするためにできることはcacheBuffer、ListView のプロパティに大きな値を割り当てることです (http://doc-snapshot.qt-project.org/4.8/qml-listview.html#cacheBuffer-prop)。 . これは明らかにハックであり、推奨されるアプローチではありません。状態をデリゲートに格納することはお勧めできません。

代わりにすべきことは、C++ モデルでネイティブ オブジェクトを個別に管理し、各オブジェクトの寿命を自由に制御できるようにすることです。

于 2012-11-06T06:12:14.627 に答える