我有三态复选框。我希望能够从我的代码中将其设置为Qt.PartiallyChecked,但我不希望用户能够将其设置为此状态。
这是我现在使用的解决方法:
CheckBox
{
checkState: allCheckState
tristate: true
onClicked: {
if (checkState == Qt.PartiallyChecked)
checkState = Qt.Checked;
}
}
有更好的解决方案吗?
答案 0 :(得分:3)
您可以覆盖nextCheckState
功能。引用文档:
此属性包含一个被调用以确定的回调函数 每当交互式切换复选框时,下一个检查状态 用户通过触摸,鼠标或键盘。
默认情况下,正常的复选框在Qt.Unchecked和。之间循环 Qt.Checked状态,并且三态复选框之间循环 Qt.Unchecked,Qt.PartiallyChecked和Qt.Checked状态。
nextCheckState回调函数可以覆盖默认值 行为。以下示例实现了一个三态复选框 可以根据外部呈现部分检查状态 条件,但从不循环到部分检查状态时 用户以交互方式切换。
CheckBox { tristate: true checkState: allChildrenChecked ? Qt.Checked : anyChildChecked ? Qt.PartiallyChecked : Qt.Unchecked nextCheckState: function() { if (checkState === Qt.Checked) return Qt.Unchecked else return Qt.Checked } }
这个QML属性是在QtQuick.Controls 2.4(Qt 5.11)中引入的。