QML TreeView更改委托在编辑

时间:2019-01-07 07:02:37

标签: qt treeview qml qtquick2 qabstractitemmodel

我正在尝试使用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;
}

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

0 个答案:

没有答案