QModelRoleDataSpan Class
La classe `QModelRoleDataSpan` fournit une plage sur les objets ` QModelRoleData `. En savoir plus...
| 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 sert d'abstraction sur un tableau d'objets de type « QModelRoleData ».
À l’instar d’une vue, QModelRoleDataSpan fournit un petit objet (pointeur et taille) pouvant être transmis à des fonctions devant 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, etc.). De plus, il ne possède pas la séquence, qui doit donc être conservée plus longtemps que n'importe quel objet QModelRoleDataSpan la référençant.
Contrairement à une vue, QModelRoleDataSpan est un « span » ; il permet donc 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 extraire un élément 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 à l’aide d’un seul appel de fonction.
Pour ce faire, la vue prépare un tableau adapté d'objets ` QModelRoleData `, chacun initialisé avec le rôle à récupérer. Ce tableau est ensuite encapsulé dans un objet `QModelRoleDataSpan`, qui est ensuite transmis à la fonction ` multiData() ` du 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.Il est recommandé aux vues de stocker le tableau d’objets ` QModelRoleData ` (et, éventuellement, le `span` correspondant) et de le réutiliser lors des appels suivants au modèle. Cela permet de réduire les allocations de mémoire liées à la création et au renvoi d’objets ` QVariant `.
Enfin, étant donné un objet `QModelRoleDataSpan`, le modèle a pour responsabilité de remplir les données correspondant à chaque rôle dans le span. La manière dont cela est effectué dépend de la classe de modèle concrète. Voici une ébauche d’une implémentation possible qui parcourt le span 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 sur les fonctions membres
[constexpr noexcept] QModelRoleDataSpan::QModelRoleDataSpan()
Construit un objet `QModelRoleDataSpan` vide. Sa propriété ` data()` sera définie sur ` nullptr`, et sa longueur sur zéro.
[constexpr noexcept(...)] template <typename Container> requires if_compatible_container<Container> QModelRoleDataSpan::QModelRoleDataSpan(Container &c)
Crée un objet `QModelRoleDataSpan` couvrant le conteneur ` c`, qui peut être n'importe quel conteneur contigu d'objets de type ` QModelRoleData `. Il peut s'agir, par exemple, d'un ` QVector<QModelRoleData>`, d'un ` std::array<QModelRoleData, 10> `, etc.
Remarque : le conteneur doit rester actif tant que cet objet n’a pas été détruit.
Remarque : cette fonction est de type `noexcept` lorsque ` noexcept(std::data(c)) && noexcept(std::size(c)) ` est de type ` true`.
[constexpr noexcept] QModelRoleDataSpan::QModelRoleDataSpan(QModelRoleData &modelRoleData)
Crée un objet `QModelRoleDataSpan` couvrant l'modelRoleData, considéré comme un tableau à un élément.
[constexpr] QModelRoleDataSpan::QModelRoleDataSpan(QModelRoleData *modelRoleData, qsizetype len)
Crée un objet `QModelRoleDataSpan` couvrant le tableau à partir de l'modelRoleData et d'une longueur de ` len`.
Remarque : le tableau doit rester actif tant que cet objet n’a pas été détruit.
[constexpr noexcept] QModelRoleData *QModelRoleDataSpan::begin() const
Renvoie un pointeur vers le début de la plage représentée par cet objet.
[constexpr noexcept] QModelRoleData *QModelRoleDataSpan::data() const
Renvoie un pointeur vers 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 objet « QModelRoleData » de la portée dont le rôle est égal à « role ». Si un tel objet « QModelRoleData » n'existe pas, le comportement est indéfini.
Remarque : évitez d’appeler cette fonction depuis le modèle, car celui-ci ne peut en aucun cas savoir à l’avance quels rôles sont présents dans un « QModelRoleDataSpan » donné. Cette fonction est plutôt adaptée aux vues et aux délégués, qui ont le contrôle sur les rôles de la portée.
Voir également QModelRoleData::data().
[constexpr noexcept] QModelRoleData *QModelRoleDataSpan::end() const
Renvoie un pointeur vers l'élément imaginaire situé immédiatement après la fin de l'intervalle représenté 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 à l'QModelRoleData situé à la position index dans le span.
Remarque : index doit être un index valide pour cette balise 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.