【问题标题】:Is there a native data model from TreeView in QML?QML 中是否有来自 TreeView 的本机数据模型?
【发布时间】:2017-04-20 09:28:18
【问题描述】:

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

这些模型通常使用 C++,目前不方便。

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

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

【问题讨论】:

标签: qt qml qtquick2 qtquickcontrols


【解决方案1】:

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
    }
}

【讨论】:

    【解决方案2】:

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

    在 2018 年仍然“不”。当前的 QML TreeView 示例仍然是只读的静态 C++ 模型,需要大量手动编码才能将它们用于任何动态。

    我为使用 QML ListModel 和 Javascript 数组的定制树视图找到了两个不错的纯 QML 示例,例如:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-24
      • 2021-06-14
      • 1970-01-01
      相关资源
      最近更新 更多