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

qt模型中的角色是什么?setRoleNames()做什么? 在QML中,我必须使用某种C++ QT模型。我已经有了QStandardItemModel,但由于所谓的setRoleNames(),它在QML中不起作用。我一直在寻找一些角色的解释,但我似乎找不到。我在qml()中找到了使用QStandardItemMOdel的某种解决方案,但它使用“角色”,所以我不理解它是如何工作的,c++,qt,qml,roles,C++,Qt,Qml,Roles,qt模型中的角色是什么?角色只是访问模型数据时使用的附加选择器。具体如何解释角色取决于模型和视图。当您使用模型时,您必须决定使用哪些角色,并牢记模型的行为。角色允许您将各种属性附加到每个数据项 让我们看一个具体的例子。QStringListModel忽略所有角色,但EditRole和DisplayRole除外。如果使用任何其他角色,将忽略数据访问操作。您可以使用任一角色设置字符串,所使用的角色将由dataChanged()信号指示。您可以使用任一角色访问该字符串。这是经过设计的,旨在用于断开绑定

qt模型中的角色是什么?

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

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

角色的名称作为模型的属性公开。例如,如果要将代理中的
文本编辑
绑定到模型,可以执行以下操作:

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++项目模型定义了按名称显示和编辑角色。如果您有一个自定义模型并希望提供其他名称,那么在Qt5中,您应该重新实现
qabstractemmodel::roleNames()
,以返回哈希。当然,所说的散列应该包含
显示
编辑
角色!在Qt4中,您需要使用
setRoleNames()
,因为
roleNames()
不是虚拟的

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