本页内容

QMultiObjectRegistryRef Class

该类用于从 C++ 代码中访问已使用ObjectRegistry QML 类型注册的对象。更多内容...

头文件: #include <QMultiObjectRegistryRef>
CMake: find_package(Qt6 REQUIRED COMPONENTS QmlDesignSupport)
target_link_libraries(mytarget PRIVATE Qt6::QmlDesignSupport)
qmake: QT += qmldesignsupport
自: Qt 6.12
继承自: QAbstractObjectRegistryRef

属性

  • objects : QQmlListProperty<QObject>

公共函数

QMultiObjectRegistryRef(QObject *parent = nullptr)
QMultiObjectRegistryRef(QQmlEngine *engine, QObject *parent = nullptr)
QMultiObjectRegistryRef(QQmlEngine *engine, const QString &key, QObject *parent = nullptr)
QQmlListProperty<QObject> objects()
QList<QObject *> objectsList()

信号

void objectAdded(QObject *obj)
void objectRemoved(QObject *obj)
void objectsChanged()

重新实现的受保护函数

virtual bool event(QEvent *event) override

详细说明

通过此引用可以访问使用同一键注册的多个对象。

使用示例:

// 在 QML 文件中,注册一个会被多次创建的对象(例如 Repeater 委托)
Repeater {
    model:4
    Rectangle {
        id: qmlRepeaterDelegate
        required propertyintindex
        x:50 *index
        width:40
        height:40
        MouseArea {
            propertyintrepeaterIndex: qmlRepeaterDelegate.index
            anchors.fill: parent
            ObjectRegistry.key:"RepeatedMouseArea"
        }
    }
}

// 在 C++ 代码中,使用加载该 QML 文件时所用的 QML 引擎来引用已注册的对象
autoref= newQMultiObjectRegistryRef(engine, "RepeatedMouseArea");
const autorepeaterObjects= ref->objects();
for(autoobj : repeaterObjects) {
    connect(obj,SIGNAL(clicked(QQuickMouseEvent*)),
            this,SLOT(handleRepeaterObjectClicked()));
}

voidMyClass::handleRepeaterObjectClicked()
{
    qDebug() << "Clicked rectangle index: " << sender()->property("repeaterIndex").toInt()
}

另请参阅 ObjectRegistry 和QAbstractObjectRegistryRef::key 。

属性文档

[read-only] objects : QQmlListProperty<QObject>

该属性提供由该实例引用的对象。无法保证此列表中对象的顺序与它们的注册顺序一致。

访问函数:

QQmlListProperty<QObject> objects()

通知器信号:

void objectsChanged()

另请参阅 objectsList()、ObjectRegistry 以及AbstractObjectRegistryRef::key 。

成员函数文档

[explicit] QMultiObjectRegistryRef::QMultiObjectRegistryRef(QObject *parent = nullptr)

使用parent 创建QMultiObjectRegistryRef实例。

注意: 仅当设置键时,正确的 QML 引擎能自动为该实例解析时,才应使用 此构造函数。从 C++ 创建该类的实例时,通常无法满足这一条件。建议使用那些以 QML 引擎指针作为参数的构造函数之一。

另请参阅 qmlEngine() 和QAbstractObjectRegistryRef::key 。

[explicit] QMultiObjectRegistryRef::QMultiObjectRegistryRef(QQmlEngine *engine, QObject *parent = nullptr)

使用 QML 中的 `engine ` 和 `parent` 构造 `QMultiObjectRegistryRef` 实例。所有注册都仅限于指定的 QML 引擎。

另请参阅 QAbstractObjectRegistryRef::key 。

[explicit] QMultiObjectRegistryRef::QMultiObjectRegistryRef(QQmlEngine *engine, const QString &key, QObject *parent = nullptr)

使用 QML 中的 `engine`、`key ` 和 `parent` 构造 `QMultiObjectRegistryRef` 实例。所有注册项的作用域均限定在指定的 QML 引擎内。

另请参阅 QAbstractObjectRegistryRef::key 。

[override virtual protected] bool QMultiObjectRegistryRef::event(QEvent *event)

重写了:QAbstractObjectRegistryRef::event(QEvent *event)。

[signal] void QMultiObjectRegistryRef::objectAdded(QObject *obj)

当一个新对象(obj )使用此引用对应的键进行注册时,会触发此信号。

[signal] void QMultiObjectRegistryRef::objectRemoved(QObject *obj)

当使用此引用对应的键删除了对象(obj )的注册信息时,会触发此信号。

QList<QObject *> QMultiObjectRegistryRef::objectsList()

返回与该实例的键相匹配的已注册对象列表。

这是一个用于获取已注册对象列表的方法,该列表以QList 的形式返回。

无法保证该列表中对象的顺序与它们的注册顺序一致。

另请参阅 ` QAbstractObjectRegistryRef::key ` 和 `objects`。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.