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
qquickitemgenerator.cpp
Go to the documentation of this file.
1// Copyright (C) 2024 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
5#include "utils_p.h"
7
8#include <private/qsgcurveprocessor_p.h>
9#include <private/qquickshape_p.h>
10#include <private/qquadpath_p.h>
11#include <private/qquickitem_p.h>
12#include <private/qquickimagebase_p_p.h>
13#include <private/qquickanimation_p.h>
14#include <private/qquicktext_p.h>
15#include <private/qquicktranslate_p.h>
16#include <private/qquickimage_p.h>
17
18#include <QtCore/qloggingcategory.h>
19#include <QtCore/qstandardpaths.h>
20#include <QtQml/qqmlcomponent.h>
21
23
24QQuickItemGenerator::QQuickItemGenerator(const QString fileName,
25 QQuickVectorImageGenerator::GeneratorFlags flags,
26 QQuickItem *parentItem,
27 QQmlContext *ctx)
28 : QQuickQmlGenerator(fileName, flags, QString{})
29 , m_parentItem(parentItem)
30 , m_qmlContext(ctx)
31{
32 setRetainFilePaths(true);
33
34 QString tmpDir = QStandardPaths::writableLocation(QStandardPaths::TempLocation);
35 setAssetFileDirectory(tmpDir);
36 setAssetFilePrefix(QStringLiteral("_qt_vectorimage_"));
37 setUrlPrefix(QStringLiteral("file:"));
38}
39
40QQuickItemGenerator::~QQuickItemGenerator()
41{
42}
43
44bool QQuickItemGenerator::generateRootNode(const StructureNodeInfo &info)
45{
46 if (Q_UNLIKELY(errorState()))
47 return false;
48
49 bool cont = QQuickQmlGenerator::generateRootNode(info);
50 if (info.stage == StructureNodeStage::End) {
51 if (m_qmlContext == nullptr) {
52 qCWarning(lcQuickVectorImage) << "QQuickItemGenerator::generateRootItem: Requires QML context";
53 return false;
54 }
55
56 QQmlEngine *engine = m_qmlContext->engine();
57 if (engine == nullptr) {
58 qCWarning(lcQuickVectorImage) << "QQuickItemGenerator::generateRootItem: Requires QML engine";
59 return false;
60 }
61
62 QQmlComponent component(engine);
63 component.setData(m_result.data(), QUrl{});
64 QObject *obj = component.create(m_qmlContext);
65 QQuickItem *rootItem = qobject_cast<QQuickItem *>(obj);
66 if (rootItem == nullptr) {
67 delete obj;
68
69 qCWarning(lcQuickVectorImage) << "QQuickItemGenerator::generateRootItem: Root item not a QQuickItem: " << component.errorString();
70 return false;
71 }
72
73 m_parentItem->setImplicitWidth(rootItem->width());
74 m_parentItem->setImplicitHeight(rootItem->height());
75
76 rootItem->setParent(m_parentItem);
77 rootItem->setParentItem(m_parentItem);
78 }
79
80 return cont;
81}
82
83QT_END_NAMESPACE
Combined button and popup list for selecting options.