如何实现Qt Item角色机制?只是某种地图存储在支持角色的类中?
答案 0 :(得分:2)
项角色用于检索给定模型索引的不同数据,例如列表模型中的文本,图标,工具提示等。它们的实施方式取决于模型。
QStandardItemModel确实在内部使用QMap(角色值)。
对于自定义模型,通常使用if或switch语句为不同的角色返回不同的数据:
QVector<SomeObject> m_data;
QVariant SomeListModel::data( const QModelIndex& index, int role ) const {
const SomeObject& so = m_data[index.row()];
switch ( role ) {
case Qt::DisplayRole:
return so.name();
case Qt::DecorationRole:
return so.icon();
case Qt::ToolTipRole:
return so.details();
case SomeObjectRole: // Custom role, SomeObjectRole=Qt::UserRole
return QVariant::fromValue<SomeObject>( so );
default:
break;
}
return QVariant();
}
快速索引()和数据()方法对于获得高效模型非常重要,因此请避免地图查找以及与项目数量相关的非O(1)的所有其他内容(此处为m_data的大小)。