【问题标题】:What are roles in qt model and what does setRoleNames() do?qt 模型中的角色是什么,setRoleNames() 有什么作用?
【发布时间】:2013-09-09 14:16:51
【问题描述】:

我必须在 qml 中使用某种 c++ qt 模型。我已经有了 QStandardItemModel,但由于所谓的 setRoleNames(),它在 QML 中不起作用。我一直在寻找角色的一些解释,但我似乎找不到。我找到了某种在 qml (here) 中使用 QStandardItemMOdel 的解决方案,但它使用“角色”,所以我不明白它是如何工作的。

qt 模型中的角色是什么?

【问题讨论】:

    标签: c++ qt qml roles


    【解决方案1】:

    角色只是访问模型数据时使用的附加选择器。如何具体解释角色取决于模型和视图。当您使用模型时,您必须决定使用哪些角色,同时牢记模型的行为。这些角色让您可以将各种属性附加到每个数据项。

    让我们看一个具体的例子。 QStringListModel 忽略除EditRoleDisplayRole 之外的所有角色。如果您使用任何其他角色,则数据访问操作将被忽略。您可以使用任一角色设置字符串,所使用的角色将由dataChanged() 信号指示。您可以使用任一角色访问字符串。这是设计使然,旨在用于断开绑定链。

    角色名称作为模型的属性公开。例如。如果要将委托中的TextEdit 绑定到模型,可以执行以下操作:

    delegate: Component {
        TextInput {
            id: editor
            text: edit // show the "edit" role of the model, to break the binding loop
            onTextChanged: model.display = text // set the display role of the model
        }
    }
    

    Qt 提供的 C++ 项目模型按名称定义显示和编辑角色。如果您有自定义模型并想提供其他名称,则在 Qt 5 中您应该重新实现 QAbstractItemModel::roleNames() 以返回哈希值。当然,所述哈希应该包含displayedit 角色!在 Qt 4 中,您需要改用 setRoleNames(),因为 roleNames() 不是虚拟的。

    我在another answer 中提供了一个完整的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-08
      • 2010-11-07
      • 1970-01-01
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-13
      相关资源
      最近更新 更多