在 QAbstractListModel 中,可以通过实现 index() 函数来根据 key 值获取其对应的 index 值。

下面是一个示例代码:

QModelIndex MyListModel::index(int row, int column, const QModelIndex &parent) const
{
    if (!hasIndex(row, column, parent))
        return QModelIndex();

    if (!parent.isValid()) {
        // 根据 row 获取 key 值
        QString key = m_data.keys().at(row);
        // 根据 key 值获取其对应的 index 值
        return createIndex(row, column, (void*)&m_data[key]);
    }

    // 如果 parent 是有效的,则表示它是一个子项,不支持子项
    return QModelIndex();
}

在上面的代码中,我们首先判断要获取的 index 是否存在,如果不存在则返回一个无效的 QModelIndex。

然后,我们判断 parent 是否有效,如果 parent 无效,则表示要获取的是根节点的 index。我们可以通过 row 获取对应的 key 值,然后再根据 key 值获取其对应的 index 值。

如果 parent 有效,则表示要获取的是子项的 index,这里我们不支持子项,直接返回一个无效的 QModelIndex。

需要注意的是,在返回 index 值时,我们使用了 void* 类型的指针来存储数据,这是因为 QModelIndex 类型只能存储 int 类型的数据,而我们需要存储一个指针类型的数据。在使用时,可以通过 qvariant_cast 转换为指针类型。

QAbstractListModel 根据key值获取其index值

原文地址: https://www.cveoy.top/t/topic/bYBR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录