qt - QML TreeView 在编辑时更改委托
问题描述
我正在尝试使用 QML TreeView 来替换普通的QTreeView
. 现在,我想实现与 类似的行为QTreeView
,以便在每次双击一个项目时,该Text
元素应替换为TextField
允许编辑值的 with。
现在,这就是我到目前为止在 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
基本上是 aQStandardItemModel
并且所有项目都应该是可编辑的:
Qt::ItemFlags MyModel::flags(const QModelIndex &index) const
{
Qt::ItemFlags flags=QAbstractItemModel::flags(index);
flags|=Qt::ItemFlag::ItemIsEditable;
return flags;
}
为了允许编辑值,我必须做什么?
解决方案
推荐阅读
- meshlab - 有没有办法保存/导出meshlab中生成的曲率方向?
- geometry - Sweep Line Polygon triangulation: How to find edge left to current vertex?
- sql - 像通配符一样应用更大或更小的 Varchar 值
- javascript - $(...).sortable 不是函数
- google-cloud-platform - Dataflow 如何执行并行处理?
- match - 为什么在 `comb` 中多次使用 `<( )>` 标记的行为不符合预期?
- c# - 将 C# 模板添加到 XAML 代码。我该如何进行绑定?
- javascript - 不确定如何使此代码与本机兼容
- list - Prolog:交换列表错误中的两个指定索引元素
- python - 有没有一种方法可以从医学 MeSH 数据中使用 sparql 获取数据?