2016-11-22 14 views
1

У меня есть выпадающий в QML в качестве TableViewColummn и я определяю его следующим образом:ComboBox отключить элемент в определенном индексе

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

Вы должны уточнить свой вопрос. Неясно, какой индекс вы имеете в виду - строка таблицы или 'ComboBox'? Чтобы отключить Combobox для указанных строк, вы можете сделать 'ComboBox {enabled: styleData.row! == 2}' – folibis

+0

@folibis Возможно ли это сделать из кода javascript с указанием индекса? – Luca

+0

@folibis Я могу сделать 'enabled = false' в javascript, но это отключает весь компонент, – Luca

ответ

6

Можно ли отключить пункт меню 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 компонента.

+0

Это замечательно! Благодарю. – Luca

 Смежные вопросы

  • Нет связанных вопросов^_^