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 に設定され、その長さはゼロに設定されます。

[constexpr noexcept(...)] template <typename Container, QModelRoleDataSpan::if_compatible_container<Container> = true> 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)

1 要素の配列とみなされるmodelRoleData にまたがる QModelRoleDataSpan を構築します。

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

QModelRoleDataSpan をmodelRoleData から始まり、長さlen の配列に渡って構築します。

注: このオブジェクトが破壊されない限り、配列は維持されなければならない。

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

このオブジェクトが表すスパンの開始点へのポインタを返します。

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

このオブジェクトが表すスパンの開始点へのポインタを返します。

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

役割が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())。

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