qt模型中的角色是什么以及setRoleNames()的作用是什么?

kha*_*vah 5 c++ qt roles qml

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

qt模型中的角色是什么?

Rei*_*ica 8

角色只是访问模型数据时使用的附加选择器.这取决于模型和关于如何具体解释角色的观点.当您使用模型时,您必须确定使用哪些角色来记住模型的行为.通过角色,您可以将各种属性附加到每个数据项.

让我们看一个具体的例子.该QStringListModel忽略所有角色,但EditRoleDisplayRole.如果使用任何其他角色,则忽略数据访问操作.您可以使用任一角色设置字符串,并且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()以返回哈希.当然,所说的哈希应该包含displayedit角色!在Qt 4中,您需要使用,setRoleNames()roleNames()不是虚拟.

我在另一个答案中提供了一个完整的例子.