c++ - Qt Item角色实现

标签 c++ qt

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/

相关文章:

c++ - 正确指定旋转约束?

c++ - 这些程序叫什么?目的是什么?

c++ - XRender 创建离屏图片

linux - Linux 上 Qt Creator 中的 UTF-8

c++ - 如何将 __stdcall dll 与未修饰的导出链接到 __cdecl 二进制文件中?

QTextEdit设置固定行高、段落间距

c++ - 数组转换指导

c++ - 从文件中使用 C++ 中的分词器?

c++ - 如何防止非事件 QMdiSubWindows 最大化

c++ - 如何确定 QAction 的来源?