Есть ли собственная модель данных из TreeView в QML?

Документ QT подразумевал, что любая реализация QAbstractItemModel может использоваться для TreeView.

Эти модели обычно на C++, что пока неудобно.

Итак, существует ли собственная модель QML, которую можно использовать в дереве?

Могу ли я установить модель QStandardItemModel из C++ и использовать эту модель в qml?


person My_Cat_Jessica    schedule 20.04.2017    source источник
comment
Не то, что я знаю о. Но, возможно, это поможет вам: stackoverflow.com/a/33505913/2056452 (особенно ссылка на пример документации) Также помните о комментарии к нему.   -  person derM    schedule 20.04.2017
comment
На данный момент QML не имеет собственной модели дерева, вам нужно реализовать ее самостоятельно, используя QStandardItemModel. Вот простой пример, как это сделать.   -  person folibis    schedule 20.04.2017


Ответы (2)


Справочник по QStandardItemModel дает пример того, как использовать его для TreeView:

QStandardItemModel model;
QStandardItem *parentItem = model.invisibleRootItem();
for (int i = 0; i < 4; ++i) {
    QStandardItem *item = new QStandardItem(QString("item %0").arg(i));
    parentItem->appendRow(item);
    parentItem = item;
}

Рядом с этим вы можете добавить модель в QML со следующим:

view.rootContext.setContextProperty("treeViewModel", model);

Вам также нужен корневой элемент из модели, чтобы показать все в дереве:

view.rootContext.setContextProperty("root", model.indexFromItem(model.invisibleRootItem()));

Теперь вы можете добавить его в свой QML TreeView следующим образом:

  TreeView{
    model: treeViewModel
    rootItem: root

    TableViewColumn {
        role: "display" // is role 0
    }
}
person Llamma    schedule 18.01.2018

Итак, существует ли собственная модель QML, которую можно использовать в дереве?

Все еще «нет» в 2018 году. Текущие примеры QML TreeView по-прежнему являются статическими моделями C++ только для чтения, которые требуют много ручного кодирования, чтобы использовать их для чего-либо динамического.

Я нашел два хороших чистых примера QML для пользовательских древовидных представлений, которые используют массивы QML ListModel и Javascript, например:

1) Youtube — компонент TreeView в чистом Qt Quick https://gist.github.com/pcdummy/c03845aa9449168b7d24c491ad913fce

2) QMLRarrangeableTreeView от Эрика Грегори, который демонстрирует перетаскивание. Я расширил его, чтобы сделать его доступным для редактирования, и сохранить/загрузить структуру с помощью строки JSON: QMLRearrangeableTreeView для редактирования и сохранения

person Oliver Heggelbacher    schedule 13.06.2018