首页 > 解决方案 > 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
    }
}

双击QTreeViewtextEdit 显示中的值后,文本被隐藏,但 textEdit 中既没有焦点允许更改值,也无法使用 enter 提交编辑的值。万一我失去了注意力,这个值也应该被接受。

我的模型itemModel基本上是 aQStandardItemModel并且所有项目都应该是可编辑的:

Qt::ItemFlags MyModel::flags(const QModelIndex &index) const
{
    Qt::ItemFlags flags=QAbstractItemModel::flags(index);
    flags|=Qt::ItemFlag::ItemIsEditable;
    return flags;
}

为了允许编辑值,我必须做什么?

标签: qttreeviewqmlqtquick2qabstractitemmodel

解决方案


推荐阅读