Retrieve Location Using Qt Mobility/bg: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
[[Category:Developing with Qt::QtMobility]]<br />[[Category:HowTo]]<br />[[Category:Snippets]]<br />[[Category:Tutorial]]
[[Category:Developing with Qt::QtMobility]]
[[Category:HowTo]]
[[Category:Snippets]]
[[Category:Tutorial]]


[toc align_right="yes" depth="4"]
[toc align_right="yes" depth="4"]
Line 11: Line 14:
Предоставеният програмен код показва как се намира местоположението чрез клас "QGeoPositionInfoSource":http://doc.qt.nokia.com/qtmobility-1.1.0-beta/qgeopositioninfosource.html от Qt Mobility. След като бъде установена позицията на екрана се показват нейните координати (географска ширина и дължина). Примерът е тестван на Nokia E7 със Symbian^3
Предоставеният програмен код показва как се намира местоположението чрез клас "QGeoPositionInfoSource":http://doc.qt.nokia.com/qtmobility-1.1.0-beta/qgeopositioninfosource.html от Qt Mobility. След като бъде установена позицията на екрана се показват нейните координати (географска ширина и дължина). Примерът е тестван на Nokia E7 със Symbian^3


Следните "методи за позициониране":http://doc.qt.nokia.com/qtmobility-1.1.0-beta/qgeopositioninfosource.html#PositioningMethod-enum могат да бъдат използвани:<br />* '''SatellitePositioningMethods''' - Сателитни методи за позициониране като GPS.<br />* '''NonSatellitePositioningMethods''' - Други позициониращи методи.<br />* '''AllPositioningMethods'''- Всички позициониращи methods.
Следните "методи за позициониране":http://doc.qt.nokia.com/qtmobility-1.1.0-beta/qgeopositioninfosource.html#PositioningMethod-enum могат да бъдат използвани:
* '''SatellitePositioningMethods''' - Сателитни методи за позициониране като GPS.
* '''NonSatellitePositioningMethods''' - Други позициониращи методи.
* '''AllPositioningMethods'''- Всички позициониращи methods.


Примерната програма използва '''NonSatellitePositioningMethods'''.
Примерната програма използва '''NonSatellitePositioningMethods'''.
Line 21: Line 27:
Qt Mobility трябва да бъде включено в проектовия файл (.pro). Освен това, ако програмата е за устройства със Symbian трябва да бъде добавена "възможността":http://developer.qt.nokia.com/wiki/Symbian_Capabilities_Bulgarian '''Location'''.
Qt Mobility трябва да бъде включено в проектовия файл (.pro). Освен това, ако програмата е за устройства със Symbian трябва да бъде добавена "възможността":http://developer.qt.nokia.com/wiki/Symbian_Capabilities_Bulgarian '''Location'''.


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


=== Хедър ===
=== Хедър ===


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


#include <QtGui/QMainWindow><br />#include <QGeoPositionInfo><br />#include <QGeoPositionInfoSource><br />#include <QLabel>
#include <QtGui/QMainWindow>
#include <QGeoPositionInfo>
#include <QGeoPositionInfoSource>
#include <QLabel>


// QtMobility namespace<br />QTM_USE_NAMESPACE
// QtMobility namespace
QTM_USE_NAMESPACE


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


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


explicit MainWindow(QWidget '''parent = 0);
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);
virtual ~MainWindow();
<br />private:<br /> /'''*<br /> * Start listening for position changes<br /> *<br /> * <code>return nothing<br /> */<br /> void startLocationAPI();
 
<br />private:<br /> QGeoPositionInfoSource''' m_pLocationInfo;
public slots:
/'''*
* Called when the current position is updated.
*
* </code>return nothing
*/
void positionUpdated(QGeoPositionInfo geoPositionInfo);
 
private:
/'''*
* Start listening for position changes
*
* <code>return nothing
*/
void startLocationAPI();
 
private:
QGeoPositionInfoSource''' m_pLocationInfo;


QLabel* m_pLabel;
QLabel* m_pLabel;
Line 46: Line 84:
};
};


#endif // MAINWINDOW_H<br /></code>
#endif // MAINWINDOW_H
</code>


=== Код ===
=== Код ===


