このページでは

QRangeModel::ItemAccess Struct

template <typename T> struct QRangeModel::ItemAccess

ItemAccess テンプレートは、QRangeModel が個々の項目のロールデータにアクセスする方法を制御するためのカスタマイズポイントを提供します。詳細...

この構造体は Qt 6.11 で導入されました。

静的パブリックメンバー

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

詳細な説明

ItemAccess<T> は、T がアイテムの型を指定する構造体テンプレートです。データ構造で使用される型に対してこのテンプレートを特化させ、関連するクラスメンバ関数を実装してください。

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

このタイプの特化は、事前定義された挙動や、RowOptions の対応する特化よりも優先されます。

注: 自身が所有していない型に対して、このテンプレートを特化しないでください 。

メンバ関数のドキュメント

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

data をモデルにドロップできるかどうかを返すために、以下のクラスメンバーのいずれかを実装してください。簡易版を実装した場合、QRangeModel は、action がsupported drop actions のいずれかに該当するかどうかを検証します。完全版では、row 、column 、およびparent で指定されたドロップ位置に基づいて、実装が異なる結果を返すことができます。

このメンバーはオプションであり、ドラッグ&ドロップのカスタマイズには必須ではありません。デフォルトの動作では、data がサポートされている MIME タイプのいずれかを保持しているかどうかを返します。

注:この 特化は、モデル内のすべての項目がT 型の項目によって裏付けられている場合にのみ考慮されます。異なる列が異なるデータ型を提供する異種モデルについては、代わりにRowOptions を特化してください。

これらの関数は Qt 6.12 で導入されました。

関連項目: 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)

data 内の関連するエントリを、型T の項目のシーケンスにデコードするために、これらのクラスメメンバーのいずれかを実装し、各項目を指定されたinserter に割り当てることで、これらの行をモデルにドロップします。操作が成功したかどうかを返します。

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

オプションとして、デコードされた項目を、配置位置に対する行および列の値と関連付けることができます。MIMEデータに位置情報が含まれている場合、これにより項目の「形状」を維持することが可能になります。

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

操作を完全に制御するために、action 、row 、column 、およびparent パラメータを使用したバージョンを実装してください。

DropOperation の値のいずれかを返して、削除された行をモデルにどのように適用すべきかについて、QRangeModel へのヒントを提供します。あるいは、単にtrue (DropOperation::Automatic と同等)またはfalse (DropOperation::DontDrop と同等)を返すこともできます。

注:この 特化は、モデル内のすべての項目がT 型の項目によって裏付けられている場合にのみ考慮されます。異なる列が異なるデータ型を提供する異種モデルについては、代わりにRowOptions を特化してください。

これらの関数は Qt 6.12 で導入されました。

QAbstractItemModel::dropMimeData()も参照してください 。

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

このクラスメンバを実装し、item に対してflags を返すようにしてください。

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

この関数は Qt 6.12 で導入されました。

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)

これらのクラスメータのいずれかを実装し、指定されたrange に含まれる項目に対するmime data を返すようにします。

ジェネリックバージョンが指定されている場合、range を巡回するイテレータは双方向であり、T 型の項目と、それに対応するQModelIndex を格納したペアを参照します。

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

range 内のエントリは、最上段から最終行へ、また最左列から最終列へと、論理順にソートされます。

注:この 特化は、モデル内のすべての項目がT 型の項目によって裏付けられている場合にのみ考慮されます。異なる列が異なるデータ型を提供する異種モデルについては、代わりにRowOptions を特化してください。

これらの関数は Qt 6.12 で導入されました。

QAbstractItemModel::mimeData()も参照してください 。

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

このクラスメータを実装して、T 型の項目を保持するモデルが、ドラッグ&ドロップ操作中にモデルデータを表現するために使用できるmime types のリストを返すようにします。

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

このリストに、Qt がドラッグ&ドロップデータに使用する `default mime type ` が含まれている場合、QRangeModel はその MIME タイプに対するデータのエンコードおよびデコードを自動的に処理します。

注:この 特化は、モデル内のすべての項目がT 型の項目で裏付けられている場合にのみ考慮されます。異なる列が異なるデータ型を提供する異種混合モデルについては、代わりにRowOptions を特化してください。

この関数は Qt 6.12 で導入されました。

QAbstractItemModel::mimeTypes()も参照してください 。

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

このクラスメメンバーを実装し、要求された `role` に対する `item ` のデータを返すようにします。

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

`ItemAccess ` が `readRole ` の実装で特化されている型は、暗黙的に `multi-role items` として解釈されます。

QAbstractItemModel::data()も参照してください 。

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

このクラスメータを実装して、リクエストされた `role ` に対する `item ` のデータを、指定された `value` に設定し、変更が成功したかどうかを返します。

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

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.