QML TreeView изменение делегата при редактировании - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь использовать 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;
}

Что мне нужно сделать, чтобы можно было редактировать значения?

...