Auf dieser Seite

QRangeModel::ItemAccess Struct

template <typename T> struct QRangeModel::ItemAccess

Die Vorlage „ItemAccess“ bietet einen Anpassungspunkt, über den gesteuert werden kann, wie „ QRangeModel “ auf die Rollendaten einzelner Elemente zugreift. Mehr...

Diese Struktur wurde in Qt 6.11 eingeführt.

Statische öffentliche Mitglieder

(since 6.12) bool canDropMimeData(const QMimeData *data)
(since 6.12) bool canDropMimeData(const QMimeData *data, int action, int row, int column, const QModelIndex &parent)
(since 6.12) auto dropMimeData(const QMimeData *data, auto inserter)
(since 6.12) auto dropMimeData(const QMimeData *data, int action, int row, int column, const QModelIndex &parent, auto inserter)
(since 6.12) Qt::ItemFlags flags(const T &item)
(since 6.12) QMimeData *mimeData(const QModelIndex &range)
(since 6.12) QMimeData *mimeData(const auto &range)
(since 6.12) QStringList mimeTypes()
QVariant readRole(const T &item, int role)
bool writeRole(T &item, const QVariant &value, int role)

Ausführliche Beschreibung

`ItemAccess<T>` ist eine Strukturvorlage, bei der ` T ` den Elementtyp angibt. Spezialisieren Sie diese Vorlage für den in Ihrer Datenstruktur verwendeten Typ und implementieren Sie die entsprechenden Klassenmitgliedsfunktionen.

template <>
struct QRangeModel::ItemAccess<ColorEntry>
{
    static Qt::ItemFlags flags(const ColorEntry &entry)
    {
        return entry.flags();
    }
    static QVariant readRole(const ColorEntry &entry, int role)
    {
        switch (role) {
            // ...
        }
        return {};
    }
    static bool writeRole(ColorEntry &entry, const QVariant &value, int role)
    {
        bool ok = false;
        switch (role) {
            // ...
        }
        return ok;
    }
    ...
};

Eine Spezialisierung dieses Typs hat Vorrang vor jedem vordefinierten Verhalten sowie vor einer entsprechenden Spezialisierung von ` RowOptions`.

Hinweis: SpezialisierenSie diese Vorlage nicht für Typen, deren Eigentümer Sie nicht sind.

Dokumentation zu den Mitgliedsfunktionen

[static, since 6.12] bool ItemAccess::canDropMimeData(const QMimeData *data)

[static, since 6.12] bool ItemAccess::canDropMimeData(const QMimeData *data, int action, int row, int column, const QModelIndex &parent)

Implementieren Sie eines dieser Klassenelemente, um zurückzugeben, ob data in das Modell abgelegt werden kann. Wenn die vereinfachte Version implementiert wird, überprüft QRangeModel, ob action zu den supported drop actions gehört. In der vollständigen Version kann die Implementierung je nach der Position der Ablage, wie durch row, column und parent festgelegt, unterschiedliche Ergebnisse zurückgeben.

Dieses Element ist optional und für die Anpassung von Drag-and-Drop nicht erforderlich. Das Standardverhalten gibt zurück, ob data einen der unterstützten MIME-Typen enthält.

Hinweis: Diese Spezialisierung wird nur berücksichtigt, wenn alle Elemente im Modell durch Elemente vom Typ ` T` unterlegt sind. Bei heterogenen Modellen, bei denen verschiedene Spalten unterschiedliche Datentypen liefern, sollten Sie stattdessen ` RowOptions ` spezialisieren.

Diese Funktionen wurden in Qt 6.12 eingeführt.

Siehe auch ` QAbstractItemModel::canDropMimeData()`.

[static, since 6.12] template <typename inserter:auto> auto ItemAccess::dropMimeData(const QMimeData *data, auto inserter)

[static, since 6.12] template <typename inserter:auto> auto ItemAccess::dropMimeData(const QMimeData *data, int action, int row, int column, const QModelIndex &parent, auto inserter)

Implementieren Sie eines dieser Klassenmitglieder, um die entsprechenden Einträge in „ data “ in eine Folge von Elementen vom Typ „ T “ zu dekodieren, und fügen Sie diese Zeilen in das Modell ein, indem Sie sie jeweils dem bereitgestellten „ inserter “ zuweisen. Geben Sie zurück, ob der Vorgang erfolgreich war.

template <>
struct QRangeModel::ItemAccess<ColorEntry>
{
    static bool dropMimeData(const QMimeData *mimeData, auto inserter)
    {
        QByteArray data = mimeData->data(mimeTypes().first());
        if (data.isEmpty())
            return false;
        QTextStream stream(&data, QIODevice::ReadOnly);
        while (!stream.atEnd()) {
            QString colorName;
            stream >> colorName;
            inserter = ColorEntry(colorName);
        }
        return true;
    }
};

Optional können dekodierte Elemente mit einem Zeilen- und Spaltenwert relativ zur Einfügeposition verknüpft werden. Wenn die MIME-Daten Positionsinformationen enthalten, ermöglicht dies die Beibehaltung der „Form“ der Elemente.

for (const auto &decodedItem: decodedItems) {
    inserter = {
        decodedItem,
        {
            relativeRow,
            relativeColumn
        }
    };
}

Implementieren Sie die Version mit den Parametern „ action “, „ row “, „ column “ und „ parent “, um die volle Kontrolle über den Vorgang zu erhalten.

