2017-07-20 87 views
0

我無法將ExclusiveGroup分配給我的可選按鈕。QML按鈕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 

我在做什麼錯?

感謝

回答

3

原因你的問題是這樣的:

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要使用,就可以使用命名進口

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

一個類似的解決方案的詳細的兩組控制的差異和usecases參見ButtonGroup讀:

+0

這就是奇怪。但如果我需要2.0中定義的屬性,我該怎麼辦?沒有一種方法可以使用不同版本中定義的所有按鈕屬性? – Davita

+0

謝謝,ButtonGroup做到了,我接受了你的答案。然而,我仍然對版本控制感到困惑。如果你能幫我清理一下,我會非常感激:) – Davita