Qt Item 角色机制是如何实现的?只是存储在支持角色的类中的某种映射?
问问题
336 次
1 回答
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();
}
快速的 index() 和 data() 方法对于获得高效的模型很重要,因此要避免映射查找以及与项目数量(此处为 m_data 的大小)相关的其他所有不是 O(1) 的事情。
于 2013-01-13T23:10:11.130 回答