ComboBox禁用特定索引处的项目

时间:2016-11-22 12:37:56

标签: qt qml qtquick2 qtquickcontrols

我在TableViewColummn的qml中有一个组合框,我将其定义如下:

import QtQuick 2.3
import QtQuick.Window 2.2
import QtQuick.Layouts 1.1
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4


ListModel {
    id: comboModel

    ListElement {
        text: ""
        Index: -1
        Dims: -1
    }
}


TableViewColumn {
    id: imageTypeList
    role: "ImageType"
    title: "Image Type"
    width: 100
    delegate: Rectangle {
        ComboBox {
            anchors.verticalCenter: parent.verticalCenter
            anchors.margins: 2
            model: comboModel
            onActivated : {
                console.log(comboModel.get(index).Index)
            }
        }
    }
}

我的问题是,如果可以disable给出ComboBox项目索引的组合框菜单项。所以,我不想更改基础模型,但实际上只是禁用该项目而不允许用户选择它。

1 个答案:

答案 0 :(得分:7)

  

是否可以禁用ComboBox菜单项...并且不允许用户选择它?

当然,这是可能的。

要使用Quick Controls 2执行此操作,您需要以这种方式创建ComboBox delegate

import QtQuick 2.6
import QtQuick.Window 2.2
import QtQuick.Controls 2.0

Window {
    visible: true
    width: 640
    height: 200
    title: qsTr("Let's disable some items in ComboBox")

    ComboBox {
        id: control
        currentIndex: 0
        anchors.centerIn: parent

        model: [
            { text: "Enabled item.", enabled: true },
            { text: "Supposed to be disabled. Can't click on it.", enabled: false},
            { text: "Last, but enabled item.", enabled: true}
        ]
        width: 500
        textRole: "text"

        delegate: ItemDelegate {
            width: control.width
            text: modelData.text
            font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal
            highlighted: ListView.isCurrentItem
            enabled: modelData.enabled
        }
    }
}

如果您使用的是Quick Controls 1,则应提供自己的ComboBox组件实现。