c++ - 使用 C++ 对象 Q_PROPERTY 绑定(bind)复选框 'checked' 属性

标签 c++ qt data-binding checkbox qt-quick

我正在学习 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/

相关文章:

c++ - 在自定义类中使用 QHash

java - 安卓数据绑定(bind) : Cannot resolve symbol

c++ - QWidget/QWindow 标题栏 : custom look, 原生感觉(类似Chrome)

c++ - 引用返回和右值

c++ - 如何动态地为 Vector<Point> 分配内存?

c++ - 从带有空格的字符串中获取整数的最佳方法?

Python 2.7 : pyinstaller create qt.conf文件

c++ - 系统托盘中的菜单没有每个 QActions

c# - XAML 绑定(bind)组

wpf - 使用 WPF 工具包 DatePicker 作为 ObjectDataProvider 的参数,用作 itemssource