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
instancerepeater_p.h
Go to the documentation of this file.
1// Copyright (C) 2022 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4//
5// W A R N I N G
6// -------------
7//
8// This file is not part of the Qt API. It exists purely as an
9// implementation detail. This header file may change from version to
10// version without notice, or even be removed.
11//
12// We mean it.
13//
14
15#ifndef INSTANCEREPEATER_P_H
16#define INSTANCEREPEATER_P_H
17
18#include <QtQuick3DHelpers/qtquick3dhelpersexports.h>
19#include <QtQuick3D/qquick3dinstancing.h>
20#include <QtQuick3D/private/qquick3drepeater_p.h>
21#include <QAbstractListModel>
22
24
25class Q_QUICK3DHELPERS_EXPORT InstanceModel : public QAbstractListModel
26{
27 Q_OBJECT
28 Q_PROPERTY(QQuick3DInstancing *instancingTable READ instancing WRITE setInstancing NOTIFY instancingChanged)
29 QML_NAMED_ELEMENT(InstanceModel)
30 QML_ADDED_IN_VERSION(6, 4)
31
32public:
33 explicit InstanceModel(QObject *parent = nullptr);
34
35 QVariant data(const QModelIndex &index, int role) const override;
36 int rowCount(const QModelIndex &parent) const override;
37
38 QQuick3DInstancing *instancing() const { return m_instancing; }
39 void setInstancing(QQuick3DInstancing *instancing);
40
41 const QQuick3DInstancing::InstanceTableEntry *instanceData(int index) const;
42
43 enum Roles {
44 PositionRole, RotationRole, ScaleRole, ColorRole, CustomDataRole
45 };
46
47 QHash<int, QByteArray> roleNames() const override {
48 return {
49 { ColorRole, "modelColor" },
50 { PositionRole, "modelPosition" },
51 { RotationRole, "modelRotation"},
52 { ScaleRole, "modelScale"},
53 { CustomDataRole, "modelData"}
54 };
55 }
56
57private slots:
58 void reset();
59
60signals:
61 void instancingChanged();
62
63private:
64 void ensureTable() const;
65
66 QQuick3DInstancing *m_instancing = nullptr;
67
68 QByteArray m_instanceData;
69 int m_count = 0;
70 QMetaObject::Connection m_tableConnection;
71};
72
73class Q_QUICK3DHELPERS_EXPORT InstanceRepeater : public QQuick3DRepeater
74{
75 Q_OBJECT
76 Q_PROPERTY(QQuick3DInstancing *instancingTable READ instancing WRITE setInstancing NOTIFY instancingChanged)
77 QML_NAMED_ELEMENT(InstanceRepeater)
78 QML_ADDED_IN_VERSION(6, 4)
79
80public:
81 explicit InstanceRepeater(QQuick3DNode *parent = nullptr);
82 QQuick3DInstancing *instancing() const;
83 void setInstancing(QQuick3DInstancing *instancing);
84signals:
85 void instancingChanged();
86protected:
87 void initDelegate(int index, QQuick3DNode *node) override;
88private:
89 InstanceModel *m_model = nullptr;
90};
91QT_END_NAMESPACE
92#endif // INSTANCEREPEATER_P_H