Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qqmltypeloaderthread.cpp
Go to the documentation of this file.
1// Copyright (C) 2019 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
4#include <private/qqmlengine_p.h>
5#include <private/qqmlextensionplugin_p.h>
6#include <private/qqmltypeloaderthread_p.h>
7
8#if QT_CONFIG(qml_network)
9#include <private/qqmltypeloadernetworkreplyproxy_p.h>
10#endif
11
13
15 : m_loader(loader)
16{
17 // Do that after initializing all the members.
18 startup();
19}
20
21#if QT_CONFIG(qml_network)
22QNetworkAccessManager *QQmlTypeLoaderThread::networkAccessManager() const
23{
25 if (!m_networkAccessManager) {
26 m_networkAccessManager = QQmlEnginePrivate::get(m_loader->engine())->createNetworkAccessManager(nullptr);
28 m_networkReplyProxy = new QQmlTypeLoaderNetworkReplyProxy(m_loader);
30 }
31
32 return m_networkAccessManager;
33}
34
35QQmlTypeLoaderNetworkReplyProxy *QQmlTypeLoaderThread::networkReplyProxy() const
36{
38 Q_ASSERT(m_networkReplyProxy); // Must call networkAccessManager() first
39 return m_networkReplyProxy;
40}
41#endif // qml_network
42
44{
45 callMethodInThread(&This::loadThread, b);
46}
47
49{
50 postMethodToThread(&This::loadThread, b);
51}
52
54{
55 callMethodInThread(&This::loadWithStaticDataThread, b, d);
56}
57
59{
60 postMethodToThread(&This::loadWithStaticDataThread, b, d);
61}
62
64{
65 callMethodInThread(&This::loadWithCachedUnitThread, b, unit);
66}
67
69{
70 postMethodToThread(&This::loadWithCachedUnitThread, b, unit);
71}
72
74{
75#if !QT_CONFIG(thread)
76 if (!isThisThread())
77 postMethodToThread(&This::callCompletedMain, b);
78#else
79 postMethodToMain(&This::callCompletedMain, b);
80#endif
81}
82
84{
85#if !QT_CONFIG(thread)
86 if (!isThisThread())
87 postMethodToThread(&This::callDownloadProgressChangedMain, b, p);
88#else
89 postMethodToMain(&This::callDownloadProgressChangedMain, b, p);
90#endif
91}
92
94 const char *uri)
95{
96 callMethodInMain(&This::initializeExtensionMain, iface, uri);
97}
98
100 const char *uri)
101{
102 callMethodInMain(&This::initializeEngineExtensionMain, iface, uri);
103}
104
105void QQmlTypeLoaderThread::loadThread(const QQmlDataBlob::Ptr &b)
106{
107 m_loader->loadThread(b);
108}
109
110void QQmlTypeLoaderThread::loadWithStaticDataThread(const QQmlDataBlob::Ptr &b, const QByteArray &d)
111{
112 m_loader->loadWithStaticDataThread(b, d);
113}
114
115void QQmlTypeLoaderThread::loadWithCachedUnitThread(const QQmlDataBlob::Ptr &b, const QQmlPrivate::CachedQmlUnit *unit)
116{
117 m_loader->loadWithCachedUnitThread(b, unit);
118}
119
120void QQmlTypeLoaderThread::callCompletedMain(const QQmlDataBlob::Ptr &b)
121{
122#ifdef DATABLOB_DEBUG
123 qWarning("QQmlTypeLoaderThread: %s completed() callback", qPrintable(b->urlString()));
124#endif
125 b->completed();
126}
127
128void QQmlTypeLoaderThread::callDownloadProgressChangedMain(const QQmlDataBlob::Ptr &b, qreal p)
129{
130#ifdef DATABLOB_DEBUG
131 qWarning("QQmlTypeLoaderThread: %s downloadProgressChanged(%f) callback",
132 qPrintable(b->urlString()), p);
133#endif
134 b->downloadProgressChanged(p);
135}
136
137void QQmlTypeLoaderThread::initializeExtensionMain(QQmlExtensionInterface *iface,
138 const char *uri)
139{
140 Q_ASSERT(m_loader->engine()->thread() == QThread::currentThread());
141 iface->initializeEngine(m_loader->engine(), uri);
142}
143
144void QQmlTypeLoaderThread::initializeEngineExtensionMain(QQmlEngineExtensionInterface *iface,
145 const char *uri)
146{
147 Q_ASSERT(m_loader->engine()->thread() == QThread::currentThread());
148 iface->initializeEngine(m_loader->engine(), uri);
149}
150
\inmodule QtCore
Definition qbytearray.h:57
The QNetworkAccessManager class allows the application to send network requests and receive replies.
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
Definition qobject.cpp:2823
QThread * thread() const
Returns the thread in which the object lives.
Definition qobject.cpp:1561
void deleteLater()
\threadsafe
Definition qobject.cpp:2352
static QQmlEnginePrivate * get(QQmlEngine *e)
void postMethodToThread(Method &&method, Args &&...args)
QThread * thread() const
bool isThisThread() const
void postMethodToMain(Method &&method, Args &&...args)
void callMethodInMain(Method &&method, Args &&...args)
void startup()
void callMethodInThread(Method &&method, Args &&...args)
void callCompleted(const QQmlDataBlob::Ptr &b)
void loadAsync(const QQmlDataBlob::Ptr &b)
void callDownloadProgressChanged(const QQmlDataBlob::Ptr &b, qreal p)
void initializeEngine(QQmlExtensionInterface *, const char *)
void loadWithCachedUnit(const QQmlDataBlob::Ptr &b, const QQmlPrivate::CachedQmlUnit *unit)
void load(const QQmlDataBlob::Ptr &b)
void loadWithStaticDataAsync(const QQmlDataBlob::Ptr &b, const QByteArray &)
void loadWithCachedUnitAsync(const QQmlDataBlob::Ptr &b, const QQmlPrivate::CachedQmlUnit *unit)
void loadWithStaticData(const QQmlDataBlob::Ptr &b, const QByteArray &)
QQmlTypeLoaderThread(QQmlTypeLoader *loader)
The QQmlTypeLoader class abstracts loading files and their dependencies over the network.
QQmlEngine * engine() const
Return the QQmlEngine associated with this loader.
static QThread * currentThread()
Definition qthread.cpp:966
void finished(QPrivateSignal)
Combined button and popup list for selecting options.
constexpr QBindableInterface iface
Definition qproperty.h:664
#define qWarning
Definition qlogging.h:162
GLboolean GLboolean GLboolean b
GLfloat GLfloat p
[1]
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
#define qPrintable(string)
Definition qstring.h:1391
double qreal
Definition qtypes.h:92