QML中是否存在TreeView的本机数据模型?

时间:2017-04-20 09:28:19

标签: qt qml qtquick2 qtquickcontrols

QT文档暗示QAbstractItemModel的任何实现都可以用于TreeView。

这些模型通常使用C ++,现在很不方便。

那么是否有可以在树视图中使用的原生QML模型?

我可以从C ++设置QStandardItemModel模型,并在qml中使用此模型吗?

2 个答案:

答案 0 :(得分:0)

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);

您还需要模型中的根项目来显示Treeview中的所有内容:

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

现在您可以将它添加到QML TreeView中,如下所示:

  TreeView{
    model: treeViewModel
    rootItem: root

    TableViewColumn {
        role: "display" // is role 0
    }
}

答案 1 :(得分:0)

  

那么是否有可以在树视图中使用的原生QML模型?

目前的QML TreeView示例仍然是只读的静态C ++模型,需要大量的手动编码才能将它们用于动态的任何事情。

我发现两个很好的纯QML示例用于使用QML ListModel和Javascript数组的自定义树视图,例如:

1) Youtube - TreeView component in pure Qt Quick https://gist.github.com/pcdummy/c03845aa9449168b7d24c491ad913fce

2) 来自Eric Gregory的QMLRearrangeableTreeView展示了拖放。我扩展它以使其可编辑,并通过JSON字符串保存/加载结构: QMLRearrangeableTreeView for edit&save