3

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

相应的 QML 代码将 a 嵌套Repeater在 aListView中。ListView正确迭代类型的项目,我可以检索委托中模型实例Inner的项目计数。 我遇到的问题是just 不会迭代模型的实例。在 C++ 模型的方法中使用调试打印输出我看到InnerListView
RepeaterDataInner

  • QML 查询butrowCount()的实例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)
         }
     }
 }

4

1 回答 1

1

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

于 2019-09-16T10:38:25.933 回答