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