我正在尝试使用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;
}
为了允许编辑值我必须做什么?