- Qt 5.15
- Qt Positioning
- Qt Positioning Plugins
- Qt 5.15.11 Reference Documentation

# Qt Positioning Plugins

Qt Positioning provides the majority of its functionality through plugins. This document outlines how to develop a new position plugin.

## Default plugins

Some plugins already ship with Qt. These are:

android | Wraps Android positioning subsystem. Available only on Android.
corelocation | Wraps iOS and macOS positioning subsystems. Available only on Apple platforms supporting corelocation.
geoclue | Interfaces with GeoClue v0.12. Requires GeoClue 0.12 to be present to function.
geoclue2 | Interfaces with GeoClue v2. Requires GeoClue v2 to be present to function.
gypsy | Interfaces with Gypsy daemon. Requires Gypsy to be present to function.
winrt | Wraps WinRT positioning subsystem. Available only on WinRT and Windows10.
serialnmea | A Serial NMEA backend that parses NMEA streams from a GPS receiver over a serial link to provide position updates.
positionpoll | A backend providing only area monitoring functionalities via polling on position updates.

## Plugin Description

Each plugin is described by a json file. The json describes the plugins capabilities and version. Below is an example of a json file used by the postionpoll plugin:

     {
         "Keys": ["positionpoll"],
         "Provider": "positionpoll",
         "Position": false,
         "Satellite": false,
         "Monitor": true,
         "Priority": 1000,
         "Testable": true
     }

The entries have the following meaning:

Key | Description
--- | ---
Keys | The unique name/key of the plugin. Each position plugin must have a unique name.
Provider | The provider name of the services. Multiple plugins may have the same name. In such cases the Version string will be used to further distinguish the plugins.
Position | Set to `true` if the plugin implements a QGeoPositionInfoSource.
Satellite | Set to `true` if the plugin implements a QGeoSatelliteInfoSource.
Monitor | Set to `true` if the plugin implements a QGeoAreaMonitorSource.
Priority | The plugin priority. If multiple plugins have the same provider name, the plugin with the higest priority will be used.

## Implementing Plugins

A plugin implementer needs to subclass QGeoPositionInfoSourceFactory and override one or more of its functions. If a plugin does not support a specific feature the function should return 0 or utilize the default implementation.

- QGeoPositionInfoSourceFactory::areaMonitor()
- QGeoPositionInfoSourceFactory::positionInfoSource()
- QGeoPositionInfoSourceFactory::satelliteInfoSource()