我寫了一個listview來顯示一些信息,當我點擊pDelegate
中的按鈕時,按鈕上的文本會變成「Added」,現在我想保存模型的數據,當我重新啓動程序時,這樣「Added 「項目會自動顯示」添加「,但我無法意識到這一點。當我將一個變量標記爲按鈕文本時,所有按鈕文本都會顯示「已添加」,我只希望與保存的數據匹配的特定項目顯示「已添加」,請幫助我,謝謝!如何在不點擊listview委託的情況下更改按鈕的文本?
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();
}
}
}
}
請將代碼縮減爲[最小工作示例](http://stackoverflow.com/help/mcve)。只需刪除'Image'和'BusyIndicator'等不必要的項目等。 – folibis
AFAIK QML不支持寫入磁盤。你需要在C++中實現一個模型,爲你做持久化的東西。 – derM
是的,我將數據(字符串)保存在C++中,並使用JavaScript全局變量來接收字符串,該字符串是一個項目名稱列表,我將用它顯示在該監聽上,然後我將使用該模型來追加元素。但是當按鈕文本已經顯示時,如何更改我想在委託中更改的按鈕文本,我無法使用按鈕ID訪問按鈕文本,更改按鈕文本的唯一方法是單擊按鈕,所以如何改變它不點擊按鈕? –