Класс QQmlListProperty
шаблон <typename T> class QQmlListPropertyКласс QQmlListProperty позволяет приложениям предоставлять свойства, подобные списку, производным от QObject, в QML. Подробнее...
| Заголовок: | #include <QQmlListProperty> |
| CMake: | find_package(Qt6 COMPONENTS Qml REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
| qmake: | QT += qml |
| С тех пор: | Qt 5.0 |
Типы публичного интерфейса
| AppendFunction | |
| AtFunction | |
| ClearFunction | |
| CountFunction | |
| RemoveLastFunction | |
| ReplaceFunction |
Публичные функции
| QQmlListProperty(QObject *object, void *data, QQmlListProperty::CountFunction count, QQmlListProperty::AtFunction at) | |
| QQmlListProperty(QObject *object, void *data, QQmlListProperty::AppendFunction append, QQmlListProperty::CountFunction count, QQmlListProperty::AtFunction at, QQmlListProperty::ClearFunction clear, QQmlListProperty::ReplaceFunction replace, QQmlListProperty::RemoveLastFunction removeLast) | |
| QQmlListProperty(QObject *object, void *data, QQmlListProperty::AppendFunction append, QQmlListProperty::CountFunction count, QQmlListProperty::AtFunction at, QQmlListProperty::ClearFunction clear) | |
| QQmlListProperty(QObject *object, QList<T *> *list) | |
| bool | operator==(const QQmlListProperty<T> &other) const |
Макросы
| QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_APPEND | |
| QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE | |
| QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE_IF_NOT_DEFAULT |
Подробное описание
QML имеет множество свойств типа список, где можно назначить несколько значений объекта. Использование свойства списка из QML выглядит так:
FruitBasket {
fruit: [
Apple {},
Orange{},
Banana{}
]
} QQmlListProperty инкапсулирует группу указателей на функции, которые представляют набор действий, которые QML может выполнить со списком — добавление элементов, получение элементов и очистка списка. В будущем могут быть добавлены дополнительные операции. Все свойства типа список должны реализовывать операцию добавления, но остальные являются необязательными.
Для предоставления свойства типа список класс C++ должен реализовать обратные вызовы операций и затем вернуть соответствующее значение QQmlListProperty из получателя свойства. Свойства типа список не должны иметь установщик.
В примере выше декларативное свойство Q_PROPERTY() будет выглядеть так:
Q_PROPERTY(QQmlListProperty<Fruit> fruit READ fruit)
Свойства QML типа список являются типобезопасными — в данном случае Fruit — это тип QObject, от которого Apple, Orange и Banana все наследуются.
См. также Расширение QML — Пример типов свойств объекта и списка.
Документация по типам членов
[alias] QQmlListProperty::AppendFunction
Синоним для void (*)(QQmlListProperty<T> *property, T *value).
Добавляет значение в список property.
[alias] QQmlListProperty::AtFunction
Синоним для T *(*)(QQmlListProperty<T> *property, qsizetype index).
Возвращает элемент с индексом index в списке property.
[alias] QQmlListProperty::ClearFunction
Синоним для void (*)(QQmlListProperty<T> *property).
Очищает список property.
[alias] QQmlListProperty::CountFunction
Синоним для qsizetype (*)(QQmlListProperty<T> *property).
Возвращает количество элементов в списке property.
[alias] QQmlListProperty::RemoveLastFunction
Синоним для void (*)(QQmlListProperty<T> *property).
Удаляет последний элемент из списка property.
[alias] QQmlListProperty::ReplaceFunction
Синоним для void (*)(QQmlListProperty<T> *property, qsizetype index, T *value).
Заменяет элемент с индексом index в списке property на value.
Документация по функциям членов
QQmlListProperty::QQmlListProperty(QObject *object, void *data, QQmlListProperty::CountFunction count, QQmlListProperty::AtFunction at)
Создаёт только для чтения QQmlListProperty из набора функций операций count и at. Может быть передан неявный дескриптор data, к которому можно получить доступ из функций операций. Свойство списка остаётся валидным, пока существует object.
QQmlListProperty::QQmlListProperty(QObject *object, void *data, QQmlListProperty::AppendFunction append, QQmlListProperty::CountFunction count, QQmlListProperty::AtFunction at, QQmlListProperty::ClearFunction clear, QQmlListProperty::ReplaceFunction replace, QQmlListProperty::RemoveLastFunction removeLast)
Создаёт QQmlListProperty из набора функций операций append, count, at, clear, replace и removeLast. Может быть передан неявный дескриптор data, к которому можно получить доступ из функций операций. Свойство списка остаётся валидным, пока существует object.
Для любой функции можно передать null-указатель, что приведёт к синтезу соответствующей функции с помощью других, если это возможно. QQmlListProperty может синтезировать
- clear с использованием count и removeLast
- replace с использованием count, at, clear и append
- replace с использованием count, at, removeLast и append
- removeLast с использованием count, at, clear и append
если эти значения заданы. Это медленно, но если ваш список не предоставляет более быстрых вариантов для этих примитивов, вы можете использовать синтезированные.
Кроме того, если ни один из count, at, append и clear не задан явно или не синтезирован, список не будет ни проектируемым, ни изменяемым в отладчике. Рекомендуется предоставлять достаточное количество валидных указателей, чтобы избежать этой ситуации.
QQmlListProperty::QQmlListProperty(QObject *object, void *data, QQmlListProperty::AppendFunction append, QQmlListProperty::CountFunction count, QQmlListProperty::AtFunction at, QQmlListProperty::ClearFunction clear)
Создаёт QQmlListProperty из набора функций операций append, count, at и clear. Может быть передан неявный дескриптор data, к которому можно получить доступ из функций операций. Свойство списка остаётся валидным, пока существует object.
Для любой функции можно передать null-указатель. Если переданы какие-либо null-указатели, список не будет ни проектируемым, ни изменяемым в отладчике. Рекомендуется предоставлять валидные указатели для всех функций.
Примечание: Результат QQmlListProperty будет синтезировать методы removeLast() и replace() с использованием count, at, clear и append, если все они заданы. Это медленно. Если вы планируете манипулировать списком, кроме его очистки, вы должны явно предоставить эти методы.
[since 5.15] QQmlListProperty::QQmlListProperty(QObject *object, QList<T *> *list)
Удобный конструктор для создания значения QQmlListProperty из существующего QList list. Ссылка на list должна оставаться действительной до тех пор, пока существует object. object должен быть предоставлен.
Эта функция была представлена в Qt 5.15.
bool QQmlListProperty::operator==(const QQmlListProperty<T> &other) const
Возвращает true, если этот QQmlListProperty равен other, в противном случае false.
Документация макросов
QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_APPEND
Этот макрос определяет поведение свойств списка этого класса как добавления. При присваивании свойства в производном типе значения добавляются к значениям базового класса. Это поведение по умолчанию.
class FruitBasket : QObject {
\Q_OBJECT
QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_APPEND
Q_PROPERTY(QQmlListProperty<Fruit> fruit READ fruit)
public:
// ...
QQmlListProperty<Fruit> fruit();
// ...
}; См. также QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE_IF_NOT_DEFAULT и QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE.
QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE
Этот макрос определяет поведение свойств списка этого класса как замены. При присваивании свойства в производном типе значения заменяют значения базового класса.
class FruitBasket : QObject {
\Q_OBJECT
QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE
Q_PROPERTY(QQmlListProperty<Fruit> fruit READ fruit)
public:
// ...
QQmlListProperty<Fruit> fruit();
// ...
}; См. также QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_APPEND и QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE_IF_NOT_DEFAULT.
QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE_IF_NOT_DEFAULT
Этот макрос определяет поведение свойств списка этого класса как замены, если не по умолчанию. При присваивании свойства в производном типе значения заменяют значения базового класса, если это не свойство по умолчанию. В случае свойства по умолчанию значения добавляются к значениям базового класса.
class FruitBasket : QObject {
\Q_OBJECT
QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE_IF_NOT_DEFAULT
Q_PROPERTY(QQmlListProperty<Fruit> fruit READ fruit)
public:
// ...
QQmlListProperty<Fruit> fruit();
// ...
}; См. также QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_APPEND и QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qqmllistproperty.html