Компоненты QML, для которых модель / делегат сбрасывается при обновлении модели - PullRequest
0 голосов
/ 18 марта 2020

Повторитель, компоненты ListView, которые имеют структуру модели / делегата, полностью сбрасываются при изменении элемента в массиве.

В приведенном ниже примере делегатом является «Кнопка и его собственное всплывающее окно».

Во-первых, наведите курсор мыши на кнопку, и вы увидите, что кнопка имеет эффект наведения, меняющий цвет и т. Д. c. Затем, через две секунды, когда сработает таймер, этот эффект наведения будет сброшен.

Во-вторых, нажмите кнопку, откроется всплывающее окно, затем, когда сработает таймер, всплывающее окно закроется.

Я не уверен, если это ошибка или нет. Если это не так, пожалуйста, порекомендуйте мне способ иметь список, в котором я могу изменить элементы, и он не будет сброшен.

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12

Window {
    id: window
    width: 300
    height: 300
    color: "black"

    property var array: [0]

    Timer {
        running: true
        repeat: true
        interval: 2000
        onTriggered: {
            ++array[0]
            // Value won't change if it's not set to itself
            array = array
        }
    }

    // All "Item"s are being fully reset, at every update
    // the hover effect on button disappears,
    // and modal is being closed
    Repeater {
        model: array
        delegate: Item {
            Button {
                text: "Open My Popup"
                onClicked: modal.open()
            }

            Popup {
                id: modal
                anchors.centerIn: Overlay.overlay
                modal: true

                Text {
                    text: model.modelData
                    color: "white"
                }
            }
        }
    }
}
...