三态复选框:拒绝用户将其设置为PartiallyChecked

时间:2018-05-23 18:00:08

标签: qt qml qtquickcontrols2

我有三态复选框。我希望能够从我的代码中将其设置为Qt.PartiallyChecked,但我不希望用户能够将其设置为此状态。

这是我现在使用的解决方法:

CheckBox
{
     checkState: allCheckState
     tristate: true
     onClicked: {
          if (checkState == Qt.PartiallyChecked)
               checkState = Qt.Checked;
     }
}

有更好的解决方案吗?

1 个答案:

答案 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)中引入的。