QT文档暗示QAbstractItemModel的任何实现都可以用于TreeView。
这些模型通常使用C ++,现在很不方便。
那么是否有可以在树视图中使用的原生QML模型?
我可以从C ++设置QStandardItemModel模型,并在qml中使用此模型吗?
答案 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 TreeView示例仍然是只读的静态C ++模型,需要大量的手动编码才能将它们用于动态的任何事情。那么是否有可以在树视图中使用的原生QML模型?
我发现两个很好的纯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