Retrieve Location Using Qt Mobility/bg: Difference between revisions
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]]<br />[[Category:HowTo]]<br />[[Category:Snippets]]<br />[[Category:Tutorial]] | ||
[toc align_right= | [toc align_right="yes" depth="4"] | ||
'''Български''' [[Retrieve_Location_Using_Qt_Mobility|English]] | '''Български''' [[Retrieve_Location_Using_Qt_Mobility|English]] | ||
Line 9: | Line 9: | ||
== Общ преглед == | == Общ преглед == | ||
Предоставеният програмен код показва как се намира местоположението чрез клас | Предоставеният програмен код показва как се намира местоположението чрез клас "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. | ||
Примерната програма използва '''NonSatellitePositioningMethods'''. | Примерната програма използва '''NonSatellitePositioningMethods'''. | ||
Line 19: | Line 19: | ||
=== Проектен файл === | === Проектен файл === | ||
Qt Mobility трябва да бъде включено в проектовия файл (.pro). Освен това, ако програмата е за устройства със Symbian трябва да бъде добавена | Qt Mobility трябва да бъде включено в проектовия файл (.pro). Освен това, ако програмата е за устройства със Symbian трябва да бъде добавена "възможността":http://developer.qt.nokia.com/wiki/Symbian_Capabilities_Bulgarian '''Location'''. | ||
<code><br />symbian:TARGET.CAPABILITY ''= NetworkServices Location | <code><br />symbian:TARGET.CAPABILITY ''= NetworkServices Location | ||
Line 28: | Line 28: | ||
<code><br />#ifndef MAINWINDOW_H<br />#define MAINWINDOW_H | <code><br />#ifndef MAINWINDOW_H<br />#define MAINWINDOW_H | ||
#include | #include <QtGui/QMainWindow><br />#include <QGeoPositionInfo><br />#include <QGeoPositionInfoSource><br />#include <QLabel> | ||
// QtMobility namespace<br />QTM_USE_NAMESPACE | // QtMobility namespace<br />QTM_USE_NAMESPACE | ||
Line 38: | Line 38: | ||
explicit MainWindow(QWidget '''parent = 0); | explicit MainWindow(QWidget '''parent = 0); | ||
<br /> virtual ~MainWindow(); | <br /> virtual ~MainWindow(); | ||
<br />public slots:<br /> /'''*<br /> * Called when the current position is updated.<br /> *<br /> * </code>return nothing<br /> | <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 />private:<br /> /'''*<br /> * Start listening for position changes<br /> *<br /> * <code>return nothing<br /> */<br /> void startLocationAPI(); | ||
<br />private:<br /> QGeoPositionInfoSource''' m_pLocationInfo; | <br />private:<br /> QGeoPositionInfoSource''' m_pLocationInfo; | ||
Line 50: | Line 50: | ||
=== Код === | === Код === | ||
<code><br />#include | <code><br />#include "mainwindow.h" | ||
#include | #include <QGeoCoordinate><br />#include <QApplication><br />#include <QDesktopWidget> | ||
#include | #include <QtCore/QCoreApplication> | ||
#include | #include <QDebug> | ||
MainWindow::MainWindow(QWidget '''parent)<br /> : QMainWindow(parent), m_pLocationInfo(NULL), m_pLabel(NULL)<br />{<br /> m_pLabel = new QLabel( | 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 />} | ||
<br />MainWindow::~MainWindow()<br />{ | <br />MainWindow::~MainWindow()<br />{ | ||
<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 />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 | <br /> //Select positioning method<br /> m_pLocationInfo->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 /> // 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- | <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 />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- | <br /> m_pLabel->setText( QString("Latitude: %1 Longitude: %2").arg(latitude).arg(longitude) );<br /> }<br />}<br /></code> | ||
<br />h2. Отстраняване на проблеми | <br />h2. Отстраняване на проблеми | ||
<br />''' 'QGeoPositionInfo' has not been declared | <br />''' 'QGeoPositionInfo' has not been declared | ||
Line 72: | Line 72: | ||
Всички нужни хедър файлово трябва да бъдат включени и да бъде оказан namespace Qt Mobility. | Всички нужни хедър файлово трябва да бъдат включени и да бъде оказан namespace Qt Mobility. | ||
<code><br />#include | <code><br />#include <QGeoPositionInfo><br />#include <QGeoPositionInfoSource> | ||
// QtMobility namespace<br />QTM_USE_NAMESPACE<br /></code> | // QtMobility namespace<br />QTM_USE_NAMESPACE<br /></code> | ||
Line 78: | Line 78: | ||
* AllPositioningMethods не работи според очакванията | * AllPositioningMethods не работи според очакванията | ||
Това е известен критичен бъг, който засяга Qt Mobility 1.1.2 | Това е известен критичен бъг, който засяга 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. Моля вижте посочената страница за повече информация. | ||
== Вижте също == | == Вижте също == |
Revision as of 06:56, 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.
<br />symbian:TARGET.CAPABILITY ''= NetworkServices Location
<br />CONFIG''= mobility<br />MOBILITY += location<br />
Хедър
<br />#ifndef MAINWINDOW_H<br />#define MAINWINDOW_H
#include <QtGui/QMainWindow><br />#include <QGeoPositionInfo><br />#include <QGeoPositionInfoSource><br />#include <QLabel>
// 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 />
Код
<br />#include "mainwindow.h"
#include <QGeoCoordinate><br />#include <QApplication><br />#include <QDesktopWidget>
#include <QtCore/QCoreApplication>
#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 />}
<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->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->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 />
h2. Отстраняване на проблеми
'QGeoPositionInfo' has not been declared
Всички нужни хедър файлово трябва да бъдат включени и да бъде оказан namespace Qt Mobility.
<br />#include <QGeoPositionInfo><br />#include <QGeoPositionInfoSource>
// QtMobility namespace<br />QTM_USE_NAMESPACE<br />
- AllPositioningMethods не работи според очакванията
Това е известен критичен бъг, който засяга Qt Mobility 1.1.2":http://bugreports.qt.nokia.com/browse/QTMOBILITY-1550?focusedCommentId=151456&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel. Моля вижте посочената страница за повече информация.