<code><br />#include "mainwindow.h"
<code>
#include "mainwindow.h"


#include <QGeoCoordinate><br />#include <QApplication><br />#include <QDesktopWidget>
#include <QGeoCoordinate>
#include <QApplication>
#include <QDesktopWidget>


#include <QtCore/QCoreApplication>
#include <QtCore/QCoreApplication>
Line 58: Line 100:
#include <QDebug>
#include <QDebug>


MainWindow::MainWindow(QWidget '''parent)<br /> : QMainWindow(parent), m_pLocationInfo(NULL), m_pLabel(NULL)<br />{<br /> m_pLabel = new QLabel("",this);<br /> m_pLabel->setGeometry(QApplication::desktop()->screenGeometry());<br /> startLocationAPI();<br />}
MainWindow::MainWindow(QWidget '''parent)
<br />MainWindow::~MainWindow()<br />{
: QMainWindow(parent), m_pLocationInfo(NULL), m_pLabel(NULL)
<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);
m_pLabel = new QLabel("",this);
<br /> //Select positioning method<br /> m_pLocationInfo->setPreferredPositioningMethods(QGeoPositionInfoSource::NonSatellitePositioningMethods);
m_pLabel->setGeometry(QApplication::desktop()->screenGeometry());
<br /> // When the position is changed the positionUpdated function is called<br /> connect(m_pLocationInfo, SIGNAL (positionUpdated(QGeoPositionInfo)),<br /> this, SLOT (positionUpdated(QGeoPositionInfo)));
startLocationAPI();
<br /> // Start listening for position updates<br /> m_pLocationInfo->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->setText( QString("Latitude: %1 Longitude: %2").arg(latitude).arg(longitude) );<br /> }<br />}<br /></code>
MainWindow::~MainWindow()
<br />h2. Отстраняване на проблеми
{
<br />''' 'QGeoPositionInfo' has not been declared
 
}
 
void MainWindow::startLocationAPI()
{
// Obtain the location data source if it is not obtained already
if (!m_pLocationInfo)
{
m_pLocationInfo =
QGeoPositionInfoSource::createDefaultSource(this);
 
//Select positioning method
m_pLocationInfo->setPreferredPositioningMethods(QGeoPositionInfoSource::NonSatellitePositioningMethods);
 
// When the position is changed the positionUpdated function is called
connect(m_pLocationInfo, SIGNAL (positionUpdated(QGeoPositionInfo)),
this, SLOT (positionUpdated(QGeoPositionInfo)));
 
// Start listening for position updates
m_pLocationInfo->startUpdates();
}
}
 
void MainWindow::positionUpdated(QGeoPositionInfo geoPositionInfo)
{
if (geoPositionInfo.isValid())
{
// Get the current location coordinates
QGeoCoordinate geoCoordinate = geoPositionInfo.coordinate();
qreal latitude = geoCoordinate.latitude();
qreal longitude = geoCoordinate.longitude();
 
m_pLabel->setText( QString("Latitude: %1 Longitude: %2").arg(latitude).arg(longitude) );
}
}
</code>
 
h2. Отстраняване на проблеми
 
''' 'QGeoPositionInfo' has not been declared


Всички нужни хедър файлово трябва да бъдат включени и да бъде оказан namespace Qt Mobility.
Всички нужни хедър файлово трябва да бъдат включени и да бъде оказан namespace Qt Mobility.


<code><br />#include <QGeoPositionInfo><br />#include <QGeoPositionInfoSource>
<code>
#include <QGeoPositionInfo>
#include <QGeoPositionInfoSource>


// QtMobility namespace<br />QTM_USE_NAMESPACE<br /></code>
// QtMobility namespace
QTM_USE_NAMESPACE
</code>


* AllPositioningMethods не работи според очакванията
* AllPositioningMethods не работи според очакванията

Revision as of 12:31, 25 February 2015


[toc align_right="yes" depth="4"]

Български English

Намиране на местоположение с Qt Mobility

Общ преглед

Предоставеният програмен код показва как се намира местоположението чрез клас "QGeoPositionInfoSource":http://doc.qt.nokia.com/qtmobility-1.1.0-beta/qgeopositioninfosource.html от Qt Mobility. След като бъде установена позицията на екрана се показват нейните координати (географска ширина и дължина). Примерът е тестван на Nokia E7 със Symbian^3

Следните "методи за позициониране":http://doc.qt.nokia.com/qtmobility-1.1.0-beta/qgeopositioninfosource.html#PositioningMethod-enum могат да бъдат използвани:

  • SatellitePositioningMethods - Сателитни методи за позициониране като GPS.
  • NonSatellitePositioningMethods - Други позициониращи методи.
  • AllPositioningMethods- Всички позициониращи methods.

Примерната програма използва NonSatellitePositioningMethods.

Програмен код

Проектен файл

Qt Mobility трябва да бъде включено в проектовия файл (.pro). Освен това, ако програмата е за устройства със Symbian трябва да бъде добавена "възможността":http://developer.qt.nokia.com/wiki/Symbian_Capabilities_Bulgarian Location.

symbian:TARGET.CAPABILITY ''= NetworkServices Location

CONFIG''= mobility
MOBILITY += location

Хедър

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui/QMainWindow>
#include <QGeoPositionInfo>
#include <QGeoPositionInfoSource>
#include <QLabel>

// QtMobility namespace
QTM_USE_NAMESPACE

namespace Ui {
 class MainWindow;
}

class MainWindow : public QMainWindow
{
 Q_OBJECT
public:

explicit MainWindow(QWidget '''parent = 0);

 virtual ~MainWindow();

public slots:
 /'''*
 * Called when the current position is updated.
 *
 *

return nothing

*/
void positionUpdated(QGeoPositionInfo geoPositionInfo);

private:

/*
* Start listening for position changes
*

*

return nothing
 */
 void startLocationAPI();

private:
 QGeoPositionInfoSource''' m_pLocationInfo;

QLabel* m_pLabel;

};

#endif // MAINWINDOW_H

Код

#include "mainwindow.h"

#include <QGeoCoordinate>
#include <QApplication>
#include <QDesktopWidget>

#include <QtCore/QCoreApplication>

#include <QDebug>

MainWindow::MainWindow(QWidget '''parent)
 : QMainWindow(parent), m_pLocationInfo(NULL), m_pLabel(NULL)
{
 m_pLabel = new QLabel("",this);
 m_pLabel->setGeometry(QApplication::desktop()->screenGeometry());
 startLocationAPI();
}

MainWindow::~MainWindow()
{

}

void MainWindow::startLocationAPI()
{
 // Obtain the location data source if it is not obtained already
 if (!m_pLocationInfo)
 {
 m_pLocationInfo =
 QGeoPositionInfoSource::createDefaultSource(this);

 //Select positioning method
 m_pLocationInfo->setPreferredPositioningMethods(QGeoPositionInfoSource::NonSatellitePositioningMethods);

 // When the position is changed the positionUpdated function is called
 connect(m_pLocationInfo, SIGNAL (positionUpdated(QGeoPositionInfo)),
 this, SLOT (positionUpdated(QGeoPositionInfo)));

 // Start listening for position updates
 m_pLocationInfo->startUpdates();
 }
}

void MainWindow::positionUpdated(QGeoPositionInfo geoPositionInfo)
{
 if (geoPositionInfo.isValid())
 {
 // Get the current location coordinates
 QGeoCoordinate geoCoordinate = geoPositionInfo.coordinate();
 qreal latitude = geoCoordinate.latitude();
 qreal longitude = geoCoordinate.longitude();

 m_pLabel->setText( QString("Latitude: %1 Longitude: %2").arg(latitude).arg(longitude) );
 }
}

h2. Отстраняване на проблеми

'QGeoPositionInfo' has not been declared

Всички нужни хедър файлово трябва да бъдат включени и да бъде оказан namespace Qt Mobility.

#include <QGeoPositionInfo>
#include <QGeoPositionInfoSource>

// QtMobility namespace
QTM_USE_NAMESPACE
  • AllPositioningMethods не работи според очакванията

Това е известен критичен бъг, който засяга Qt Mobility 1.1.2":http://bugreports.qt.nokia.com/browse/QTMOBILITY-1550?focusedCommentId=151456&amp;page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel. Моля вижте посочената страница за повече информация.

Вижте също