使用C++对象Q_PROPERTY将Checkbox'checked'属性绑定

Neo*_*aru 5 c++ data-binding checkbox qt qt-quick

我正在学习QtQuick,我正在玩C++类和QML属性之间的数据绑定.

在我的C++对象模型中,我有两个属性:

Q_PROPERTY(QString name READ getName WRITE setName NOTIFY nameChanged)
Q_PROPERTY(bool status READ getStatus WRITE setStatus NOTIFY statusChanged)
Run Code Online (Sandbox Code Playgroud)

在我的.qml文件中:

TextEdit {
    placeholderText: "Enter your name"
    text: user.name
}

Checkbox {
    checked: user.status
}
Run Code Online (Sandbox Code Playgroud)

当我setName从我的C++代码更改用户名时,它会自动反映在视图中.当我选中/取消选中该复选框,或者当我setStatus()从我的C++代码调用时,没有任何反应.似乎checked复选框的属性与TextEdit组件的行为不同.

我不想以声明方式绑定我的属性.Qt Quick不支持属性绑定吗?

谢谢您的帮助.

小智 10

正如leemes指出的那样,用户单击复选框会破坏您创建的绑定.因此,不要创建绑定,而是直接连接到更改信号以处理"get"情况.使用"onClicked"来处理"set"情况.此解决方案还需要您在Component.onCompleted()中初始化.例如...

CheckBox {
    id: myCheck
    onClicked: user.status = checked
    Component.onCompleted: checked = user.status
    Connections {
        target: user
        onStatusChanged: myCheck.checked = user.status
    }
}
Run Code Online (Sandbox Code Playgroud)