diff options
author | Aaron McCarthy <aaron.mccarthy@jollamobile.com> | 2014-02-19 14:52:07 +1000 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-03-14 12:30:09 +0100 |
commit | d2628aeb6ed1ab30d1a825122dc80cfebb5093d2 (patch) | |
tree | 00cec128c5d264346c871ba9bfcdc9a920dfa52b /src/plugins/geoservices/nokia/qgeoroutexmlparser.h | |
parent | 3f4a3acab163fa6675a1513ab1fccdbda7723dd6 (diff) | |
download | qtlocation-d2628aeb6ed1ab30d1a825122dc80cfebb5093d2.tar.gz |
Parse Nokia route response in helper thread.
Complex and really long routes can take multiple seconds to parse. Use
a helper thread to parse route responses to prevent blocking the main
thread.
Change-Id: I4130510ff15752427f31b429e53d2ab87fa1b84a
Reviewed-by: Alex Blasche <alexander.blasche@digia.com>
Diffstat (limited to 'src/plugins/geoservices/nokia/qgeoroutexmlparser.h')
-rw-r--r-- | src/plugins/geoservices/nokia/qgeoroutexmlparser.h | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/src/plugins/geoservices/nokia/qgeoroutexmlparser.h b/src/plugins/geoservices/nokia/qgeoroutexmlparser.h index 466bca5e..7e6307e7 100644 --- a/src/plugins/geoservices/nokia/qgeoroutexmlparser.h +++ b/src/plugins/geoservices/nokia/qgeoroutexmlparser.h @@ -49,16 +49,17 @@ #ifndef QROUTEXMLPARSER_H #define QROUTEXMLPARSER_H -#include <QList> -#include <QString> -#include <QScopedPointer> +#include <QtCore/QObject> +#include <QtCore/QRunnable> +#include <QtCore/QString> +#include <QtCore/QList> -#include <qgeoroutesegment.h> -#include <qgeorouterequest.h> -#include <qgeomaneuver.h> +#include <QtLocation/QGeoRouteRequest> +#include <QtLocation/QGeoRouteSegment> +#include <QtLocation/QGeoManeuver> QT_BEGIN_NAMESPACE -class QIODevice; + class QXmlStreamReader; class QGeoRoute; class QGeoCoordinate; @@ -92,15 +93,20 @@ public: int baseTime; }; -class QGeoRouteXmlParser +class QGeoRouteXmlParser : public QObject, public QRunnable { + Q_OBJECT + public: QGeoRouteXmlParser(const QGeoRouteRequest &request); ~QGeoRouteXmlParser(); - bool parse(QIODevice *source); - QList<QGeoRoute> results() const; - QString errorString() const; + void parse(const QByteArray &data); + void run(); + +signals: + void results(const QList<QGeoRoute> &routes); + void error(const QString &errorString); private: bool parseRootElement(); @@ -119,12 +125,14 @@ private: bool parseDynamicSpeedInfo(QGeoDynamicSpeedInfoContainer &speedInfo); QGeoRouteRequest m_request; - QScopedPointer<QXmlStreamReader> m_reader; + QByteArray m_data; + QXmlStreamReader *m_reader; + QList<QGeoRoute> m_results; - QString m_errorString; QList<QGeoManeuverContainer> m_maneuvers; QList<QGeoRouteSegmentContainer> m_segments; }; QT_END_NAMESPACE + #endif |