QModelRoleDataSpan Class
Die Klasse QModelRoleDataSpan bietet eine Spanne über QModelRoleData Objekte. Mehr...
Kopfzeile: | #include <QModelRoleDataSpan> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
Seit: | Qt 6.0 |
Öffentliche Funktionen
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 |
Detaillierte Beschreibung
Ein QModelRoleDataSpan wird als Abstraktion über ein Array von QModelRoleData Objekten verwendet.
Wie eine Ansicht bietet QModelRoleDataSpan ein kleines Objekt (Zeiger und Größe), das an Funktionen übergeben werden kann, die den Inhalt des Arrays untersuchen müssen. Ein QModelRoleDataSpan kann aus jeder Array-ähnlichen Sequenz (einfache Arrays, QVector, std::vector, QVarLengthArray, usw.) erstellt werden. Außerdem ist sie nicht Eigentümerin der Sequenz, die daher länger am Leben gehalten werden muss als alle QModelRoleDataSpan-Objekte, die auf sie verweisen.
Im Gegensatz zu einer Sicht ist QModelRoleDataSpan eine Spanne und erlaubt daher Änderungen an den zugrunde liegenden Elementen.
Der Hauptanwendungsfall von QModelRoleDataSpan besteht darin, dass ein Modell die Daten, die verschiedenen Rollen entsprechen, in einem einzigen Aufruf zurückgeben kann.
Um ein Element aus einem Modell zu zeichnen, wird eine Ansicht (über ihre Delegierten) im Allgemeinen mehrere Rollen für denselben Index anfordern, indem sie data()
so oft wie nötig aufruft:
QVariant text = model->data(index, Qt::DisplayRole); QVariant decoration = model->data(index, Qt::DecorationRole); QVariant checkState = model->data(index, Qt::CheckStateRole); // etc.
QModelRoleDataSpan ermöglicht es einer Ansicht, dieselben Daten mit nur einem Funktionsaufruf anzufordern.
Dies wird dadurch erreicht, dass die Ansicht ein geeignetes Array von QModelRoleData Objekten vorbereitet, die jeweils mit der abzurufenden Rolle initialisiert werden. Das Array wird dann in ein QModelRoleDataSpan-Objekt verpackt, das dann an die Funktion multiData()
des Modells übergeben wird.
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.
Sichten werden ermutigt, das Array von QModelRoleData Objekten (und möglicherweise den entsprechenden Span) zu speichern und in nachfolgenden Aufrufen des Modells wieder zu verwenden. Auf diese Weise können die mit der Erstellung und Rückgabe von QVariant Objekten verbundenen Speicherzuweisungen reduziert werden.
Bei einem QModelRoleDataSpan-Objekt besteht die Aufgabe des Modells schließlich darin, die Daten für jede Rolle im Bereich auszufüllen. Wie dies geschieht, hängt von der konkreten Modellklasse ab. Hier ist eine Skizze einer möglichen Implementierung, die über die Spanne iteriert und setData()
für jedes Element verwendet:
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); } }
Siehe auch Model/View Programming und QAbstractItemModel::multiData().
Dokumentation der Mitgliedsfunktionen
[constexpr noexcept]
QModelRoleDataSpan::QModelRoleDataSpan()
Konstruiert eine leere QModelRoleDataSpan. Sein data() wird auf nullptr
und seine Länge auf Null gesetzt.
[constexpr noexcept(...)]
template <typename Container, QModelRoleDataSpan::if_compatible_container<Container> = true> QModelRoleDataSpan::QModelRoleDataSpan(Container &c)
Konstruiert eine QModelRoleDataSpan, die sich über den Container c erstreckt, der ein beliebiger zusammenhängender Container von QModelRoleData Objekten sein kann. Es kann sich beispielsweise um einen QVector<QModelRoleData>
, einen std::array<QModelRoleData, 10>
usw. handeln.
Hinweis: Der Container muss so lange am Leben erhalten werden, wie dieses Objekt nicht zerstört worden ist.
Hinweis: Diese Funktion ist noexcept, wenn noexcept(std::data(c)) && noexcept(std::size(c))
true
ist.
[constexpr noexcept]
QModelRoleDataSpan::QModelRoleDataSpan(QModelRoleData &modelRoleData)
Konstruiert einen QModelRoleDataSpan, der sich über modelRoleData erstreckt und als 1-Element-Array betrachtet wird.
[constexpr]
QModelRoleDataSpan::QModelRoleDataSpan(QModelRoleData *modelRoleData, qsizetype len)
Konstruiert ein QModelRoleDataSpan, das sich über das Array erstreckt, beginnend bei modelRoleData und mit der Länge len.
Hinweis: Das Array muss so lange aufrechterhalten werden, wie dieses Objekt nicht zerstört wurde.
[constexpr noexcept]
QModelRoleData *QModelRoleDataSpan::begin() const
Gibt einen Zeiger auf den Anfang der durch dieses Objekt dargestellten Spanne zurück.
[constexpr noexcept]
QModelRoleData *QModelRoleDataSpan::data() const
Gibt einen Zeiger auf den Anfang der durch dieses Objekt dargestellten Spanne zurück.
[constexpr]
QVariant *QModelRoleDataSpan::dataForRole(int role) const
Gibt die Daten zurück, die mit dem ersten QModelRoleData in der Spanne verbunden sind, dessen Rolle gleich role ist. Wenn ein solches QModelRoleData Objekt nicht existiert, ist das Verhalten undefiniert.
Hinweis: Vermeiden Sie es, diese Funktion von der Seite des Modells aus aufzurufen, da ein Modell unmöglich im Voraus wissen kann, welche Rollen sich in einem bestimmten QModelRoleDataSpan befinden. Diese Funktion ist stattdessen für Views und Delegates geeignet, die die Kontrolle über die Rollen im Span haben.
Siehe auch QModelRoleData::data().
[constexpr noexcept]
QModelRoleData *QModelRoleDataSpan::end() const
Gibt einen Zeiger auf das imaginäre Element zurück, das ein Stück hinter dem Ende der durch dieses Objekt dargestellten Spanne liegt.
[constexpr noexcept]
qsizetype QModelRoleDataSpan::length() const
Gibt die Länge der durch dieses Objekt dargestellten Spanne zurück.
[constexpr noexcept]
qsizetype QModelRoleDataSpan::size() const
Gibt die Länge der durch dieses Objekt dargestellten Spanne zurück.
[constexpr]
QModelRoleData &QModelRoleDataSpan::operator[](qsizetype index) const
Gibt einen veränderbaren Verweis auf QModelRoleData an der Position index in der Spanne zurück.
Hinweis: index muss ein gültiger Index für diesen Bereich sein (0 <= index < size()).
© 2025 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.