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
qgeomapreplyohosmapkit.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
4#include <QtCore/qmetaobject.h>
5#include <qgeomapreplyohosmapkit.h>
6
8
9namespace {
10
11const char pngSignature[] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00};
12
14{
15public:
17 QNetworkReply *reply, const QGeoTileSpec &spec, QObject *parent);
18
19private:
20 void onNetworkReplyFinished();
21 void onNetworkReplyError(QNetworkReply::NetworkError error);
22};
23
25 QNetworkReply *reply, const QGeoTileSpec &spec, QObject *parent)
27{
28 if (reply == nullptr) {
29 setError(QGeoTiledMapReply::UnknownError, tr("Null reply"));
30 return;
31 }
32
33 connect(reply, &QNetworkReply::finished, this, &QGeoMapReplyOhosMapKit::onNetworkReplyFinished);
34 connect(reply, &QNetworkReply::errorOccurred, this, &QGeoMapReplyOhosMapKit::onNetworkReplyError);
35 connect(this, &QGeoTiledMapReply::aborted, reply, &QNetworkReply::abort);
36 connect(this, &QObject::destroyed, reply, &QObject::deleteLater);
37}
38
39void QGeoMapReplyOhosMapKit::onNetworkReplyFinished()
40{
41 auto *reply = static_cast<QNetworkReply *>(sender());
42 reply->deleteLater();
43
44 if (reply->error() != QNetworkReply::NoError) {
45 setError(
46 QGeoTiledMapReply::CommunicationError,
47 tr("Network reply error: %1")
48 .arg(QMetaEnum::fromType<QNetworkReply::NetworkError>().valueToKey(reply->error())));
49 return;
50 }
51
52 const auto imageData = reply->readAll();
53
54 if (imageData.startsWith(pngSignature)) {
55 setMapImageFormat(QStringLiteral("png"));
56 setMapImageData(imageData);
57 setFinished(true);
58 } else {
59 setError(QGeoTiledMapReply::ParseError, tr("Invalid format of tile data"));
60 }
61}
62
63void QGeoMapReplyOhosMapKit::onNetworkReplyError(QNetworkReply::NetworkError error)
64{
65 auto *reply = static_cast<QNetworkReply *>(sender());
66 reply->deleteLater();
67 if (error == QNetworkReply::OperationCanceledError)
68 setFinished(true);
69 else
70 setError(QGeoTiledMapReply::CommunicationError, reply->errorString());
71}
72
73}
74
76 QNetworkReply *reply, const QGeoTileSpec &spec, QObject *parent)
77{
78 return new QGeoMapReplyOhosMapKit(reply, spec, parent);
79}
80
81QT_END_NAMESPACE
QGeoMapReplyOhosMapKit(QNetworkReply *reply, const QGeoTileSpec &spec, QObject *parent)
Combined button and popup list for selecting options.
QGeoTiledMapReply * makeGeoTiledMapReplyOhosMapKit(QNetworkReply *reply, const QGeoTileSpec &spec, QObject *parent)