このページでは

QModelRoleDataSpan Class

QModelRoleDataSpan クラスは、QModelRoleData オブジェクトに対するスパンを提供します。詳細...

ヘッダー: #include <QModelRoleDataSpan>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
以下のように: Qt 6.0

パブリック関数

QModelRoleDataSpan()
QModelRoleDataSpan(Container &c)
QModelRoleDataSpan(QModelRoleData &modelRoleData)
QModelRoleDataSpan(QModelRoleData *modelRoleData, qsizetype len)
QModelRoleData *begin() const
QModelRoleData *data() const
QVariant *dataForRole(int role) const
QModelRoleData *end() const
qsizetype length() const
qsizetype size() const
QModelRoleData &operator[](qsizetype index) const

詳細な説明

QModelRoleDataSpan は、QModelRoleData オブジェクトの配列に対する抽象化として使用されます。

ビューと同様に、QModelRoleDataSpan は、配列の内容を調べる必要がある関数に渡すことができる小さなオブジェクト(ポインタとサイズ)を提供します。QModelRoleDataSpan は、任意の配列のようなシーケンス(単純な配列、QVector 、std::vector、QVarLengthArray など)から構築することができます。 さらに、QModelRoleDataSpanはシーケンスを所有しないため、それを参照するQModelRoleDataSpanオブジェクトよりも長く存続させる必要があります。

ビューとは異なり、QModelRoleDataSpan はスパンであるため、基になる要素の変更が可能です。

QModelRoleDataSpan の主な用途は、モデルが 1 回の呼び出しで異なるロールに対応するデータを返せるようにすることです。

モデルから 1 つの要素を描画するために、ビューは(そのデリゲートを通じて)通常、data() を必要な回数だけ呼び出すことで、同じインデックスに対して複数のロールを要求します。

QVariant text = model->data(index, Qt::DisplayRole);
QVariant decoration = model->data(index, Qt::DecorationRole);
QVariant checkState = model->data(index, Qt::CheckStateRole);
// etc.

QModelRoleDataSpan を使用すると、ビューはたった 1 回の関数呼び出しで同じデータを要求できるようになります。

これは、ビューが、取得すべきロールでそれぞれ初期化されたQModelRoleData オブジェクトの適切な配列を準備することで実現されます。その後、この配列はQModelRoleDataSpanオブジェクトでラップされ、モデルのmultiData() 関数に渡されます。

std::array<QModelRoleData, 3> roleData = { {
    QModelRoleData(Qt::DisplayRole),
    QModelRoleData(Qt::DecorationRole),
    QModelRoleData(Qt::CheckStateRole)
} };

// Usually, this is not necessary: A QModelRoleDataSpan
// will be built automatically for you when passing an array-like
// container to multiData().
QModelRoleDataSpan span(roleData);

model->multiData(index, span);

// Use roleData[0].data(), roleData[1].data(), etc.

ビューでは、QModelRoleData オブジェクトの配列(および場合によっては対応するスパン)を保存し、モデルへのその後の呼び出しで再利用することが推奨されます。これにより、QVariant オブジェクトの作成および返却に関連するメモリ割り当てを削減できます。

最後に、QModelRoleDataSpanオブジェクトが与えられた場合、モデル側の役割は、そのスパン内の各ロールに対応するデータを埋めることです。その具体的な方法は、具体的なモデルクラスによって異なります。以下に、スパンを反復処理し、各要素に対してsetData() を使用する実装例を示します:

void MyModel::multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const
{
    for (QModelRoleData &roleData : roleDataSpan) {
        int role = roleData.role();

        // ... obtain the data for index and role ...

        roleData.setData(result);
    }
}

「モデル/ビュープログラミング」および「QAbstractItemModel::multiData()」も参照してください 。

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

[constexpr noexcept] QModelRoleDataSpan::QModelRoleDataSpan()

空の QModelRoleDataSpan を生成します。その `data()` は `nullptr` に設定され、長さは 0 になります。

[constexpr noexcept(...)] template <typename Container> requires if_compatible_container<Container> QModelRoleDataSpan::QModelRoleDataSpan(Container &c)

コンテナ `c` にまたがる `QModelRoleDataSpan` を構築します。このコンテナは、QModelRoleData オブジェクトからなる任意の連続したコンテナであればよいです。例えば、`QVector<QModelRoleData>` や `std::array<QModelRoleData, 10> ` などが該当します。

注: このオブジェクトが破棄されるまでは、コンテナを 存続させ続ける必要があります。

注: noexcept(std::data(c)) && noexcept(std::size(c)) がtrue である場合、この関数はnoexceptとなります 。

[constexpr noexcept] QModelRoleDataSpan::QModelRoleDataSpan(QModelRoleData &modelRoleData)

modelRoleData を1要素の配列として扱い、その範囲をカバーするQModelRoleDataSpanを構築します。

[constexpr] QModelRoleDataSpan::QModelRoleDataSpan(QModelRoleData *modelRoleData, qsizetype len)

modelRoleData から始まり、長さがlen である配列をまたぐ QModelRoleDataSpan を生成します。

注: このオブジェクトが破棄されるまでは、配列を 存続させておく必要があります。

[constexpr noexcept] QModelRoleData *QModelRoleDataSpan::begin() const

このオブジェクトが表すスパンのはじめへのポインタを返します。

[constexpr noexcept] QModelRoleData *QModelRoleDataSpan::data() const

このオブジェクトが表すスパンのはじめへのポインタを返します。

[constexpr] QVariant *QModelRoleDataSpan::dataForRole(int role) const

span要素内で、roleがrole に等しい最初のQModelRoleData に関連付けられたデータを返します。そのようなQModelRoleData オブジェクトが存在しない場合、挙動は未定義となります。

注: モデル側からはこの関数を呼び出さないでください 。モデルは、特定のQModelRoleDataSpan に含まれるロールを事前に知ることは不可能です。この関数は、スパン内のロールを制御できるビューやデリゲートでの使用に適しています。

関連項目: QModelRoleData::data()。

[constexpr noexcept] QModelRoleData *QModelRoleDataSpan::end() const

このオブジェクトが表す範囲の末尾の1つ先の虚数成分へのポインタを返します。

[constexpr noexcept] qsizetype QModelRoleDataSpan::length() const

このオブジェクトが表すスパン長を返します。

[constexpr noexcept] qsizetype QModelRoleDataSpan::size() const

このオブジェクトが表すスパン長を返します。

[constexpr] QModelRoleData &QModelRoleDataSpan::operator[](qsizetype index) const

スパン内の位置index にある `QModelRoleData ` への、変更可能な参照を返します。

注: index は 、このスパンに対して有効なインデックスでなければなりません(0 <=index <size())。

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