Qt 更新模型时重置了模型/委托的QML组件

Qt 更新模型时重置了模型/委托的QML组件,qt,qml,qtquick2,qt-quick,qtquickcontrols2,Qt,Qml,Qtquick2,Qt Quick,Qtquickcontrols2,Repeater、ListView这类具有模型/委托结构的组件在修改数组中的元素时会完全重置 在下面的示例中,代理是“按钮和它自己的弹出窗口” 首先,将鼠标悬停在按钮上,您将看到该按钮具有悬停效果、更改颜色等。然后两秒钟后,当计时器触发时,悬停效果将重置 其次,点击按钮,弹出窗口将打开,然后当定时器触发时,弹出窗口将关闭 我不确定这是否是一个错误。如果不是,那么请推荐我一种方法,让我有一个列表,我可以修改元素,它不会重置 import QtQuick 2.12 import QtQuick.Wi

Repeater、ListView这类具有模型/委托结构的组件在修改数组中的元素时会完全重置

在下面的示例中,代理是“按钮和它自己的弹出窗口”

首先,将鼠标悬停在按钮上,您将看到该按钮具有悬停效果、更改颜色等。然后两秒钟后,当计时器触发时,悬停效果将重置

其次,点击按钮,弹出窗口将打开,然后当定时器触发时,弹出窗口将关闭

我不确定这是否是一个错误。如果不是,那么请推荐我一种方法,让我有一个列表,我可以修改元素,它不会重置

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"
                }
            }
        }
    }
}

你的问题是什么?重置意味着什么?这不是错误,这是标准行为,因为数组是一个“东西”。您可以使用
ListModel
并使用append、set或任何其他功能:重置是指悬停效果从一开始就开始,打开的弹出窗口即关闭。基本上,项目正在重新创建@Amfasis我每x秒从网络上获取一次JSON,所以我需要对其进行完全设置。使用QAbstractListModel,更适合于此。是否有此用例的示例?您的问题是什么?重置意味着什么?这不是错误,这是标准行为,因为数组是一个“东西”。您可以使用
ListModel
并使用append、set或任何其他功能:重置是指悬停效果从一开始就开始,打开的弹出窗口即关闭。基本上,项目正在重新创建@Amfasis我每x秒从网络获取一次JSON,所以我需要完全设置它。使用QAbstractListModel,更适合这种情况是否有此用例的示例?