Geben Sie einen der Werte von ` DropOperation ` zurück, um ` QRangeModel ` einen Hinweis darauf zu geben, wie die entfernten Zeilen auf das Modell angewendet werden sollen. Alternativ können Sie einfach ` true ` (entspricht ` DropOperation::Automatic`) oder ` false ` (entspricht ` DropOperation::DontDrop`) zurückgeben.

Hinweis: Diese Spezialisierung wird nur berücksichtigt, wenn alle Elemente im Modell durch Elemente vom Typ „ T “ unterlegt sind. Bei heterogenen Modellen, bei denen verschiedene Spalten unterschiedliche Datentypen liefern, sollten Sie stattdessen „ RowOptions “ spezialisieren.

Diese Funktionen wurden in Qt 6.12 eingeführt.

Siehe auch QAbstractItemModel::dropMimeData().

[static, since 6.12] Qt::ItemFlags ItemAccess::flags(const T &item)

Implementieren Sie dieses Klassenmitglied, um die „ flags “ für „ item “ zurückzugeben.

template <>
struct QRangeModel::ItemAccess<ColorEntry>
{
    static Qt::ItemFlags flags(const ColorEntry &entry)
    {
        return entry.flags();
    }
};

Diese Funktion wurde in Qt 6.12 eingeführt.

Siehe auch ` QAbstractItemModel::flags()`.

[static, since 6.12] QMimeData *ItemAccess::mimeData(const QModelIndex &range)

[static, since 6.12] template <typename range:auto> QMimeData *ItemAccess::mimeData(const auto &range)

Implementieren Sie eines dieser Klassenmitglieder, um die „ mime data “ für die Elemente im übergebenen „ range “ zurückzugeben.

Wird die generische Version bereitgestellt, ist der Iterator über ` range ` bidirektional und verweist auf ein Paar, das aus einem Element vom Typ ` T ` und dem entsprechenden ` QModelIndex` besteht.

template <>
struct QRangeModel::ItemAccess<ColorEntry>
{
    static QMimeData *mimeData(const auto &range)
    {
        QByteArray data;
        QTextStream stream(&data, QIODevice::WriteOnly);
        for (const auto &[item, index] : range)
            stream << item.colorName() << Qt::endl;

        QMimeData *result = new QMimeData;
        result->setData(mimeTypes().first(), data);
        // Qt handles encoding into the default mime type
        return result;
    }
};

Die Einträge in ` range ` sind in logischer Reihenfolge sortiert, von der obersten bis zur letzten Zeile und von der Spalte ganz links bis zur letzten Spalte.

Hinweis: Diese Spezialisierung wird nur berücksichtigt, wenn alle Elemente im Modell durch Elemente vom Typ „ T “ unterlegt sind. Bei heterogenen Modellen, bei denen verschiedene Spalten unterschiedliche Datentypen liefern, sollten Sie stattdessen „ RowOptions “ spezialisieren.

Diese Funktionen wurden in Qt 6.12 eingeführt.

Siehe auch ` QAbstractItemModel::mimeData()`.

[static, since 6.12] QStringList ItemAccess::mimeTypes()

Implementieren Sie dieses Klassenmitglied, um die Liste der ` mime types ` zurückzugeben, die ein Modell, das Elemente vom Typ ` T ` enthält, zur Darstellung der Modelldaten während Drag-and-Drop-Vorgängen verwenden kann.

template <>
struct QRangeModel::ItemAccess<ColorEntry>
{
    static QStringList mimeTypes()
    {
        return {
            u"text/plain"_s,
            u"application/x-qabstractitemmodeldatalist"_s
        };
    }
};

Wenn die Liste die „ default mime type “ enthält, die Qt für Drag-and-Drop-Daten verwendet, übernimmt „ QRangeModel “ automatisch die Kodierung und Dekodierung der Daten für diesen MIME-Typ.

Hinweis: Diese Spezialisierung wird nur berücksichtigt, wenn alle Elemente im Modell durch Elemente vom Typ ` T` unterlegt sind. Bei heterogenen Modellen, bei denen verschiedene Spalten unterschiedliche Datentypen liefern, sollten Sie stattdessen ` RowOptions ` spezialisieren.

Diese Funktion wurde in Qt 6.12 eingeführt.

Siehe auch ` QAbstractItemModel::mimeTypes()`.

[static] QVariant ItemAccess::readRole(const T &item, int role)

Implementieren Sie dieses Klassenmitglied, um die Daten in „ item “ für das angeforderte „ role “ zurückzugeben.

template <>
struct QRangeModel::ItemAccess<ColorEntry>
{
    static QVariant readRole(const ColorEntry &entry, int role)
    {
        switch (role) {
            // ...
        }
        return {};
    }
};

Typen, für die ` ItemAccess ` mit einer ` readRole `-Implementierung spezialisiert ist, werden implizit als ` multi-role items` interpretiert.

Siehe auch QAbstractItemModel::data().

[static] bool ItemAccess::writeRole(T &item, const QVariant &value, int role)

Implementieren Sie dieses Klassenmitglied, um die Daten von „ item “ für die angeforderte „ role “ auf die angegebene „ value “ zu setzen und zurückzugeben, ob die Änderung erfolgreich war.

template <>
struct QRangeModel::ItemAccess<ColorEntry>
{
    static bool writeRole(ColorEntry &entry, const QVariant &value, int role)
    {
        bool ok = false;
        switch (role) {
            // ...
        }
        return ok;
    }
};

Siehe auch QAbstractItemModel::setData().

© 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.