QRangeModel::RowOptions Struct
template <typename T> struct QRangeModel::RowOptionsRowOptions テンプレートは、QRangeModel が行として使用される型をどのように表現するかを制御するためのカスタマイズポイントを提供します。詳細...
この構造体は Qt 6.10 で導入されました。
静的パブリックメンバー
(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 |
詳細な説明
RowOptions<T> は、T が行の型を指定する構造体テンプレートです。使用する範囲の型に対してこのテンプレートを特化させ、関連するメンバを追加してください。
template <>
struct QRangeModel::RowOptions<ColorEntry>
{
...
};ItemAccessも参照してください 。
メンバ関数のドキュメント
[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)
data をモデルにドロップできるかどうかを返すために、以下のクラスメンバーのいずれかを実装してください。簡易版を実装した場合、QRangeModel は、action がsupported drop actions のいずれかに該当するかどうかを検証します。完全版では、row 、column 、およびparent で指定されたドロップ位置に基づいて、実装が異なる結果を返すことができます。
このメンバはオプションであり、ドラッグ&ドロップのカスタマイズには必須ではありません。デフォルトの挙動では、data がサポートされている MIME タイプのいずれかを保持しているかどうかが返されます。
これらの関数は Qt 6.12 で導入されました。
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)
これらのクラスメータのいずれかを実装し、data 内の関連エントリをT 型の行のシーケンスにデコードし、それぞれを指定されたinserter に割り当てることで、これらの行をモデルに投入します。操作が成功したかどうかを返します。
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;
}
};inserter はstd::back_insert_iteratorと同様に動作し、例えばstd::copy と共に使用できます。上記のコードスニペットではエラー処理が省略されていますが、エラー処理を行う場合は、デコードされた項目を別のリストに格納し、エラー発生時にそのリストを破棄できるようにする必要があるかもしれません。以下のコードは、デコードされた行をモデルに効率的に移動させます:
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;
}オプションとして、デコードされた行を、挿入される行の範囲内でその行が持つべき相対行番号とペアにすることも可能です。
int row = 0;
for (const auto &decodedRow : decodedRows) {
inserter = {decodedRow, row};
row += 2;
}この実装では、各デコード済み行の間に空の行を1行挿入します。
DropOperation の値のいずれかを返すことで、QRangeModel に対し、ドロップされた行をモデルにどのように適用すべきかについてのヒントを提供します。あるいは、単にtrue (DropOperation::Automatic に相当)またはfalse (DropOperation::DontDrop に相当)を返すこともできます。
これらの関数は Qt 6.12 で導入されました。
QAbstractItemModel::dropMimeData()も参照してください 。
[static, since 6.12] Qt::ItemFlags RowOptions::flags(const T &row)
このクラスメンバーを実装し、row 内のすべてのアイテムについて、flags を返すようにしてください。
template <>
struct QRangeModel::RowOptions<ColorEntry>
{
static Qt::ItemFlags flags(const ColorEntry &entry)
{
return entry.flags();
}
};これは、ItemAccess::flags のカスタマイズによって上書きされます。
このメンバが提供されていない場合、QRangeModel は、その構築元となった範囲に基づいてフラグを計算します。
この関数は Qt 6.12 で導入されました。
QAbstractItemModel::flags()も参照してください 。
[static, since 6.12] QVariant RowOptions::headerData(int section, int role)
このクラスメメンバーを実装し、水平ヘッダー内のsection のrole に対して、QRangeModel が返すはずのヘッダーデータを返すようにしてください。
template <>
struct QRangeModel::RowOptions<ColorEntry>
{
static QVariant headerData(int section, int role)
{
switch (section) {
// ...
}
return {};
}
};このメンバが提供されていない場合、QRangeModel は headerData() の実装から型固有のデフォルト値を返します。
この関数は Qt 6.12 で導入されました。
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)
これらのクラスメメンバーのいずれかを実装し、指定されたrange 内の行に対するmime data を返すようにします。
ジェネリック版が指定された場合、range を巡回するイテレータは双方向となり、T 型の行と、それに対応する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) {
// ...
}完全に選択された行は、行番号と親を保持するindex 、および-1の列とペアになって、範囲に1回だけ含まれます。部分的に選択された行は、選択された列ごとに1回ずつ、範囲に複数回含まれます。
range 内のエントリは、最上段から最終行へ、また最左列から最終列へと、論理順にソートされます。
これらの関数は Qt 6.12 で導入されました。
QAbstractItemModel::mimeData()も参照してください 。
[static, since 6.12] QStringList RowOptions::mimeTypes()
このクラスメメンバーを実装して、T 型の行を保持するモデルが、ドラッグ&ドロップ操作中にモデルデータを表現するために使用できるmime types のリストを返すようにします。
template <>
struct QRangeModel::RowOptions<ColorEntry>
{
static QStringList mimeTypes()
{
return {
u"text/html"_s
};
}
};このメンバが提供されていない場合、QRangeModel はQAbstractItemModel でサポートされているデフォルトの MIME タイプ「application/x-qabstractitemmodeldatalist」を返します。返されたリストにその MIME タイプが含まれていない場合、その MIME タイプはサポートされません。
この関数は Qt 6.12 で導入されました。
QAbstractItemModel::mimeTypes()も参照してください 。
メンバ変数のドキュメント
const QRangeModel::RowCategory RowOptions::rowCategory
この静的なコンパイル時定数を、RowCategory 列挙型の値のいずれかに設定することで、QRangeModel が範囲の要素をどのように解釈するかを定義します。この定数を指定しない場合は、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;
};rowCategory がMultiRoleItem に設定されている場合、他のメンバーは一切効果を持ちません。
「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.