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