Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qquick3drepeater_p.h
Go to the documentation of this file.
1// Copyright (C) 2019 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#ifndef QQUICK3DREPEATER_P_H
5#define QQUICK3DREPEATER_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtQuick3D/private/qquick3dnode_p.h>
19
20#include <QtQmlModels/private/qqmldelegatemodel_p.h>
21
22#include <QtCore/qvector.h>
23#include <QtCore/qpointer.h>
24
25QT_BEGIN_NAMESPACE
26class QQmlChangeSet;
27class QQmlContext;
28class QQmlInstanceModel;
29class QQuick3DRepeaterPrivate;
30
31class Q_QUICK3D_EXPORT QQuick3DRepeater : public QQuick3DNode
32{
33 Q_OBJECT
34
35 Q_PROPERTY(QVariant model READ model WRITE setModel NOTIFY modelChanged)
36 Q_PROPERTY(QQmlComponent *delegate READ delegate WRITE setDelegate NOTIFY delegateChanged)
37 Q_PROPERTY(int count READ count NOTIFY countChanged)
38 Q_PROPERTY(QQmlDelegateModel::DelegateModelAccess delegateModelAccess READ delegateModelAccess
39 WRITE setDelegateModelAccess NOTIFY delegateModelAccessChanged REVISION(6, 10) FINAL)
40
41 Q_CLASSINFO("DefaultProperty", "delegate")
42
43 QML_NAMED_ELEMENT(Repeater3D)
44
45public:
46 QQuick3DRepeater(QQuick3DNode *parent = nullptr);
47 ~QQuick3DRepeater() override;
48
49 QVariant model() const;
50 void setModel(const QVariant &);
51
52 QQmlComponent *delegate() const;
53 void setDelegate(QQmlComponent *);
54
55 int count() const;
56
57 Q_INVOKABLE QQuick3DObject *objectAt(int index) const;
58
59 QQmlDelegateModel::DelegateModelAccess delegateModelAccess() const;
60 void setDelegateModelAccess(QQmlDelegateModel::DelegateModelAccess delegateModelAccess);
61
62Q_SIGNALS:
63 void modelChanged();
64 void delegateChanged();
65 void countChanged();
66
67 void objectAdded(int index, QQuick3DObject *object);
68 void objectRemoved(int index, QQuick3DObject *object);
69
70 Q_REVISION(6, 10) void delegateModelAccessChanged();
71
72private:
73 void clear();
74 void regenerate();
75
76protected:
77 void componentComplete() override;
78 void itemChange(ItemChange change, const ItemChangeData &value) override;
79 virtual void initDelegate(int, QQuick3DNode *) {}
80
81private Q_SLOTS:
82 void createdObject(int index, QObject *item);
83 void initObject(int, QObject *item);
84 void modelUpdated(const QQmlChangeSet &changeSet, bool reset);
85
86private:
87 Q_DISABLE_COPY(QQuick3DRepeater)
88
89 void requestItems();
90 void applyDelegateChange();
91 QQmlDelegateModel *createDelegateModel();
92
93 void connectModel(QQmlDelegateModelPointer *model);
94 void disconnectModel(QQmlDelegateModelPointer *model);
95
96 QPointer<QQmlInstanceModel> m_model;
97 int m_itemCount;
98 bool m_ownModel : 1;
99 bool m_delegateValidated : 1;
100 bool m_explicitDelegate: 1;
101 bool m_explicitDelegateModelAccess : 1;
102
103 QVector<QPointer<QQuick3DNode> > m_deletables;
104};
105
106QT_END_NAMESPACE
107
108QML_DECLARE_TYPE(QQuick3DRepeater)
109
110#endif // QQUICK3DREPEATER_P_H