En esta página

QModelRoleDataSpan Class

La clase QModelRoleDataSpan proporciona un span sobre los objetos QModelRoleData. Más...

Cabecera: #include <QModelRoleDataSpan>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Desde: Qt 6.0

Funciones Públicas

QModelRoleDataSpan()
QModelRoleDataSpan(Container &c)
QModelRoleDataSpan(QModelRoleData &modelRoleData)
QModelRoleDataSpan(QModelRoleData *modelRoleData, qsizetype len)
QModelRoleData *begin() const
QModelRoleData *data() const
QVariant *dataForRole(int role) const
QModelRoleData *end() const
qsizetype length() const
qsizetype size() const
QModelRoleData &operator[](qsizetype index) const

Descripción Detallada

Un QModelRoleDataSpan se utiliza como una abstracción sobre un array de objetos QModelRoleData.

Al igual que una vista, QModelRoleDataSpan proporciona un pequeño objeto (puntero y tamaño) que puede pasarse a funciones que necesitan examinar el contenido del array. Un QModelRoleDataSpan puede construirse a partir de cualquier secuencia de tipo array (arrays planos, QVector, std::vector, QVarLengthArray, etc.). Además, no es propietaria de la secuencia, que por tanto debe mantenerse viva más tiempo que cualquier objeto QModelRoleDataSpan que haga referencia a ella.

A diferencia de una vista, QModelRoleDataSpan es un span, por lo que permite modificaciones en los elementos subyacentes.

El principal caso de uso de QModelRoleDataSpan es hacer posible que un modelo devuelva los datos correspondientes a diferentes roles en una sola llamada.

Para extraer un elemento de un modelo, una vista (a través de sus delegados) generalmente solicitará múltiples roles para el mismo índice llamando a data() tantas veces como sea necesario:

QVariant text = model->data(index, Qt::DisplayRole);
QVariant decoration = model->data(index, Qt::DecorationRole);
QVariant checkState = model->data(index, Qt::CheckStateRole);
// etc.

QModelRoleDataSpan permite a una vista solicitar los mismos datos utilizando una sola llamada a la función.

Esto se consigue haciendo que la vista prepare una matriz adecuada de objetos QModelRoleData, cada uno inicializado con el rol que debe obtenerse. La matriz se envuelve en un objeto QModelRoleDataSpan, que se pasa a la función multiData() del modelo.

std::array<QModelRoleData, 3> roleData = { {
    QModelRoleData(Qt::DisplayRole),
    QModelRoleData(Qt::DecorationRole),
    QModelRoleData(Qt::CheckStateRole)
} };

// Usually, this is not necessary: A QModelRoleDataSpan
// will be built automatically for you when passing an array-like
// container to multiData().
QModelRoleDataSpan span(roleData);

model->multiData(index, span);

// Use roleData[0].data(), roleData[1].data(), etc.

Se recomienda a las vistas que almacenen la matriz de objetos QModelRoleData (y, posiblemente, el span correspondiente) y la reutilicen en llamadas posteriores al modelo. Esto permite reducir las asignaciones de memoria relacionadas con la creación y devolución de objetos QVariant.

Por último, dado un objeto QModelRoleDataSpan, la responsabilidad del modelo es rellenar los datos correspondientes a cada rol en el span. La forma de hacerlo depende de la clase concreta del modelo. Aquí hay un boceto de una posible implementación que itera sobre el span y usa setData() en cada elemento:

void MyModel::multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const
{
    for (QModelRoleData &roleData : roleDataSpan) {
        int role = roleData.role();

        // ... obtain the data for index and role ...

        roleData.setData(result);
    }
}

Véase también Programación Modelo/Vista y QAbstractItemModel::multiData().

Documentación de funciones miembro

[constexpr noexcept] QModelRoleDataSpan::QModelRoleDataSpan()

Construye un QModelRoleDataSpan vacío. Su data() se establecerá en nullptr, y su longitud en cero.

[constexpr noexcept(...)] template <typename Container, QModelRoleDataSpan::if_compatible_container<Container> = true> QModelRoleDataSpan::QModelRoleDataSpan(Container &c)

Construye un QModelRoleDataSpan que abarca el contenedor c, que puede ser cualquier contenedor contiguo de objetos QModelRoleData. Por ejemplo, puede ser un QVector<QModelRoleData>, un std::array<QModelRoleData, 10> y así sucesivamente.

Nota: El contenedor debe mantenerse vivo mientras este objeto no haya sido destruido.

Nota: Esta función es noexcept cuando noexcept(std::data(c)) && noexcept(std::size(c)) es true.

[constexpr noexcept] QModelRoleDataSpan::QModelRoleDataSpan(QModelRoleData &modelRoleData)

Construye un QModelRoleDataSpan que abarca modelRoleData, visto como un array de 1 elemento.

[constexpr] QModelRoleDataSpan::QModelRoleDataSpan(QModelRoleData *modelRoleData, qsizetype len)

Construye un QModelRoleDataSpan que abarca el array comenzando en modelRoleData y con longitud len.

Nota: El array debe mantenerse vivo mientras este objeto no haya sido destruido.

[constexpr noexcept] QModelRoleData *QModelRoleDataSpan::begin() const

Devuelve un puntero al inicio del tramo representado por este objeto.

[constexpr noexcept] QModelRoleData *QModelRoleDataSpan::data() const

Devuelve un puntero al inicio del tramo representado por este objeto.

[constexpr] QVariant *QModelRoleDataSpan::dataForRole(int role) const

Devuelve los datos asociados con el primer QModelRoleData en el span que tiene su rol igual a role. Si tal objeto QModelRoleData no existe, el comportamiento es indefinido.

Nota: Evite llamar a esta función desde el lado del modelo, ya que un modelo no puede saber de antemano qué roles se encuentran en un determinado QModelRoleDataSpan. En cambio, esta función es adecuada para vistas y delegados, que tienen control sobre los roles en el span.

Véase también QModelRoleData::data().

[constexpr noexcept] QModelRoleData *QModelRoleDataSpan::end() const

Devuelve un puntero al elemento imaginario pasado el final del tramo representado por este objeto.

[constexpr noexcept] qsizetype QModelRoleDataSpan::length() const

Devuelve la longitud del tramo representado por este objeto.

[constexpr noexcept] qsizetype QModelRoleDataSpan::size() const

Devuelve la longitud del tramo representado por este objeto.

[constexpr] QModelRoleData &QModelRoleDataSpan::operator[](qsizetype index) const

Devuelve una referencia modificable a QModelRoleData en la posición index del span.

Nota: index debe ser un índice válido para este span (0 <= index < size()).

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.