【问题标题】:How to reuse a nested listview's delegate?如何重用嵌套列表视图的委托?
【发布时间】:2019-01-01 00:41:56
【问题描述】:

我有一个嵌套列表视图结构,其中委托列表视图将包含另一个列表视图。我希望嵌套列表视图的委托引用自身,因为嵌套列表视图将包含与自身相同类型的项目,但这似乎不起作用。

Component {
    id: subSequenceComponent

    ItemDelegate {
        id: subSequenceItemDelegate
        property var id: edit.id
        ColumnLayout {

            Text{
                text: edit.name
            }

            ListView {
                width: 180; height: 200

                model: items.subModelFromId(subSequenceItemDelegate.id)
                delegate: subSequenceComponent
            }
        }
    }

} 

这行得通:

Component {
id: subSequenceComponent

ItemDelegate {
    id: subSequenceItemDelegate
    property var id: edit.id
    ColumnLayout {

        Text{
            text: edit.name
        }

        ListView {
            width: 180; height: 200

            model: items.subModelFromId(subSequenceItemDelegate.id)
            delegate: Text{
            text: edit.name
            }
        }
    }
}

}

有没有办法重用您所属的同一个委托?

【问题讨论】:

    标签: qt listview delegates qml


    【解决方案1】:

    它可能连接到这个bug。基本上,QML 有一些检查可以防止意外的无限递归,但它们实施得不是特别好,即使在打算嵌套并且没有无限递归危险的情况下也会触发误报。

    如果是这种情况,那么您可以通过使用额外的 Loader 来欺骗检查,该 Loader 将从字符串加载组件,这不会捕获嵌套递归。

    【讨论】:

    • 谢谢,这行得通。最初,我发现加载器无法正常工作,因为包含 ItemDegate 的 qml 文件被封装在 Component 中。我需要确保 QML 文件只包含一个 ItemDelegate 并且我像这样加载了委托:委托:组件{加载器{源:“SubSequenceItemDelegate.qml”}}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2013-10-12
    相关资源
    最近更新 更多