角色只是访问模型数据时使用的附加选择器.这取决于模型和关于如何具体解释角色的观点.当您使用模型时,您必须确定使用哪些角色来记住模型的行为.通过角色,您可以将各种属性附加到每个数据项.
让我们看一个具体的例子.该QStringListModel忽略所有角色,但EditRole和DisplayRole.如果使用任何其他角色,则忽略数据访问操作.您可以使用任一角色设置字符串,并且dataChanged()信号将指示使用的角色.您可以使用任一角色访问该字符串.这是设计使用并且可用于破坏结合链.
角色的名称作为模型的属性公开.例如,如果要将TextEdit委托中的a 绑定到模型,则可以执行以下操作:
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
}
}
Run Code Online (Sandbox Code Playgroud)
Qt提供的C++项目模型按名称定义显示和编辑角色.如果您有自定义模型并想要提供其他名称,那么在Qt 5中您应该重新实现QAbstractItemModel::roleNames()以返回哈希.当然,所说的哈希应该包含display和edit角色!在Qt 4中,您需要使用,setRoleNames()而roleNames()不是虚拟.
我在另一个答案中提供了一个完整的例子.
| 归档时间: |
|
| 查看次数: |
6721 次 |
| 最近记录: |