Qt Item角色实现

时间:2013-01-13 20:41:26

标签: c++ qt

如何实现Qt Item角色机制?只是某种地图存储在支持角色的类中?

1 个答案:

答案 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的大小)。