我正在学习 QtQuick,并且正在研究 C++ 类和 QML 属性之间的数据绑定(bind)。
在我的 C++ 对象模型中,我有两个属性:
Q_PROPERTY(QString name READ getName WRITE setName NOTIFY nameChanged)
Q_PROPERTY(bool status READ getStatus WRITE setStatus NOTIFY statusChanged)
在我的 .qml 文件中:
TextEdit {
placeholderText: "Enter your name"
text: user.name
}
Checkbox {
checked: user.status
}
当我从我的 C++ 代码中使用 setName
更改用户名时,它会自动反射(reflect)在 View 中。
当我选中/取消选中该复选框时,或者当我从我的 C++ 代码中调用 setStatus()
时,没有任何反应。复选框的属性 checked
似乎与 TextEdit
组件的行为不同。
我不想以声明的方式绑定(bind)我的属性。 Qt Quick 不支持属性绑定(bind)吗?
感谢您的帮助。
最佳答案
正如 leemes 指出的那样,用户单击复选框会破坏您创建的绑定(bind)。所以,不要创建绑定(bind),而是直接连接到更改信号来处理“get”情况。使用“onClicked”来处理“设置”的情况。此解决方案还要求您在 Component.onCompleted() 中进行初始化。例如……
CheckBox {
id: myCheck
onClicked: user.status = checked
Component.onCompleted: checked = user.status
Connections {
target: user
onStatusChanged: myCheck.checked = user.status
}
}
关于c++ - 使用 C++ 对象 Q_PROPERTY 绑定(bind)复选框 'checked' 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23860270/