如何在未单击listview委托的情况下更改按钮的文本?

时间:2017-03-01 02:08:54

标签: qml

我写了一个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();
                        }
                    }


                }
}

3 个答案:

答案 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()

解决这个问题。