Как сделать TableView или TreeView с делегатом ячейки, выбранным в соответствии со значением другой ячейки?
Идея состоит в том, чтобы создать редактор свойств, подобный следующему:
Я пробовал различные из перечисленных здесь подходов: https://doc.qt.io/qt-5/qml-qt-labs-qmlmodels-tablemodel.html
Однако DelegateChooser
можно выбирать только на основе столбца или на основе roleValue , Ни один из них не будет работать для приведенного выше варианта использования.
Модель может выглядеть примерно так:
model: TableModel {
TableModelColumn { display: "name" }
TableModelColumn { display: "value" }
rows: [
{
name: "Name",
type: "string",
value: "Alfred"
},
{
name: "Amount",
type: "float",
value: 3.75
},
{
name: "Enabled",
type: "bool",
value: true
},
{
name: "Count",
type: "int",
value: 2
},
{
name: "Color",
type: "color",
value: "#3300ff"
}
]
}
, чтобы показать представление таблицы с двумя столбцами, где делегат во втором столбце выбирается в соответствии со значением type .
Даже при выборе роли name (что является неоптимальным решением, поскольку будет много свойств каждого типа, и каждый DelegateChoice
должен соответствовать нескольким именам) не работает:
delegate: DelegateChooser {
role: "name"
DelegateChoice {
roleValue: "Enabled"
delegate: CheckBox {
checked: model.display
onToggled: model.display = checked
}
}
DelegateChoice {
roleValue: "Count"
delegate: SpinBox {
value: model.display
onValueModified: model.display = value
}
}
DelegateChoice {
delegate: TextField {
text: model.display
selectByMouse: true
implicitWidth: 140
onAccepted: model.display = text
}
}
}