Retrieve Location Using Qt Mobility/bg: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
[[Category:Developing with Qt::QtMobility]] | [[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 могат да бъдат използвани: | Следните "методи за позициониране":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> | <code> | ||
symbian:TARGET.CAPABILITY ''= NetworkServices Location | |||
CONFIG''= mobility | |||
MOBILITY += location | |||
</code> | |||
=== Хедър === | === Хедър === | ||
<code> | <code> | ||
#ifndef MAINWINDOW_H | |||
#define MAINWINDOW_H | |||
#include <QtGui/QMainWindow> | #include <QtGui/QMainWindow> | ||
#include <QGeoPositionInfo> | |||
#include <QGeoPositionInfoSource> | |||
#include <QLabel> | |||
// QtMobility namespace | // QtMobility namespace | ||
QTM_USE_NAMESPACE | |||
namespace Ui { | namespace Ui { | ||
class MainWindow; | |||
} | |||
class MainWindow : public QMainWindow | class MainWindow : public QMainWindow | ||
{ | |||
Q_OBJECT | |||
public: | |||
explicit MainWindow(QWidget '''parent = 0); | explicit MainWindow(QWidget '''parent = 0); | ||
virtual ~MainWindow(); | |||
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 | #endif // MAINWINDOW_H | ||
</code> | |||
=== Код === | === Код === | ||
<code> | <code> | ||
#include "mainwindow.h" | |||
#include <QGeoCoordinate> | #include <QGeoCoordinate> | ||
#include <QApplication> | |||
#include <QDesktopWidget> | |||
#include <QtCore/QCoreApplication> | #include <QtCore/QCoreApplication> | ||
Line 58: | Line 100: | ||
#include <QDebug> | #include <QDebug> | ||
MainWindow::MainWindow(QWidget '''parent) | 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) ); | |||
} | |||
} | |||
</code> | |||
h2. Отстраняване на проблеми | |||
''' 'QGeoPositionInfo' has not been declared | |||
Всички нужни хедър файлово трябва да бъдат включени и да бъде оказан namespace Qt Mobility. | Всички нужни хедър файлово трябва да бъдат включени и да бъде оказан namespace Qt Mobility. | ||
<code> | <code> | ||
#include <QGeoPositionInfo> | |||
#include <QGeoPositionInfoSource> | |||
// QtMobility namespace | // 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&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel. Моля вижте посочената страница за повече информация.