从QML访问嵌套的QAbstractListModel

时间:2015-07-25 16:39:44

标签: qml qt5 hierarchical-data nested qabstractlistmodel

我在C ++中有一个分层(嵌套)QAbstractListModel,即Outer模型的项是Inner模型的实例,类Inner的项是一些QObject个派生Data个实例。 Outer具有submodel角色,可以访问Inner个项目。

相应的QML代码在Repeater内嵌套ListViewListView正确迭代Inner类型的项目,我可以检索Inner代表中ListView个模型实例的项目数。
我遇到的问题是Repeater不会迭代Data模型的Inner个实例。 在C ++模型的方法中使用调试打印输出我看到了

  • QML查询rowCount()
  • Inner个实例
  • QML永远不会在data()
  • 的实例上调用Inner

QML代码如下所示:

import QtQuick 2.0
import QtQuick.Controls 1.3
import NestedModels 1.0  as Models

ScrollView {
    width: 1980; height:600
    Component {
        id: inner
        Item {
            Text {
                x:1000;	font.pointSize: 9
                text: "inner " + model.name
            }
        }
    }

    Component {
        id: outer
        Item {
            height: 40
            property var innerModel: model.submodel
            Text {
                font.pointSize: 9
                text: "outer " + model.objectName
                + ": inner " +  innerModel
            }

            Repeater {
                model: innerModel
                delegate: inner
            }
        }
    }

    ListView {
         Models.OuterModel { id: outerModel }
         model: outerModel
         delegate: outer
         Text {
             x: 200; y: 400;	font.pointSize: 9
             text: outerModel.objectName + ": " + outerModel.count + " rows. " + outerModel.getItem(0)
         }
     }
 }

1 个答案:

答案 0 :(得分:1)

尝试使用单独的qml文件OuterDelegate.qml 我遇到了同样的问题,问题是您将内部模型错误地传递给中继器