我写了一个listview来显示一些信息,当我点击pDelegate
中的按钮时,按钮上的文字将变为“已添加”,现在我想保存模型的数据,当我重新启动时程序,这样的“添加”项目将自动显示“已添加”,但我无法实现这一点。当我将一个变量标记为按钮文本时,所有按钮文本都会显示“已添加”,我只想将与保存数据匹配的特定项目显示为“已添加”,请帮助我,谢谢!
ListModel{
id:pModel
}
ListView{
id:pView
anchors.fill:parent
model:pModel
delegate:pDelegate
anchors.margins: 15
Layout.alignment: Qt.AlignCenter
onAddChanged: {
console.log("added");
m_added = false;
}
}
Component{
id:pDelegate
Rectangle{
id:printerItem
width:parent.width
height:60
Text{
id:printerName
text:prname
font.pixelSize: 18
anchors.left: parent.left
anchors.leftMargin: pImg.width
anchors.verticalCenter: parent.verticalCenter
}
Component{
id:btnStyle3
ButtonStyle{
background: Rectangle{
width:control.width
height:control.height
color:printerItem.color
}
label:Text{
text:qsTr("Added")
font.pixelSize: 18
anchors.fill: parent
}
}
}
MouseArea{
id:itemMouseArea
hoverEnabled: true
anchors.fill: parent
onHoveredChanged: {
pView.currentIndex = index;
}
onEntered: {
printerItem.color = "#f5f5f5";
}
onExited: {
printerItem.color = "white";
}
}
Button{
id:btnAdd
width:60
height: 40
anchors.right: printerItem.right
anchors.verticalCenter: parent.verticalCenter
style:ButtonStyle{
id:btnAddStyle
background: Rectangle{
width:control.width
height:control.height
color: printerItem.color
}
label:Text{
id:btnText
color:control.hovered?"#0087ff":"black"
text:control.pressed?qsTr("Added"):qsTr("Add")
font.pixelSize: 18
anchors.fill: parent
}
}
onClicked: {
busyIndicator.visible = true;
busyIndicator.running = true;
clienter.setDefaultPrinter(printerName.text,index);
btnAdd.style = btnStyle3;
m_added = true;
}
Connections{
target:printerlist
onAddedChanged:{
console.log("onAddedChanged");
}
}
Connections{
target: printerlist
onStopSpinner:{
timer.start();
}
}
}
}
答案 0 :(得分:0)
从
更改按钮Text
元素属性text
text:control.pressed?qsTr("Added"):qsTr("Add")
到
text: m_added ? qsTr("Added") : qsTr("Add")
这会将您的按钮文字值绑定到m_added
的值。
答案 1 :(得分:0)
我看不到您m_adde
的定义位置,但它看起来像是单个属性或JavaScript变量,而不是模型提供的角色。
由于需要将单独的值与模型中的每个条目相关联,因此最简单的选择是“添加”模型提供的另一部分信息。
这样每个委托都有自己的状态,并且该状态可以作为模型数据的一部分进行保存和加载。
答案 2 :(得分:0)
sendmessage({"prname":pname[i],"prstate": qsTr(Jsclient.pstate)})
您可以使用workerscript
group_by()
解决这个问题。