QQmlListProperty 类

template <typename T> class QQmlListProperty

QQmlListProperty 类允许应用程序将基于 QObject 的类的类似列表属性暴露给 QML。 更多...

头文件 #include <QQmlListProperty>
CMakefind_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmakeQT += qml

公共类型

公共函数

QQmlListProperty(QObject *object, QList<T *> *list)
QQmlListProperty(QObject *object, void *data, QQmlListProperty<T>::AppendFunction append, QQmlListProperty<T>::CountFunction count, QQmlListProperty<T>::AtFunction at, QQmlListProperty<T>::ClearFunction clear)
QQmlListProperty(QObject *object, void *data, QQmlListProperty<T>::AppendFunction append, QQmlListProperty<T>::CountFunction count, QQmlListProperty<T>::AtFunction at, QQmlListProperty<T>::ClearFunction clear, QQmlListProperty<T>::ReplaceFunction replace, QQmlListProperty<T>::RemoveLastFunction removeLast)
QQmlListProperty(QObject *object, void *data, QQmlListProperty<T>::CountFunction count, QQmlListProperty<T>::AtFunction at)
booloperator==(const QQmlListProperty<T> &other) const

详细描述

QML 有许多列表属性,可以分配多个对象值。从 QML 使用列表属性的样子是这样的

FruitBasket {
    fruit: [
        Apple {},
        Orange{},
        Banana{}
    ]
}

QQmlListProperty 封装了一组表示 QML 可以在列表上执行的动作(添加项、检索项和清除列表)的功能指针集合。将来可能会支持更多操作。所有列表属性都必须实现 append 操作,但其余的是可选的。

为了提供一个列表属性,C++ 类必须实现操作回调,然后从属性获取器返回适当的 QQmlListProperty 值。列表属性应该没有设置器。在上面的例子中,Q_PROPERTY() 声明将看起来像这样

Q_PROPERTY(QQmlListProperty<Fruit> fruit READ fruit)

QML 列表属性是类型安全的 - 在这种情况下 Fruit 是一个 QObject 类型,AppleOrangeBanana 都是从它继承的。

另请参阅 第五章:使用列表属性类型.

成员类型文档

[别名] QQmlListProperty::AppendFunction

等同于 void (*)(QQmlListProperty *property, T *value).

value 添加到列表 property 中。

[别名] QQmlListProperty::AtFunction

等同于 T *(*)(QQmlListProperty *property, qsizetype index).

返回列表 property 中位置 index 的元素。

[别名] QQmlListProperty::ClearFunction

等同于 void (*)(QQmlListProperty *property).

清除列表 property

[别名] QQmlListProperty::CountFunction

等同于 qsizetype (*)(QQmlListProperty *property).

返回列表 property 中元素的数量。

[别名] QQmlListProperty::RemoveLastFunction

等同于 void (*)(QQmlListProperty *property).

从列表 property 中移除最后一个元素。

[别名] QQmlListProperty::ReplaceFunction

等同于 void (*)(QQmlListProperty *property, qsizetype index, T *value).

将列表 property 中位置 index 的元素用 value 替换。

成员函数文档

QQmlListProperty::QQmlListProperty(QObject *object, QList<T *> *list)

从现有的 QList list 创建 QQmlListProperty 值的便捷构造函数。在 object 存在期间,list 引用必须保持有效。必须提供 object

QQmlListProperty::QQmlListProperty(QObject *object, void *data, QQmlListProperty::AppendFunction append, QQmlListProperty::CountFunction count, QQmlListProperty::AtFunction at, QQmlListProperty::ClearFunction clear)

通过操作函数 appendcountatclear 构建一个 QQmlListProperty。可以传递一个不透明的 data 处理器,它可以在操作函数内部访问。只要 object 存在,列表属性就有效。

对于任何函数都可以传递空指针。如果传递了任何空指针,列表将既不可设计也不可由调试器更改。建议为所有函数提供有效的指针。

注意:如果提供了所有这些操作,则生成的 QQmlListProperty 将使用 countatclearappend 生成 removeLast() 和 replace() 方法。这很慢。如果您打算对列表进行操作而不仅仅是清除它,请显式提供这些方法。

QQmlListProperty::QQmlListProperty(QObject *object, void *data, QQmlListProperty<T>::AppendFunction append, QQmlListProperty<T>::CountFunction count, QQmlListProperty<T>::AtFunction at, QQmlListProperty<T>::ClearFunction clear, QQmlListProperty<T>::ReplaceFunction replace, QQmlListProperty<T>::RemoveLastFunction removeLast)

通过一系列操作函数 appendcountatclearreplace 和 removeLast 构造一个 QQmlListProperty。可以传递一个不可见的 data 处理来在操作函数内部访问。当 object 存在时,列表属性保持有效。

对于任何函数可以通过传递空指针来调用,如果可能,将使用其他函数生成相应的函数。QQmlListProperty 可以使用

  • clear 使用 countremoveLast
  • replace 使用 countatclearappend
  • replace 使用 countatremoveLastappend
  • removeLast 使用 countatclearappend

如果是给定的情况下。这样会很慢,但如果你的列表没有为这些原语提供更快的选项,您可能希望使用生成的函数。

此外,如果 countatappend、和 clear 既没有明确给出也没有合成,列表将不能由调试器设计和更改。建议提供足够的有效指针以避免此情况。

QQmlListProperty::QQmlListProperty(QObject *object, void *data, QQmlListProperty<T>::CountFunction count, QQmlListProperty<T>::AtFunction at)

从一系列操作函数 countat 构造一个只读 QQmlListProperty。可以传递一个不可见的 data 处理来在操作函数内部访问。当 object 存在时,列表属性保持有效。

bool QQmlListProperty::operator==(const QQmlListProperty<T> &other) const

如果此 QQmlListPropertyother 相等,则返回 true,否则返回 false。

宏文档

QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_APPEND

此宏定义了此类列表属性的行为为 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_DEFAULTQML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE通过 QML 文档定义对象类型

QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE

此宏定义了此类列表属性的行为为 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_APPENDQML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE_IF_NOT_DEFAULT通过 QML 文档定义对象类型

QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE_IF_NOT_DEFAULT

此宏定义了此类列表属性的替代IfNotDefault行为。在派生类中分配属性时,除非是默认属性,否则值将替换基类的值。在默认属性的情况下,值将被添加到基类的值中。

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_APPENDQML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE通过 QML 文档定义对象类型

© 2024 Qt 公司。此处包含的文档贡献属于各自所有者的版权。此处提供的文档根据自由软件基金会发布的 GNU 自由文档许可协议版本 1.3 的条款进行许可。Qt 及其相应标志是芬兰以及/或在其他国家和地区 Qt 公司的商标。所有其他商标均为其各自所有者的财产。