【问题标题】:how to append data to a model for a treeview in qml如何将数据附加到 qml 中树视图的模型
【发布时间】:2017-03-01 10:44:46
【问题描述】:

我有 2 个 qml 表格视图。当我单击第一个时,我从所选行中获取一个 id,然后我根据该 id 过滤第二个表。 在 qml 我这样做(伪代码):

TableView {
    .....
    onclick: {
       var id = table1model.getid(currentIndex)
       table2.model.clear
       for(index in sourceModel) {
           if (condition()) {
               table2.model.append(index)
            }//end if
        }//end for
    }//end onclick
}//end table1

TableView {
    id: table2
    ....
}

问题是即使将一些项目添加到模型中,table2 中也不会显示任何内容。我可以将来自另一个模型的索引附加到模型(它们具有相同的结构,实际上 table2 模型是在上下文中注册的 sourceModel 的子集)?

【问题讨论】:

  • 嗨,欢迎来到 StackOverflow。为了帮助我们帮助您,尽可能提供minimal, complete and verifiable example 非常重要。因此,请阅读链接文档,并以符合 mcve 要求的形式向我们提供您尝试过的代码(作为真正的 QML,而不是伪代码)。我看到,你花了很长时间来格式化代码,但使用推荐的方式更容易(甚至格式化更漂亮)。请参阅我的编辑或here,了解如何正确格式化。
  • 谢谢。我将使用真实示例进行更新,但目前我的工作不在这台计算机上。基本上我的主要问题是是否可以从另一个模型附加到模型索引。
  • 我建议对第二个视图使用过滤器代理模型,该模型根据第一个模型提供的标准进行过滤,或者让两个模型处理相同的数据,其中一个模型只显示子集。在这两种情况下,您的 QML 代码都不需要处理任何数据处理,只需将过滤条件传递给第二个模型

标签: qt qml


【解决方案1】:

您应该附加模型项,而不仅仅是索引。索引只是一个数字。

var obj = table1.model.get(index);
table2.model.append(obj);

前提是两个表使用相同的结构。

但要获得详细答案,您必须提供 mcve,正如 @derM 已经注意到的那样。

【讨论】:

  • 谢谢。我会用具体的细节更新我的帖子。
  • 但是我看到 QAbstractModelItem 没有方法 get(index)。我应该实现一个 get 方法并将其设为 Q_INVOKABLE?
  • index 在我的例子中是一个 QModelIndex,而不是一个整数。
  • 好的,您没有提供有关您的模型的信息。您还必须决定使用什么视图 - TreeView(如问题标题)或 TableView(如代码)。我建议您根据 mcve 创建新问题,因为@derM 注意到您是否真的想得到答案。
猜你喜欢
  • 1970-01-01
  • 2016-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 2018-12-05
相关资源
最近更新 更多