Я пытаюсь использовать QML TreeView для замены обычного QTreeView
. Теперь я хотел добиться поведения, аналогичного QTreeView
, чтобы при каждом двойном щелчке по элементу элемент Text
заменялся на TextField
с возможностью редактирования значений.
Теперь вот что я получил в своем коде QML:
import QtQuick 2.9
import QtQuick.Window 2.3
import QtQuick.Controls 1.4
Window {
visible: true
TreeView {
id: treeView
anchors.fill: parent
TableViewColumn {
title: "Value"
role: "display"
width: 100
delegate: Rectangle {
anchors.fill: parent
Text {
anchors.fill: parent
id: textDisplay
visible: true
text: model.display
}
TextInput {
anchors.fill: parent
id: textEdit
text: model.edit;
visible: false
onAccepted: {
model.edit=textEdit.text
textEdit.visible=false
textDisplay.visible=true
}
}
MouseArea {
anchors.fill: parent
onDoubleClicked: {
textDisplay.visible=false;
textEdit.visible=true;
}
}
}
}
model: itemModel
}
}
После двойного щелчка по значению в QTreeView
textEdit отображается и текст скрыт, но в textEdit нет фокуса, позволяющего изменить значение, и я не могу зафиксировать отредактированное значение с помощью enter. В случае, если я теряю фокус, значение также должно быть принято.
Моя модель itemModel
в основном QStandardItemModel
, и все элементы должны быть доступны для редактирования:
Qt::ItemFlags MyModel::flags(const QModelIndex &index) const
{
Qt::ItemFlags flags=QAbstractItemModel::flags(index);
flags|=Qt::ItemFlag::ItemIsEditable;
return flags;
}
Что мне нужно сделать, чтобы можно было редактировать значения?