Auf dieser Seite

QModelRoleDataSpan Class

Die Klasse „QModelRoleDataSpan“ stellt einen Bereich über „ QModelRoleData “-Objekte bereit. Mehr...

Header: #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

Ausführliche Beschreibung

Ein `QModelRoleDataSpan` dient als Abstraktion über ein Array von ` QModelRoleData `-Objekten.

Ähnlich wie eine Ansicht stellt QModelRoleDataSpan ein kleines Objekt (Zeiger und Größe) bereit, das an Funktionen übergeben werden kann, die den Inhalt des Arrays untersuchen müssen. Ein QModelRoleDataSpan kann aus jeder arrayähnlichen Sequenz erstellt werden (einfache Arrays, ` QVector`, `std::vector`, ` QVarLengthArray` usw.). Zudem besitzt es die Sequenz nicht selbst; diese muss daher länger bestehen bleiben als alle QModelRoleDataSpan-Objekte, die darauf verweisen.

Im Gegensatz zu einer Ansicht ist QModelRoleDataSpan ein Span, sodass Änderungen an den zugrunde liegenden Elementen möglich sind.

Der Hauptanwendungsfall von `QModelRoleDataSpan` besteht darin, einem Modell zu ermöglichen, die verschiedenen Rollen zuzugeordneten Daten in einem einzigen Aufruf zurückzugeben.

Um ein Element aus einem Modell abzurufen, fordert eine Ansicht (über ihre Delegaten) in der Regel mehrere Rollen für denselben Index an, 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.

Mit `QModelRoleDataSpan` kann eine Ansicht dieselben Daten mit nur einem Funktionsaufruf anfordern.

Dies wird erreicht, indem die Ansicht ein geeignetes Array von „ QModelRoleData “-Objekten vorbereitet, die jeweils mit der Rolle initialisiert sind, die abgerufen werden soll. Das Array wird dann in ein „QModelRoleDataSpan“-Objekt verpackt, das anschließend 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.

Ansichten sollten das Array aus „ QModelRoleData “-Objekten (und gegebenenfalls den entsprechenden Span) speichern und bei nachfolgenden Aufrufen des Modells wiederverwenden. Dadurch lassen sich die Speicherzuweisungen reduzieren, die mit der Erstellung und Rückgabe von „ QVariant “-Objekten verbunden sind.

Schließlich ist es Aufgabe des Modells, bei Vorliegen eines `QModelRoleDataSpan`-Objekts die Daten auszufüllen, die den einzelnen Rollen in diesem Span entsprechen. Wie dies geschieht, hängt von der konkreten Modellklasse ab. Hier ist ein Entwurf einer möglichen Implementierung, die den Span durchläuft und für jedes Element ` setData() ` anwendet:

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 Modell-/Ansichtsprogrammierung und ` QAbstractItemModel::multiData()`.

Dokumentation zu Mitgliedsfunktionen

[constexpr noexcept] QModelRoleDataSpan::QModelRoleDataSpan()

Erstellt ein leeres `QModelRoleDataSpan`-Objekt. Die Eigenschaft ` data()` wird auf ` nullptr` gesetzt, und die Länge wird auf Null gesetzt.

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

Erstellt einen `QModelRoleDataSpan`, der sich über den Container ` c` erstreckt, wobei es sich um einen beliebigen zusammenhängenden Container mit ` QModelRoleData `-Objekten handeln kann. Dies kann beispielsweise ein ` QVector<QModelRoleData>`, ein ` std::array<QModelRoleData, 10> ` usw. sein.

Hinweis: Der Container muss so lange erhalten bleiben, wie dieses Objekt nicht zerstört wurde.

Hinweis: Diese Funktion ist „noexcept“, wenn „ noexcept(std::data(c)) && noexcept(std::size(c)) “ „ true “ ist.

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

Erstellt ein `QModelRoleDataSpan`, das sich über ` modelRoleData` erstreckt, das als Array mit einem Element betrachtet wird.

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

Erstellt ein `QModelRoleDataSpan`, das sich über das Array erstreckt, beginnend bei ` modelRoleData ` und mit der Länge ` len`.

Hinweis: Das Array muss so lange bestehen bleiben, wie dieses Objekt nicht zerstört wurde.

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

Gibt einen Zeiger auf den Anfang des durch dieses Objekt dargestellten Bereichs zurück.

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

Gibt einen Zeiger auf den Anfang des durch dieses Objekt dargestellten Bereichs zurück.

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

Gibt die Daten zurück, die dem ersten QModelRoleData in der Spanne zugeordnet sind, dessen Rolle „ role “ ist. Falls kein solches QModelRoleData -Objekt existiert, ist das Verhalten undefiniert.

Hinweis: Vermeiden Sie den Aufruf dieser Funktion von der Modellseite aus, da ein Modell unmöglich im Voraus wissen kann, welche Rollen in einem bestimmten „ QModelRoleDataSpan “ enthalten sind. Diese Funktion eignet sich stattdessen für Ansichten und Delegaten, die die Kontrolle über die Rollen in der „span“ haben.

Siehe auch ` QModelRoleData::data()`.

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

Gibt einen Zeiger auf das imaginäre Element zurück, das direkt hinter dem Ende des durch dieses Objekt dargestellten Bereichs 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 eine veränderbare Referenz auf den „ QModelRoleData “ an der Position „ index “ innerhalb des Spans zurück.

Hinweis: „ index “ muss ein gültiger Index für diese „span“ sein (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.