Viadeo Twitter Google Bookmarks ! Facebook Digg del.icio.us MySpace Yahoo MyWeb Blinklist Netvouz Reddit Simpy StumbleUpon Bookmarks Windows Live Favorites 
Logo Documentation Qt ·  Page d'accueil  ·  Toutes les classes  ·  Classes principales  ·  Annotées  ·  Classes groupées  ·  Modules  ·  Fonctions  · 

Creating a Custom Location Data Source

This example class reads location data from a text file, log.txt. The file specifies location data using a simple text format: it contains one location update per line, where each line contains a date/time, a latitude and a longitude, separated by spaces. The date/time is in ISO 8601 format and the latitude and longitude are in degrees decimal format. Here is an excerpt from log.txt:

 2009-08-24T22:25:01 -27.576082 153.092415
 2009-08-24T22:25:02 -27.576223 153.092530
 2009-08-24T22:25:03 -27.576364 153.092648

The class reads this data and distributes it via the positionUpdated() signal.

Here is the definition of the LogFilePositionSource class:

 class LogFilePositionSource : public QGeoPositionInfoSource
 {
     Q_OBJECT
 public:
     LogFilePositionSource(QObject *parent = 0);

     QGeoPositionInfo lastKnownPosition(bool fromSatellitePositioningMethodsOnly = false) const;

     PositioningMethods supportedPositioningMethods() const;
     int minimumUpdateInterval() const;
     Error error() const;

 public slots:
     virtual void startUpdates();
     virtual void stopUpdates();

     virtual void requestUpdate(int timeout = 5000);

 private slots:
     void readNextPosition();

 private:
     QFile *logFile;
     QTimer *timer;
     QGeoPositionInfo lastPosition;
 };

The main methods overrided by the subclass are:

  • startUpdates(): called by client applications to start regular position updates
  • stopUpdates(): called by client applications to stop regular position updates
  • requestUpdate(): called by client applications to request a single update, with a specified timeout

When a position update is available, the subclass emits the positionUpdated() signal.

Here are the key methods in the class implementation:

 LogFilePositionSource::LogFilePositionSource(QObject *parent)
     : QGeoPositionInfoSource(parent),
       logFile(new QFile(this)),
       timer(new QTimer(this))
 {
     connect(timer, SIGNAL(timeout()), this, SLOT(readNextPosition()));

     logFile->setFileName(QCoreApplication::applicationDirPath()
             + QDir::separator() + "simplelog.txt");
     if (!logFile->open(QIODevice::ReadOnly))
         qWarning() << "Error: cannot open source file" << logFile->fileName();
 }

 void LogFilePositionSource::startUpdates()
 {
     int interval = updateInterval();
     if (interval < minimumUpdateInterval())
         interval = minimumUpdateInterval();

     timer->start(interval);
 }

 void LogFilePositionSource::stopUpdates()
 {
     timer->stop();
 }

 void LogFilePositionSource::requestUpdate(int /*timeout*/)
 {
     // For simplicity, ignore timeout - assume that if data is not available
     // now, no data will be added to the file later
     if (logFile->canReadLine())
         readNextPosition();
     else
         emit updateTimeout();
 }

 void LogFilePositionSource::readNextPosition()
 {
     QByteArray line = logFile->readLine().trimmed();
     if (!line.isEmpty()) {
         QList<QByteArray> data = line.split(' ');
         double latitude;
         double longitude;
         bool hasLatitude = false;
         bool hasLongitude = false;
         QDateTime timestamp = QDateTime::fromString(QString(data.value(0)), Qt::ISODate);
         latitude = data.value(1).toDouble(&hasLatitude);
         longitude = data.value(2).toDouble(&hasLongitude);

         if (hasLatitude && hasLongitude && timestamp.isValid()) {
             QGeoCoordinate coordinate(latitude, longitude);
             QGeoPositionInfo info(coordinate, timestamp);
             if (info.isValid()) {
                 lastPosition = info;
                 emit positionUpdated(info);
             }
         }
     }
 }

The example includes a ClientApplication class that requests updates from the LogFilePositionSource class. Run the example to see the data that is received by ClientApplication.

Before running the example, make sure you have done both make and make install.

Cette page est une traduction d'une page de la documentation de Qt, écrite par Nokia Corporation and/or its subsidiary(-ies). Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Nokia. Qt 5.0-snapshot
Copyright © 2012 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon, vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.
Vous avez déniché une erreur ? Un bug ? Une redirection cassée ? Ou tout autre problème, quel qu'il soit ? Ou bien vous désirez participer à ce projet de traduction ? N'hésitez pas à nous contacter ou par MP !
 
 
 
 
Partenaires

Hébergement Web