Класс 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).
Добавить 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.
Для любой функции могут быть переданы нулевые указатели, что приведет к синтезу соответствующей функции с использованием других функций, если это возможно. 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.
Для любой функции могут быть переданы нулевые указатели. Если переданы любые нулевые указатели, список нельзя будет ни задавать, ни изменять в отладчике. Рекомендуется передавать действительные указатели для всех функций.
Примечание: Полученное свойство 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.2/qqmllistproperty.html