QML取消选中ExclusiveGroup中的已选中按钮

时间:2015-03-19 08:07:44

标签: qt qml qt5

我有三个按钮位于ExclusiveGroup

ExclusiveGroup {id: group}
Button{
    checkable: true
    exclusiveGroup: group
}
Button{
    checkable: true
    exclusiveGroup: group
}
Button{
    checkable: true
    exclusiveGroup: group
}

在点击其中任何一个之前,它们显然都是未经检查的,但是一旦选中其中一个,我怎么能取消选中它们?我是否真的需要添加另一个按钮,一旦选中,会产生在没有其他按钮被选中时应用的行为?

1 个答案:

答案 0 :(得分:2)

您可以利用ExclusiveGroup的{​​{3}}属性:

  

当前选定的对象。默认为绑定到ExclusiveGroup的第一个已检查对象。 如果,则默认为null

因此,无论何时需要,都可以通过将current属性设置为null来取消选中当前按钮。

在下面的例子中,我正在删除检查状态,这显然更像是一个练习而不是真实的用例。但无论如何,它都能掌握这种方法:

import QtQuick 2.4
import QtQuick.Window 2.0
import QtQuick.Controls 1.2

ApplicationWindow {
    id: window
    visible: true
    width: 100
    height: 200

    ColumnLayout {
        anchors.centerIn: parent
        Button{
            id: but1
            checkable: true
            exclusiveGroup: group
        }
        Button{
            id: but2
            checkable: true
            exclusiveGroup: group
        }
        Button{
            id: but3
            checkable: true
            exclusiveGroup: group
        }
    }

    ExclusiveGroup {
        id: group

        onCurrentChanged: {
            if(current != null) {
                console.info("button checked...no!")
                current = null
                //current.checked = false    <--- also this
            }
        }
    }
}