Qt Item角色机制是如何实现的?只是存储在支持角色的类中的某种映射?
最佳答案
项目角色用于检索给定模型索引的不同数据,例如列表模型中的文本、图标、工具提示等。它们的实现方式取决于模型。
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) 的其他操作。
关于c++ - Qt Item角色实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14307917/