Auf dieser Seite

QRangeModel::RowOptions Struct

template <typename T> struct QRangeModel::RowOptions

Die Vorlage „RowOptions“ bietet einen Anpassungspunkt, über den gesteuert werden kann, wie „ QRangeModel “ die als Zeilen verwendeten Typen darstellt. Mehr...

Diese Struktur wurde in Qt 6.10 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 &row)
(since 6.12) QVariant headerData(int section, int role)
(since 6.12) QMimeData *mimeData(const QModelIndex &range)
(since 6.12) QMimeData *mimeData(const auto &range)
(since 6.12) QStringList mimeTypes()
const QRangeModel::RowCategory rowCategory

Ausführliche Beschreibung

`RowOptions<T>` ist eine Strukturvorlage, bei der ` T ` den Zeilentyp angibt. Spezialisieren Sie diese Vorlage für den in Ihrem Bereich verwendeten Typ und fügen Sie die entsprechenden Mitglieder hinzu.

template <>
struct QRangeModel::RowOptions<ColorEntry>
{
    ...
};

Siehe auch ` ItemAccess`.

Dokumentation zu den Mitgliedsfunktionen

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

[static, since 6.12] bool RowOptions::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 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.

Diese Funktionen wurden in Qt 6.12 eingeführt.

Siehe auch ` QAbstractItemModel::canDropMimeData()`.

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

[static, since 6.12] template <typename inserter:auto> auto RowOptions::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 Zeilen 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::RowOptions<ColorEntry>
{
    static bool dropMimeData(const QMimeData *mimeData, auto inserter)
    {
        const QByteArray data = mimeData->data(mimeTypes().first());
        if (data.isEmpty())
            return false;
        QXmlStreamReader stream(data);
        while (!stream.atEnd()) {
            stream.readNext();
            if (stream.isStartElement() && stream.name() == u"li"_s)
                inserter = ColorEntry(stream.readElementText());
        }

        return true;
    }
};

Der ` inserter ` verhält sich wie ein ` std::back_insert_iterator` und kann beispielsweise mit ` std::copy` verwendet werden. In den obigen Codeausschnitten wurde die Fehlerbehandlung ausgelassen, die möglicherweise erfordern würde, die dekodierten Elemente in einer separaten Liste zu speichern, die im Falle eines Fehlers verworfen werden kann. Der folgende Code würde die dekodierten Zeilen effizient in das Modell verschieben:

static bool dropMimeData(const QMimeData *mimeData, auto inserter)
{
    QList<ColorEntry> decodedEntries;
    // read stream and populate decodedEntries

    if (stream.hasError())
        return false;
    std::copy(std::move_iterator(decodedRows.begin()), std::move_iterator(decodedRows.end()),
                inserter);
    return true;
}

Optional können die dekodierten Zeilen mit der relativen Zeilennummer verknüpft werden, die sie im eingefügten Zeilenbereich haben sollten.

int row = 0;
for (const auto &decodedRow : decodedRows) {
    inserter = {decodedRow, row};
    row += 2;
}

Diese Implementierung behält zwischen jeder dekodierten Zeile eine leere Zeile bei.

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

Diese Funktionen wurden in Qt 6.12 eingeführt.

Siehe auch ` QAbstractItemModel::dropMimeData()`.

[static, since 6.12] Qt::ItemFlags RowOptions::flags(const T &row)

Implementieren Sie dieses Klassenmitglied, um die ` flags ` für alle Elemente in ` row` zurückzugeben.

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

Dies wird durch eine Anpassung von ` ItemAccess::flags` überschrieben.

Wenn dieses Element nicht bereitgestellt wird, berechnet ` QRangeModel ` die Flags auf der Grundlage des Bereichs, aus dem es erstellt wurde.

Diese Funktion wurde in Qt 6.12 eingeführt.

Siehe auch ` QAbstractItemModel::flags()`.

[static, since 6.12] QVariant RowOptions::headerData(int section, int role)

Implementieren Sie dieses Klassenmitglied, um die Kopfdaten zurückzugeben, die „ QRangeModel “ für die „ role “ des „ section “ in der horizontalen Kopfzeile zurückgeben soll.

template <>
struct QRangeModel::RowOptions<ColorEntry>
{
    static QVariant headerData(int section, int role)
    {
        switch (section) {
            // ...
        }
        return {};
    }
};

Wird dieses Element nicht bereitgestellt, gibt „ QRangeModel “ typspezifische Standardwerte aus der „headerData()“-Implementierung zurück.

Diese Funktion wurde in Qt 6.12 eingeführt.

Siehe auch QAbstractItemModel::headerData().

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

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

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

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

template <>
struct QRangeModel::RowOptions<ColorEntry>
{
    template <typename Items>
    static QMimeData *mimeData(const Items &items)
    {
        if (items.isEmpty())
            return nullptr;
        QByteArray data;
        QXmlStreamWriter stream(&data);
        stream.writeStartElement("ul");
        for (const auto &[item, index] : items)
            stream.writeTextElement("li", item.colorName());
        stream.writeEndElement();

        QMimeData *mimeData = new QMimeData;
        mimeData->setData(mimeTypes().first(), data);
        return mimeData;
    }
};
for (const auto &[row, index] : range) {
    // ...
}

Vollständig ausgewählte Zeilen werden nur einmal in den Bereich aufgenommen, gepaart mit einem „ index “, das die Zeilennummer und den übergeordneten Eintrag enthält, sowie einer Spalte mit dem Wert -1. Teilweise ausgewählte Zeilen werden mehrfach in den Bereich aufgenommen, einmal für jede ausgewählte Spalte.

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.

Diese Funktionen wurden in Qt 6.12 eingeführt.

Siehe auch „ QAbstractItemModel::mimeData()“.

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

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

template <>
struct QRangeModel::RowOptions<ColorEntry>
{
    static QStringList mimeTypes()
    {
        return {
            u"text/html"_s
        };
    }
};

Wird dieses Mitglied nicht bereitgestellt, gibt „ QRangeModel “ den von „ QAbstractItemModel “ unterstützten Standard-MIME-Typ „application/x-qabstractitemmodeldatalist“ zurück. Enthält die zurückgegebene Liste diesen MIME-Typ nicht, wird er nicht unterstützt.

Diese Funktion wurde in Qt 6.12 eingeführt.

Siehe auch QAbstractItemModel::mimeTypes().

Dokumentation zu Member-Variablen

const QRangeModel::RowCategory RowOptions::rowCategory

Setzen Sie diese statische Kompilierungszeitkonstante auf einen der Werte aus der Aufzählung „ RowCategory “, um festzulegen, wie „ QRangeModel “ die Elemente des Bereichs interpretieren soll. Wird diese Konstante nicht angegeben, entspricht dies der Einstellung „ RowCategory::Default “.

class ColorEntry
{
    Q_GADGET
    Q_PROPERTY(QString display READ colorName)
    Q_PROPERTY(QColor decoration READ decoration)
    Q_PROPERTY(QString toolTip READ toolTip)
public:
    ...
};
template <>
struct QRangeModel::RowOptions<ColorEntry>
{
    static constexpr auto rowCategory = QRangeModel::RowCategory::MultiRoleItem;
};

Wenn „ rowCategory “ auf „ MultiRoleItem “ gesetzt ist, haben die anderen Elemente keine Wirkung.

Siehe auch „ ItemAccess “.

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