Spec-Zone.ru › Qt

Класс QModelRoleDataSpan

Класс QModelRoleDataSpan предоставляет диапазон объектов QModelRoleData. Подробнее...

Заголовок: #include <QModelRoleDataSpan>
CMake: find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
С момента: Qt 6.0
  • Список всех членов, включая унаследованные

Открытые функции

QModelRoleDataSpan(Container &c)
QModelRoleDataSpan(QModelRoleData *modelRoleData, qsizetype len)
QModelRoleDataSpan(QModelRoleData &modelRoleData)
QModelRoleDataSpan()
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 заключается в том, чтобы модель могла возвращать данные, соответствующие различным ролям, в одном вызове.

Для того, чтобы отобразить один элемент из модели, вид (через свои делегаты) обычно запрашивает несколько ролей для одного и того же индекса, вызывая data() столько раз, сколько нужно:

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

QModelRoleDataSpan позволяет виду запросить те же данные с помощью всего одного вызова функции.

Это достигается тем, что вид подготавливает подходящий массив объектов 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().

Документация по функциям-членам

шаблон <typename Container, if_compatible_container<Container>> QModelRoleDataSpan::QModelRoleDataSpan(Container &c)

Создаёт QModelRoleDataSpan, охватывающий контейнер c, который может быть любым непрерывным контейнером объектов QModelRoleData. Например, это может быть QVector<QModelRoleData>, std::array<QModelRoleData, 10> и так далее.

Примечание: Контейнер должен оставаться активным до тех пор, пока этот объект не будет уничтожен.

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

Создаёт QModelRoleDataSpan, охватывающий массив, начинающийся с modelRoleData и имеющий длину len.

Примечание: Массив должен оставаться активным до тех пор, пока этот объект не будет уничтожен.

QModelRoleDataSpan::QModelRoleDataSpan(QModelRoleData &modelRoleData)

Создаёт QModelRoleDataSpan, охватывающий modelRoleData, рассматриваемый как массив из 1 элемента.

QModelRoleDataSpan::QModelRoleDataSpan()

Создаёт пустой QModelRoleDataSpan. Его data() будет установлен в nullptr, а длина — в ноль.

QModelRoleData *QModelRoleDataSpan::begin() const

Возвращает указатель на начало диапазона, представленного этим объектом.

QModelRoleData *QModelRoleDataSpan::data() const

Возвращает указатель на начало диапазона, представленного этим объектом.

QVariant *QModelRoleDataSpan::dataForRole(int role) const

Возвращает данные, связанные с первым QModelRoleData в диапазоне, у которого роль равна role. Если такого объекта QModelRoleData не существует, поведение не определено.

Примечание: Избегайте вызова этой функции со стороны модели, так как модель не может знать заранее, какие роли находятся в данном QModelRoleDataSpan. Эта функция подходит для видов и делегатов, которые контролируют роли в диапазоне.

См. также QModelRoleData::data().

QModelRoleData *QModelRoleDataSpan::end() const

Возвращает указатель на воображаемый элемент, следующий за концом диапазона, представленного этим объектом.

qsizetype QModelRoleDataSpan::length() const

Возвращает длину диапазона, представленного этим объектом.

qsizetype QModelRoleDataSpan::size() const

Возвращает длину диапазона, представленного этим объектом.

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

Возвращает ссылку на изменяемый элемент QModelRoleData в позиции index в диапазоне.

Примечание: index должен быть корректным индексом для этого диапазона (0 <= index < size()).

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qmodelroledataspan.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API