Sur cette page

QModelRoleDataSpan Class

La classe QModelRoleDataSpan fournit une portée sur les objets QModelRoleData. Plus d'informations...

En-tête : #include <QModelRoleDataSpan>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core
Depuis : Qt 6.0

Fonctions publiques

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

Description détaillée

Un QModelRoleDataSpan est utilisé comme abstraction sur un tableau d'objets QModelRoleData.

Comme une vue, le QModelRoleDataSpan fournit un petit objet (pointeur et taille) qui peut être transmis aux fonctions qui ont besoin d'examiner le contenu du tableau. Un QModelRoleDataSpan peut être construit à partir de n'importe quelle séquence de type tableau (tableaux simples, QVector, std::vector, QVarLengthArray, et ainsi de suite). En outre, il ne possède pas la séquence, qui doit donc être maintenue en vie plus longtemps que les objets QModelRoleDataSpan qui la référencent.

Contrairement à une vue, QModelRoleDataSpan est une portée, ce qui permet de modifier les éléments sous-jacents.

Le principal cas d'utilisation de QModelRoleDataSpan est de permettre à un modèle de renvoyer les données correspondant à différents rôles en un seul appel.

Pour dessiner un élément à partir d'un modèle, une vue (par l'intermédiaire de ses délégués) demandera généralement plusieurs rôles pour le même index en appelant data() autant de fois que nécessaire :

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

QModelRoleDataSpan permet à une vue de demander les mêmes données en utilisant un seul appel de fonction.

Pour ce faire, la vue doit préparer un tableau approprié d'objets QModelRoleData, chacun étant initialisé avec le rôle à récupérer. Le tableau est ensuite enveloppé dans un objet QModelRoleDataSpan, qui est ensuite transmis à la fonction multiData() d'un modèle.

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.

Les vues sont encouragées à stocker le tableau d'objets QModelRoleData (et, éventuellement, le span correspondant) et à le réutiliser dans les appels ultérieurs au modèle. Cela permet de réduire les allocations de mémoire liées à la création et au renvoi des objets QVariant.

Enfin, étant donné un objet QModelRoleDataSpan, la responsabilité du modèle est de remplir les données correspondant à chaque rôle dans le span. La manière de procéder dépend de la classe de modèle concrète. Voici une esquisse d'une implémentation possible qui itère sur la portée et utilise setData() sur chaque élément :

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);
    }
}

Voir également Programmation Modèle/Vue et QAbstractItemModel::multiData().

Documentation des fonctions membres

[constexpr noexcept] QModelRoleDataSpan::QModelRoleDataSpan()

Construit un QModelRoleDataSpan vide. Sa valeur data() est fixée à nullptr, et sa longueur à zéro.

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

Construit un QModelRoleDataSpan couvrant le conteneur c, qui peut être n'importe quel conteneur contigu d'objets QModelRoleData. Par exemple, il peut s'agir d'un QVector<QModelRoleData>, d'un std::array<QModelRoleData, 10> et ainsi de suite.

Remarque : Le conteneur doit être maintenu en vie tant que cet objet n'a pas été détruit.

Remarque : Cette fonction est noexcept lorsque noexcept(std::data(c)) && noexcept(std::size(c)) est true.

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

Construit un QModelRoleDataSpan s'étendant sur modelRoleData, vu comme un tableau à 1 élément.

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

Construit un QModelRoleDataSpan couvrant le tableau commençant à modelRoleData et de longueur len.

Remarque : le tableau doit être maintenu en vie tant que cet objet n'a pas été détruit.

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

Renvoie un pointeur sur le début de la plage représentée par cet objet.

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

Renvoie un pointeur sur le début de la plage représentée par cet objet.

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

Renvoie les données associées au premier QModelRoleData de l'étendue dont le rôle est égal à role. Si un tel objet QModelRoleData n'existe pas, le comportement est indéfini.

Note : Evitez d'appeler cette fonction du côté du modèle, car un modèle ne peut pas savoir à l'avance quels rôles se trouvent dans un QModelRoleDataSpan donné. Cette fonction convient plutôt aux vues et aux délégués, qui ont le contrôle des rôles dans l'étendue.

Voir aussi QModelRoleData::data().

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

Renvoie un pointeur sur l'élément imaginaire situé un an après la fin de la portée représentée par cet objet.

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

Renvoie la longueur de la portée représentée par cet objet.

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

Renvoie la longueur de la portée représentée par cet objet.

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

Renvoie une référence modifiable à QModelRoleData à la position index dans la portée.

Note : index doit être un index valide pour cette portée (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.