Sur cette page

QRangeModel::RowOptions Struct

template <typename T> struct QRangeModel::RowOptions

Le modèle RowOptions offre un point de personnalisation permettant de contrôler la manière dont ` QRangeModel ` représente les types utilisés comme lignes. En savoir plus...

Cette structure a été introduite dans Qt 6.10.

Membres publics statiques

(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

Description détaillée

RowOptions<T> est un modèle de structure dans lequel T spécifie le type de ligne. Spécialisez ce modèle pour le type utilisé dans votre plage, puis ajoutez les membres pertinents.

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

Voir également ItemAccess.

Documentation des fonctions membres

[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)

Implémentez l'un de ces membres de classe pour indiquer si data peut être déposé dans le modèle. Si la version simplifiée est implémentée, alors QRangeModel vérifiera que action fait partie des supported drop actions. Dans la version complète, l'implémentation peut renvoyer différents résultats en fonction de la position du dépôt, telle que spécifiée par row, column et parent.

Ce membre est facultatif et n’est pas requis pour la personnalisation du glisser-déposer. Par défaut, il indique si data contient l’un des types MIME pris en charge.

Ces fonctions ont été introduites dans Qt 6.12.

Voir également 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)

Implémentez l'un de ces membres de classe pour décoder les entrées pertinentes de ` data ` en une séquence de lignes de type ` T`, puis insérez ces lignes dans le modèle en les affectant respectivement à ` inserter`. Indiquez si l'opération a abouti.

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;
    }
};

L'objet ` inserter ` se comporte comme un ` std::back_insert_iterator` et peut être utilisé, par exemple, avec ` std::copy`. Les extraits de code ci-dessus omettent la gestion des erreurs, ce qui nécessiterait peut-être de stocker les éléments décodés dans une liste distincte pouvant être supprimée en cas d'erreur. Le code suivant permettrait de déplacer efficacement les lignes décodées dans le modèle :

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;
}

En option, les lignes décodées peuvent être associées au numéro de ligne relatif qu'elles devraient occuper dans la plage de lignes insérées.

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

Cette implémentation conserve une ligne vide entre chaque ligne décodée.

Renvoyez l’une des valeurs de ` DropOperation ` pour indiquer à ` QRangeModel ` comment les lignes supprimées doivent être appliquées au modèle. Vous pouvez également renvoyer simplement ` true ` (équivalent de ` DropOperation::Automatic`) ou ` false ` (équivalent de ` DropOperation::DontDrop`).

Ces fonctions ont été introduites dans Qt 6.12.

Voir également ` QAbstractItemModel::dropMimeData()`.

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

Implémentez ce membre de classe pour renvoyer l'flags pour tous les éléments de row.

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

Ceci sera remplacé par une personnalisation de ` ItemAccess::flags`.

Si ce membre n’est pas fourni, alors ` QRangeModel ` calcule les indicateurs en fonction de la plage à partir de laquelle il a été construit.

Cette fonction a été introduite dans Qt 6.12.

Voir également QAbstractItemModel::flags().

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

Implémentez ce membre de classe afin de renvoyer les données d'en-tête que la méthode ` QRangeModel ` doit renvoyer pour l'role e de la ` section ` dans l'en-tête horizontale.

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

Si ce membre n'est pas fourni, alors QRangeModel renvoie les valeurs par défaut spécifiques au type issues de l'implémentation de headerData().

Cette fonction a été introduite dans Qt 6.12.

Voir également 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)

Implémentez l'un de ces membres de classe pour renvoyer l'mime data des lignes contenues dans l'range fourni.

Si la version générique est fournie, l’itérateur sur les ` range ` est bidirectionnel et déréférence vers une paire composée d’une ligne de type ` T ` et du ` QModelIndex` correspondant.

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) {
    // ...
}

Les lignes entièrement sélectionnées ne seront incluses qu’une seule fois dans la plage, associées à un élément de type index contenant le numéro de ligne et le parent, ainsi qu’à une colonne de valeur -1. Les lignes partiellement sélectionnées sont incluses plusieurs fois dans la plage, une fois pour chaque colonne sélectionnée.

Les entrées de range sont triées dans l’ordre logique, de la ligne la plus haute à la dernière ligne, et de la colonne la plus à gauche à la dernière colonne.

Ces fonctions ont été introduites dans Qt 6.12.

Voir également QAbstractItemModel::mimeData().

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

Implémentez cet élément de classe pour renvoyer la liste des objets ` mime types ` qu’un modèle contenant des lignes de type ` T ` peut utiliser pour représenter les données du modèle lors d’opérations de glisser-déposer.

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

Si ce membre n'est pas fourni, la fonction ` QRangeModel ` renvoie le type MIME par défaut, « application/x-qabstractitemmodeldatalist », tel qu'il est pris en charge par ` QAbstractItemModel`. Si la liste renvoyée ne contient pas ce type MIME, celui-ci ne sera pas pris en charge.

Cette fonction a été introduite dans Qt 6.12.

Voir également QAbstractItemModel::mimeTypes().

Documentation sur les variables membres

const QRangeModel::RowCategory RowOptions::rowCategory

Définissez cette constante statique de compilation sur l'une des valeurs de l'énumérateur ` RowCategory ` pour déterminer comment ` QRangeModel ` doit interpréter les éléments de la plage. Ne pas fournir cette constante revient à utiliser ` 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;
};

Si la constante rowCategory est définie sur MultiRoleItem, aucun des autres membres n’aura d’effet.

Voir également 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.