Davita
Davita

Reputation: 9144

QML Button exclusiveGroup property?

I'm unable to assign ExclusiveGroup to my checkable buttons.

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
                }
}

The documentation states clearly that Button does have exclusiveGroup property http://doc.qt.io/qt-5/qml-qtquick-controls-button.html#exclusiveGroup-prop. However, when I run the example, I get this error:

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

Hovering mouse over "exclusiveGroup" makes a tooltip show up saying: "Invalid property name exclusiveGroup".

I have Qt 5.9.1 installed. Here's my import statements:

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

What am I doing wrong?

Thanks

Upvotes: 0

Views: 3213

Answers (1)

derM
derM

Reputation: 13711

The reason for your problem is this:

import QtQuick.Controls 1.4
import QtQuick.Controls 2.0

You have a Button in both, but they have a different API.
So at first you import the Button from QtQuick.Controls 1.4. Then you import the Button from QtQuick.Controls 2.0. As QML doesn't know, which one you want to use, it will take the one, you imported the last. If you want to be more specific, on which Button you want to use, you can use named imports

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

Then you can use Buttons from both versions as you like:

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

The documentation you quote is for QtQuick.Controls 1.x, and from there is the imported ExclusiveGroup. So you are trying to mix things from two libraries, that wont work together.

See ButtonGroup for a similar solution for QtQuick.Controls 2.x

For more on the differences and usecases of the both sets of controls read:

Upvotes: 5

Related Questions