Qt wiki will be updated on October 12th 2023 starting at 11:30 AM (EEST) and the maintenance will last around 2-3 hours. During the maintenance the site will be unavailable.

Retrieve Location Using Qt Mobility: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
 
No edit summary
Line 1: Line 1:
'''English''' [[Retrieve Location Using Qt Mobility Bulgarian|Български]]
[[Category:Developing with Qt::QtMobility]]<br />[[Category:HowTo]]<br />[[Category:Snippets]]<br />[[Category:Tutorial]]


=Retrieve Location Using Qt Mobility=
[toc align_right=&quot;yes&amp;quot; depth=&quot;4&amp;quot;]


==Overview==
'''English''' [[Retrieve_Location_Using_Qt_Mobility_Bulgarian|Български]]


The provided code snippet shows how to retrieve location using Qt Mobility class [http://doc.qt.nokia.com/qtmobility-1.1.0-beta/qgeopositioninfosource.html QGeoPositionInfoSource] ''[doc.qt.nokia.com]''. When the position is retrieved the location coordinates (latitude and longitude) are displayed on the screen. The given example has been tested on Nokia E7 with Symbian^3.
= Retrieve Location Using Qt Mobility =


The following [http://doc.qt.nokia.com/qtmobility-1.1.0-beta/qgeopositioninfosource.html#PositioningMethod-enum positioning methods] ''[doc.qt.nokia.com]'' can be used:
== Overview ==


* '''SatellitePositioningMethods''' Satellite-based positioning methods such as <span class="caps">GPS</span>.
The provided code snippet shows how to retrieve location using Qt Mobility class &quot;QGeoPositionInfoSource&amp;quot;:http://doc.qt.nokia.com/qtmobility-1.1.0-beta/qgeopositioninfosource.html. When the position is retrieved the location coordinates (latitude and longitude) are displayed on the screen. The given example has been tested on Nokia E7 with Symbian^3.
* '''NonSatellitePositioningMethods''' Other positioning methods.
 
* '''AllPositioningMethods''' All positioning methods.
The following &quot;positioning methods&amp;quot;:http://doc.qt.nokia.com/qtmobility-1.1.0-beta/qgeopositioninfosource.html#PositioningMethod-enum can be used:<br />* '''SatellitePositioningMethods''' - Satellite-based positioning methods such as GPS.<br />* '''NonSatellitePositioningMethods''' - Other positioning methods.<br />* '''AllPositioningMethods''' - All positioning methods.


The example application is using '''NonSatellitePositioningMethods'''.
The example application is using '''NonSatellitePositioningMethods'''.


==Code Snippet==
== Code Snippet ==


===Project File===
=== Project File ===


Qt Mobility should be included at the project file. Additionally if the application is targeting Symbian devices Location should be added as a [http://developer.qt.nokia.com/wiki/Symbian_Capabilities capability] ''[developer.qt.nokia.com]''.
Qt Mobility should be included at the project file. Additionally if the application is targeting Symbian devices Location should be added as a &quot;capability&amp;quot;:http://developer.qt.nokia.com/wiki/Symbian_Capabilities.


===Header===
<code><br />symbian:TARGET.CAPABILITY ''= NetworkServices Location
<br />CONFIG''= mobility<br />MOBILITY += location<br /></code>


===Source===
=== Header ===


==Troubleshooting==
<code><br />#ifndef MAINWINDOW_H<br />#define MAINWINDOW_H


* ‘QGeoPositionInfo’ has not been declared
#include &lt;QtGui/QMainWindow&amp;gt;<br />#include &lt;QGeoPositionInfo&amp;gt;<br />#include &lt;QGeoPositionInfoSource&amp;gt;<br />#include &lt;QLabel&amp;gt;
 
// QtMobility namespace<br />QTM_USE_NAMESPACE
 
namespace Ui {<br /> class MainWindow;<br />}
 
class MainWindow : public QMainWindow<br />{<br /> Q_OBJECT<br />public:
 
explicit MainWindow(QWidget '''parent = 0);
<br /> virtual ~MainWindow();
<br />public slots:<br /> /'''*<br /> * Called when the current position is updated.<br /> *<br /> * </code>return nothing<br /> '''/<br /> void positionUpdated(QGeoPositionInfo geoPositionInfo);
<br />private:<br /> /'''*<br /> * Start listening for position changes<br /> *<br /> * <code>return nothing<br /> '''/<br /> void startLocationAPI();
<br />private:<br /> QGeoPositionInfoSource''' m_pLocationInfo;
 
QLabel* m_pLabel;
 
};
 
#endif // MAINWINDOW_H<br /></code>
 
=== Source ===
 
<code><br />#include &quot;mainwindow.h&amp;quot;
 
#include &lt;QGeoCoordinate&amp;gt;<br />#include &lt;QApplication&amp;gt;<br />#include &lt;QDesktopWidget&amp;gt;
 
#include &lt;QtCore/QCoreApplication&amp;gt;
 
#include &lt;QDebug&amp;gt;
 
MainWindow::MainWindow(QWidget '''parent)<br /> : QMainWindow(parent), m_pLocationInfo(NULL), m_pLabel(NULL)<br />{<br /> m_pLabel = new QLabel(&quot;&quot;,this);<br /> m_pLabel-&gt;setGeometry(QApplication::desktop()<s>&gt;screenGeometry());<br /> startLocationAPI();<br />}
<br />MainWindow::~MainWindow()<br />{
<br />}
<br />void MainWindow::startLocationAPI()<br />{<br /> // Obtain the location data source if it is not obtained already<br /> if (!m_pLocationInfo)<br /> {<br /> m_pLocationInfo =<br /> QGeoPositionInfoSource::createDefaultSource(this);
<br /> //Select positioning method<br /> m_pLocationInfo</s>&gt;setPreferredPositioningMethods(QGeoPositionInfoSource::NonSatellitePositioningMethods);
<br /> // When the position is changed the positionUpdated function is called<br /> connect(m_pLocationInfo, SIGNAL (positionUpdated(QGeoPositionInfo)),<br /> this, SLOT (positionUpdated(QGeoPositionInfo)));
<br /> // Start listening for position updates<br /> m_pLocationInfo-&gt;startUpdates();<br /> }<br />}
<br />void MainWindow::positionUpdated(QGeoPositionInfo geoPositionInfo)<br />{<br /> if (geoPositionInfo.isValid())<br /> {<br /> // Get the current location coordinates<br /> QGeoCoordinate geoCoordinate = geoPositionInfo.coordinate();<br /> qreal latitude = geoCoordinate.latitude();<br /> qreal longitude = geoCoordinate.longitude();
<br /> m_pLabel-&gt;setText( QString(&quot;Latitude: %1 Longitude: %2&amp;quot;).arg(latitude).arg(longitude) );<br /> }<br />}<br /></code>
<br />h2. Troubleshooting
<br />''' 'QGeoPositionInfo' has not been declared


All required header files must be included and the Qt Mobility namespace should be specified.
All required header files must be included and the Qt Mobility namespace should be specified.


* AllPositioningMethods does not work as expected
<code><br />#include &lt;QGeoPositionInfo&amp;gt;<br />#include &lt;QGeoPositionInfoSource&amp;gt;
 
This is a known [https://bugreports.qt.io/browse/QTMOBILITY-1550 critical bug that affects Qt Mobility 1.1.2] ''[bugreports.qt.io]'' Please check the provided link for details.


==See Also==
// QtMobility namespace<br />QTM_USE_NAMESPACE<br /></code>


[http://www.developer.nokia.com/Community/Wiki/index.php/Getting_the_location_in_Qt Getting the location in Qt] ''[developer.nokia.com]''
* AllPositioningMethods does not work as expected


===Categories:===
This is a known &quot;critical bug that affects Qt Mobility 1.1.2&amp;quot;:https://bugreports.qt.io/browse/QTMOBILITY-1550 Please check the provided link for details.


* [[:Category:Developing-with-Qt|Developing with Qt]]
== See Also ==
** [[:Category:Developing-with-Qt::QtMobility|QtMobility]]
* [[:Category:HowTo|HowTo]]
* [[:Category:snippets|snippets]]
* [[:Category:Tutorial|Tutorial]]

Revision as of 09:41, 24 February 2015




[toc align_right="yes&quot; depth="4&quot;]

English Български

Retrieve Location Using Qt Mobility

Overview

The provided code snippet shows how to retrieve location using Qt Mobility class "QGeoPositionInfoSource&quot;:http://doc.qt.nokia.com/qtmobility-1.1.0-beta/qgeopositioninfosource.html. When the position is retrieved the location coordinates (latitude and longitude) are displayed on the screen. The given example has been tested on Nokia E7 with Symbian^3.

The following "positioning methods&quot;:http://doc.qt.nokia.com/qtmobility-1.1.0-beta/qgeopositioninfosource.html#PositioningMethod-enum can be used:
* SatellitePositioningMethods - Satellite-based positioning methods such as GPS.
* NonSatellitePositioningMethods - Other positioning methods.
* AllPositioningMethods - All positioning methods.

The example application is using NonSatellitePositioningMethods.

Code Snippet

Project File

Qt Mobility should be included at the project file. Additionally if the application is targeting Symbian devices Location should be added as a "capability&quot;:http://developer.qt.nokia.com/wiki/Symbian_Capabilities.

<br />symbian:TARGET.CAPABILITY ''= NetworkServices Location
<br />CONFIG''= mobility<br />MOBILITY += location<br />

Header

<br />#ifndef MAINWINDOW_H<br />#define MAINWINDOW_H

#include &lt;QtGui/QMainWindow&amp;gt;<br />#include &lt;QGeoPositionInfo&amp;gt;<br />#include &lt;QGeoPositionInfoSource&amp;gt;<br />#include &lt;QLabel&amp;gt;

// QtMobility namespace<br />QTM_USE_NAMESPACE

namespace Ui {<br /> class MainWindow;<br />}

class MainWindow : public QMainWindow<br />{<br /> Q_OBJECT<br />public:

explicit MainWindow(QWidget '''parent = 0);
<br /> virtual ~MainWindow();
<br />public slots:<br /> /'''*<br /> * Called when the current position is updated.<br /> *<br /> *

return nothing
/
void positionUpdated(QGeoPositionInfo geoPositionInfo);

private:
/*
* Start listening for position changes
*
*

return nothing<br /> '''/<br /> void startLocationAPI();
<br />private:<br /> QGeoPositionInfoSource''' m_pLocationInfo;

QLabel* m_pLabel;

};

#endif // MAINWINDOW_H<br />

Source

<br />#include &quot;mainwindow.h&amp;quot;

#include &lt;QGeoCoordinate&amp;gt;<br />#include &lt;QApplication&amp;gt;<br />#include &lt;QDesktopWidget&amp;gt;

#include &lt;QtCore/QCoreApplication&amp;gt;

#include &lt;QDebug&amp;gt;

MainWindow::MainWindow(QWidget '''parent)<br /> : QMainWindow(parent), m_pLocationInfo(NULL), m_pLabel(NULL)<br />{<br /> m_pLabel = new QLabel(&quot;&quot;,this);<br /> m_pLabel-&gt;setGeometry(QApplication::desktop()<s>&gt;screenGeometry());<br /> startLocationAPI();<br />}
<br />MainWindow::~MainWindow()<br />{
<br />}
<br />void MainWindow::startLocationAPI()<br />{<br /> // Obtain the location data source if it is not obtained already<br /> if (!m_pLocationInfo)<br /> {<br /> m_pLocationInfo =<br /> QGeoPositionInfoSource::createDefaultSource(this);
<br /> //Select positioning method<br /> m_pLocationInfo</s>&gt;setPreferredPositioningMethods(QGeoPositionInfoSource::NonSatellitePositioningMethods);
<br /> // When the position is changed the positionUpdated function is called<br /> connect(m_pLocationInfo, SIGNAL (positionUpdated(QGeoPositionInfo)),<br /> this, SLOT (positionUpdated(QGeoPositionInfo)));
<br /> // Start listening for position updates<br /> m_pLocationInfo-&gt;startUpdates();<br /> }<br />}
<br />void MainWindow::positionUpdated(QGeoPositionInfo geoPositionInfo)<br />{<br /> if (geoPositionInfo.isValid())<br /> {<br /> // Get the current location coordinates<br /> QGeoCoordinate geoCoordinate = geoPositionInfo.coordinate();<br /> qreal latitude = geoCoordinate.latitude();<br /> qreal longitude = geoCoordinate.longitude();
<br /> m_pLabel-&gt;setText( QString(&quot;Latitude: %1 Longitude: %2&amp;quot;).arg(latitude).arg(longitude) );<br /> }<br />}<br />


h2. Troubleshooting
'QGeoPositionInfo' has not been declared

All required header files must be included and the Qt Mobility namespace should be specified.

<br />#include &lt;QGeoPositionInfo&amp;gt;<br />#include &lt;QGeoPositionInfoSource&amp;gt;

// QtMobility namespace<br />QTM_USE_NAMESPACE<br />
  • AllPositioningMethods does not work as expected

This is a known "critical bug that affects Qt Mobility 1.1.2&quot;:https://bugreports.qt.io/browse/QTMOBILITY-1550 Please check the provided link for details.

See Also