QtBase  v6.3.1
Public Member Functions | List of all members
QModelRoleDataSpan Class Reference

The QModelRoleDataSpan class provides a span over QModelRoleData objects. More...

#include <qabstractitemmodel.h>

Public Member Functions

constexpr QModelRoleDataSpan () noexcept
 
constexpr QModelRoleDataSpan (QModelRoleData &modelRoleData) noexcept
 
constexpr QModelRoleDataSpan (QModelRoleData *modelRoleData, qsizetype len)
 
template<typename Container , if_compatible_container< Container > = true>
constexpr QModelRoleDataSpan (Container &c) noexcept(noexcept(std::data(c)) &&noexcept(std::size(c)))
 
constexpr qsizetype size () const noexcept
 
constexpr qsizetype length () const noexcept
 
constexpr QModelRoleDatadata () const noexcept
 
constexpr QModelRoleDatabegin () const noexcept
 
constexpr QModelRoleDataend () const noexcept
 
constexpr QModelRoleDataoperator[] (qsizetype index) const
 
constexpr QVariantdataForRole (int role) const
 

Detailed Description

The QModelRoleDataSpan class provides a span over QModelRoleData objects.

\inmodule QtCore

Since
6.0

A QModelRoleDataSpan is used as an abstraction over an array of QModelRoleData objects.

Like a view, QModelRoleDataSpan provides a small object (pointer and size) that can be passed to functions that need to examine the contents of the array. A QModelRoleDataSpan can be constructed from any array-like sequence (plain arrays, QVector, std::vector, QVarLengthArray, and so on). Moreover, it does not own the sequence, which must therefore be kept alive longer than any QModelRoleDataSpan objects referencing it.

Unlike a view, QModelRoleDataSpan is a span, so it allows for modifications to the underlying elements.

QModelRoleDataSpan's main use case is making it possible for a model to return the data corresponding to different roles in one call.

In order to draw one element from a model, a view (through its delegates) will generally request multiple roles for the same index by calling {data()} as many times as needed:

QModelRoleDataSpan allows a view to request the same data using just one function call.

This is achieved by having the view prepare a suitable array of QModelRoleData objects, each initialized with the role that should be fetched. The array is then wrapped in a QModelRoleDataSpan object, which is then passed to a model's {multiData()} function.

Views are encouraged to store the array of QModelRoleData objects (and, possibly, the corresponding span) and re-use it in subsequent calls to the model. This allows to reduce the memory allocations related with creating and returning QVariant objects.

Finally, given a QModelRoleDataSpan object, the model's responsibility is to fill in the data corresponding to each role in the span. How this is done depends on the concrete model class. Here's a sketch of a possible implementation that iterates over the span and uses {setData()} on each element:

See also
{Model/View Programming}, QAbstractItemModel::multiData()

Definition at line 101 of file qabstractitemmodel.h.

Constructor & Destructor Documentation

◆ QModelRoleDataSpan() [1/4]

QModelRoleDataSpan::QModelRoleDataSpan ( )
inlineconstexprnoexcept

Constructs an empty QModelRoleDataSpan. Its data() will be set to \nullptr, and its length to zero.

Definition at line 110 of file qabstractitemmodel.h.

◆ QModelRoleDataSpan() [2/4]

QModelRoleDataSpan::QModelRoleDataSpan ( QModelRoleData modelRoleData)
inlineconstexprnoexcept

Constructs an QModelRoleDataSpan spanning over modelRoleData, seen as a 1-element array.

Definition at line 112 of file qabstractitemmodel.h.

◆ QModelRoleDataSpan() [3/4]

QModelRoleDataSpan::QModelRoleDataSpan ( QModelRoleData modelRoleData,
qsizetype  len 
)
inlineconstexpr

Constructs an QModelRoleDataSpan spanning over the array beginning at modelRoleData and with length len.

Note
The array must be kept alive as long as this object has not been destructed.

Definition at line 117 of file qabstractitemmodel.h.

◆ QModelRoleDataSpan() [4/4]

template<typename Container , if_compatible_container< Container > = true>
template< typename Container > QModelRoleDataSpan::QModelRoleDataSpan ( Container c)
inlineconstexprnoexcept

Constructs an QModelRoleDataSpan spanning over the container c, which can be any contiguous container of QModelRoleData objects. For instance, it can be a {QVector<QModelRoleData>}, a {std::array<QModelRoleData, 10>} and so on.

Note
The container must be kept alive as long as this object has not been destructed.

Definition at line 123 of file qabstractitemmodel.h.

Member Function Documentation

◆ begin()

QModelRoleData * QModelRoleDataSpan::begin ( ) const
inlineconstexprnoexcept

Returns a pointer to the beginning of the span represented by this object.

Definition at line 131 of file qabstractitemmodel.h.

Here is the caller graph for this function:

◆ data()

QModelRoleData * QModelRoleDataSpan::data ( ) const
inlineconstexprnoexcept

Returns a pointer to the beginning of the span represented by this object.

Definition at line 130 of file qabstractitemmodel.h.

Here is the caller graph for this function:

◆ dataForRole()

const QVariant * QModelRoleDataSpan::dataForRole ( int  role) const
inlineconstexpr

Returns the data associated with the first QModelRoleData in the span that has its role equal to role. If such a QModelRoleData object does not exist, the behavior is undefined.

Note
Avoid calling this function from the model's side, as a model cannot possibly know in advance which roles are in a given QModelRoleDataSpan. This function is instead suitable for views and delegates, which have control over the roles in the span.
See also
QModelRoleData::data()

Definition at line 135 of file qabstractitemmodel.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ end()

QModelRoleData * QModelRoleDataSpan::end ( ) const
inlineconstexprnoexcept

Returns a pointer to the imaginary element one past the end of the span represented by this object.

Definition at line 132 of file qabstractitemmodel.h.

Here is the caller graph for this function:

◆ length()

qsizetype QModelRoleDataSpan::length ( ) const
inlineconstexprnoexcept

Returns the length of the span represented by this object.

Definition at line 129 of file qabstractitemmodel.h.

◆ operator[]()

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

Returns a modifiable reference to the QModelRoleData at position index in the span.

Note
index must be a valid index for this span (0 <= index < size()).

Definition at line 133 of file qabstractitemmodel.h.

◆ size()

qsizetype QModelRoleDataSpan::size ( ) const
inlineconstexprnoexcept

Returns the length of the span represented by this object.

Definition at line 128 of file qabstractitemmodel.h.


The documentation for this class was generated from the following files: