QmlMaterial 0.1.0
Loading...
Searching...
No Matches
item_holder.hpp
1#pragma once
2
3#include <QQuickItem>
4#include <QPointer>
5#include <functional>
6#include "qml_material/export.hpp"
7
8namespace qml_material
9{
10class QML_MATERIAL_API ItemHolder : public QQuickItem {
11 Q_OBJECT
12 QML_ELEMENT
13 Q_PROPERTY(QQuickItem* item READ item WRITE setItem NOTIFY itemChanged FINAL)
14 Q_PROPERTY(qreal itemImplicitWidth READ itemImplicitWidth NOTIFY itemImplicitSizeChanged FINAL)
15 Q_PROPERTY(
16 qreal itemImplicitHeight READ itemImplicitHeight NOTIFY itemImplicitSizeChanged FINAL)
17public:
18 explicit ItemHolder(QQuickItem* parent = nullptr): QQuickItem(parent) {}
19 ~ItemHolder() override;
20 QQuickItem* item() const { return m_item; }
21 void setItem(QQuickItem*);
22 qreal itemImplicitWidth() const;
23 qreal itemImplicitHeight() const;
24 Q_SIGNAL void itemChanged();
25 Q_SIGNAL void itemImplicitSizeChanged();
26
27protected:
28 void classBegin() override;
29
30private:
31 QPointer<QQuickItem> m_item;
32 QQuickItem* m_identity = nullptr;
33 QList<QMetaObject::Connection> m_connections;
34 std::function<void()> m_releaseBinding;
35 quint64 m_revision = 0;
36};
37} // namespace qml_material