gpt4 book ai didi

qt - 其中 'index'属性被定义,因为Repeater用于实例化一个项目数组,每个项目都可以访问索引

转载 作者:行者123 更新时间:2023-12-02 20:09:45 24 4
gpt4 key购买 nike

我猜index是一个附加属性,但它在哪里定义以及为什么访问index不像ListView.isCurrentItem

来自官方文档,description of delegate property of Repeater :

Delegates are exposed to a read-only index property that indicates the index of the delegate within the repeater.

我更困惑了。为什么委托(delegate)会暴露给属性?通过什么操作会发生这种情况?

最佳答案

index 不是附加属性,它是上下文属性。

由于 Repeater 正在实例化委托(delegate)本身,因此它可以在执行此操作时提供自定义上下文。

在此上下文中,您有 index、模型的每个角色的属性(如果是没有角色的模型,则为 modelData)和 model 包含所有前面提到的属性的对象属性。model 对象能够使用更限定的名称访问其他属性,以避免阴影。例如,如果您的源模型具有 text 角色,并且您的委托(delegate)具有 text 属性,则执行 text: text 不会走得太远。要解决此问题,您可以执行 text: model.text

总而言之,您的委托(delegate)可以访问这些上下文属性:

对于没有角色的模型(QStringListQObjectList、JS 数组、整数...):

  • 索引
  • 模型数据
  • 型号
    • .index
    • .modelData

对于具有角色的模型(c++ QAbstractListModelListModel,...):

  • 索引
  • 角色1
  • 角色2
  • ...
  • 型号
    • .index
    • .role1
    • .role2
    • ...

为什么 ListView 使用附加属性(例如 ListView.isCurrentItem)而不是上下文属性,是因为 ListView 不直接实例化其委托(delegate)。它在内部使用QQmlDelegateModel(Repeater也使用它)。 QQmlDelegateModel 公开索引和角色上下文属性,但它不知道 ListView 特定属性,因此 ListView 必须公开它们之后通过附加属性。

关于qt - 其中 'index'属性被定义,因为Repeater用于实例化一个项目数组,每个项目都可以访问索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53853533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com