QML Button exclusiveGroup属性?

时间:2017-07-20 13:57:36

标签: qt qml qtquick2

我无法将ExclusiveGroup分配给我的可检查按钮。

ExclusiveGroup {
    id: group

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


            Column {
                width: parent.width
                spacing: 0

                Button {
                    id: btnScan
                    flat: true
                    text: qsTr("But1")
                    width: parent.width
                    checkable: true
                    exclusiveGroup: group
                }
                Button {
                    id: btnWhiteList
                    flat: true
                    text: qsTr("But2")
                    width: parent.width
                    checkable: true
                    exclusiveGroup: group
                }
}

文档明确指出Button确实具有exclusiveGroup属性http://doc.qt.io/qt-5/qml-qtquick-controls-button.html#exclusiveGroup-prop。但是,当我运行该示例时,我收到此错误:

qrc:/main.qml:48 Cannot assign to non-existent property "exclusiveGroup"

将鼠标悬停在“exclusiveGroup”上会显示一个工具提示:“无效的属性名称exclusiveGroup”。

我安装了Qt 5.9.1。这是我的导入声明:

import QtQuick 2.7
import QtQuick.Controls 1.4
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3
import QtQuick.Controls.Material 2.2

我做错了什么?

由于

1 个答案:

答案 0 :(得分:4)

您遇到问题的原因是:

import QtQuick.Controls 1.4
import QtQuick.Controls 2.0

两者都有Button,但它们有不同的API 首先,您导入Button from QtQuick.Controls 1.4。然后导入Button from QtQuick.Controls 2.0。由于QML不知道你要使用哪一个,它将采用你输入的最后一个。如果您想要更具体,您想要使用Button,可以使用名为imports

import QtQuick.Controls 1.4 as OldCtrl
import QtQuick.Controls 2.0 as NewCtrl

然后您可以根据需要使用两个版本中的Button

OldCtrl.Button { // from the QtQuick.Controls 1.4 }
NewCtrl.Button { // from the QtQuick.Controls 2.0 }

您引用的文档适用于QtQuick.Controls 1.x,其中包含导入的ExclusiveGroup。所以你试图混合来自两个不能协同工作的库的东西。

有关QtQuick.Controls 2.x

的类似解决方案,请参阅ButtonGroup

有关两组控件的差异和用例的更多信息,请阅读: