QML AppSwitch每次打开页面时都会发送onCheckedChanged信号吗?

时间:2019-06-29 12:17:22

标签: qml signals toggle v-play

我有一个AppSwitch,它用于“激活/停用”我的应用程序中的用户帐户,它的检查状态是从数据库中读取的,该数据库可以按预期工作,并根据需要更改开关和文本每位用户的布尔值。

我的问题是
每次打开AppSwitch的页面时,它都会发送onCheckedChanged信号-进而向用户发送通知,告知其帐户已被激活?我本来打算通过推送通知来通知用户其帐户处于活动状态,但是不希望每次管理员移至其页面时都发送此消息!

我正在使用Felgo(以前称为V-Play)进行开发,指向AppSwitch文档的链接是:
Felgo AppSwitch

我的代码是:

            Rectangle {               
                width: parent.width / 2
                height: parent.height
                Column {
                    id: column
                    anchors.fill: parent
                    AppButton {
                        id: groupStatusText
                        width: parent.width
                        height: parent.height / 2
                    }
                    AppSwitch {
                        id: editStatus
                        knobColorOn: "#b0ced9"
                        backgroundColorOn: "#81b1c2"
                        checked: {
//userListItem is the current profile details of the user page
                            if(userListItem.groupStatus === 1) {
                                groupStatusText.text = "Deactivate this user"
                            }
                            else if(userListItem.groupStatus === 0) {
                                groupStatusText.text = "Activate this user"
                            }
                        }
                        onCheckedChanged: {
                            if(editStatus.checked === true) {
//the signal which sends to my database on updating the value,
//works as intended but sends signal each time page is created?
                                detailPage.adminEditGroupStatus(1)
                            } else {
                                detailPage.adminEditGroupStatus(0)
                            }
                        }
                    }
                }

在页面加载的每个实例上触发onCheckedChanged信号是正常行为吗?或者我该如何修改它,使其仅在用户更改时才触发!?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

添加一个条件,以确保在完全初始化组件之后(包括在checked属性上创建绑定之后)发送信号。

您可以在开关上添加一个布尔属性:

AppSwitch {
    property bool loaded: false    

    Component.onCompleted: loaded = true

    onCheckedChanged: {
        if (loaded) {
            // notify user
        }
    }
}

或仅使用state

AppSwitch {    
    Component.onCompleted: state = "loaded"

    onCheckedChanged: {
        if (state === "loaded") {
            // notify user
        }
    }
}