绑定复选框'checked'具有C++对象Q_PROPERTY的属性
Binding Checkbox 'checked' property with a C++ object Q_PROPERTY
我正在学习QtQuick,我正在玩c++类和QML属性之间的数据绑定。
在我的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
更改用户名时,它会自动反映在视图中。当我选中/取消选中复选框时,或者当我从c++代码中调用setStatus()
时,什么也没有发生。似乎复选框的checked
属性与TextEdit
组件的行为不同。
我不想以声明的方式绑定我的属性。Qt Quick不支持属性绑定?
谢谢你的帮助。
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
}
}
一种解决方法是在onClicked
中恢复绑定(通过用户单击复选框删除),如:
CheckBox {
checked: user.status
onClicked: {
user.status = checked;
checked = Qt.binding(function () { // restore the binding
return user.status;
});
}
}
如果您在调用Component.onCompleted
时无法访问您的模型,这可以避免问题。
我发现让复选框在点击时只发出信号更自然,而不是改变它的状态:
// MyCheckBox.qml
CheckBox {
id: control
property bool changeOnClick: true // or just emit clicked()
MouseArea {
anchors.fill: parent
enabled: !control.changeOnClick
onClicked: control.clicked();
}
}
然后你可以绑定它一次,并请求更改源点击:
MyCheckBox {
changeOnClick: false
checked: user.state
onClicked: {
user.state = !user.state;
}
}
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- C++概念:如何使用'concept'检查模板化结构的属性?
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 通过指向指针数组的指针访问子类的属性
- MSVC是否支持C++11样式的属性而不是__declspec
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 类的C++属性似乎已重新初始化
- Qt Quick-如何仅从c++代码与qml属性交互
- 用概念检查属性的类型
- C++如何将同一类的实例作为属性
- 按多个属性排序
- 主函数参数的属性
- "perf_event_attr"结构的"read_format"属性的选项到底是什么?
- C++删除未使用的类属性会导致 std::logic_error
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- 使用内存地址访问结构的属性值
- C++调用具有 *this 属性的单个帮助程序函数
- C++ 在堆栈中包含多态属性的类对象存储
- C++ 命名参数习惯用语 - 未设置字符串属性
- 使用 CTRP 时,是否访问访问父构造函数 UB 中的子属性?