QModelRoleDataSpan Class

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

Header: #include <QModelRoleDataSpan>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Since: 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)) "が真である場合、例外をスローしません。

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

1 要素配列とみなされるmodelRoleData にまたがる 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

その役割がrole に等しいスパンの最初のQModelRoleData に関連付けられたデータを返す。 そのようなQModelRoleData オブジェクトが存在しない場合、動作は未定義である。

注意: この関数をモデル側から呼び出すことは避けてください。モデルは、与えられたQModelRoleDataSpan の中にどのロールがあるかを事前に知ることができないからです。この関数は、スパン内のロールを制御するビューやデリゲートに適しています。

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

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

このオブジェクトによって表現されるスパンの終端から1つ過ぎた虚数要素へのポインタを返します。

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

span関数は、このオブジェクトが表すスパンの長さを返します。

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

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

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

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

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

©2024 The Qt Company Ltd. 本文書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。