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
qqmltreerow.cpp
Go to the documentation of this file.
1// Copyright (C) 2025 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
6
7#include <QtCore/qjsonobject.h>
8
10
11using namespace Qt::Literals::StringLiterals;
12
14 : m_parent(parentItem)
15{
16
17}
18
19QQmlTreeRow::QQmlTreeRow(const QVariant &data, QQmlTreeRow *parentItem)
20 : m_parent(parentItem)
21{
22 QVariantMap variantMap = data.toMap();
23 unpackVariantMap(variantMap);
24}
25
26QQmlTreeRow::QQmlTreeRow(const QVariantMap &data, QQmlTreeRow *parentItem)
27 : m_parent(parentItem)
28{
29 unpackVariantMap(data);
30}
31
33{
34 m_children.push_back(std::unique_ptr<QQmlTreeRow>(child));
35 child->setParent(this);
36}
37
38void QQmlTreeRow::insertChild(int index, std::unique_ptr<QQmlTreeRow> child)
39{
40 child->setParent(this);
41 m_children.insert(m_children.begin() + index, std::move(child));
42}
43
44void QQmlTreeRow::unpackVariantMap(const QVariantMap &variantMap)
45{
46 for (auto it = variantMap.begin(); it != variantMap.end(); ++it) {
47 const QString& key = it.key();
48 const QVariant& value = it.value();
49
50 if ((value.typeId() == QMetaType::Type::QVariantList) && (key == ROWS_PROPERTY_NAME)) {
51 const QList<QVariant> variantList = value.toList();
52 for (const QVariant &rowAsVariant : variantList)
53 m_children.push_back(std::make_unique<QQmlTreeRow>(rowAsVariant, this));
54 } else {
55 dataMap.insert(key, value);
56 }
57 }
58}
59
60void QQmlTreeRow::removeChild(std::vector<std::unique_ptr<QQmlTreeRow>>::const_iterator &child)
61{
62 m_children.erase(child);
63}
64
66{
67 m_children.erase(std::next(m_children.begin(), i));
68}
69
71{
72 auto it = std::next(m_children.begin(), i);
73 std::unique_ptr<QQmlTreeRow> child = std::move(*it);
74 m_children.erase(it);
75 return child;
76}
77
78void QQmlTreeRow::setData(const QVariant &data)
79{
80 dataMap.clear();
81 const QVariantMap variantMap = data.toJsonObject().toVariantMap();
82 unpackVariantMap(variantMap);
83}
84
85void QQmlTreeRow::setData(const QVariantMap &data)
86{
87 dataMap.clear();
88 unpackVariantMap(data);
89}
90
91void QQmlTreeRow::setField(const QString &key, const QVariant &value)
92{
93 if (dataMap.contains(key))
94 dataMap[key] = value;
95}
96
98{
99 QVariantMap variantMap(dataMap);
100
101 if (!m_children.empty()) {
102 QVariantList children;
103 for (const auto &child : m_children)
104 children.append(child->toVariant());
105
106 variantMap[ROWS_PROPERTY_NAME] = children;
107 }
108
109 return variantMap;
110}
111
113{
114 int size = 1;
115
116 for (const auto &child : m_children)
117 size += child->subTreeSize();
118
119 return size;
120}
121
122QT_END_NAMESPACE
void addChild(QQmlTreeRow *child)
QVariant toVariant() const
std::unique_ptr< QQmlTreeRow > takeChild(int i)
void setData(const QVariant &data)
void setParent(QQmlTreeRow *parent)
void setField(const QString &key, const QVariant &value)
void removeChild(std::vector< std::unique_ptr< QQmlTreeRow > >::const_iterator &child)
QQmlTreeRow(QQmlTreeRow *parentItem=nullptr)
int subTreeSize() const
QQmlTreeRow(const QVariant &data, QQmlTreeRow *parentItem=nullptr)
void insertChild(int index, std::unique_ptr< QQmlTreeRow > child)
void removeChildAt(int i)
Combined button and popup list for selecting options.