Retrieve Location Using Qt Mobility/bg

From Qt Wiki
Jump to: navigation, search

En Ar Bg De El Es Fa Fi Fr Hi Hu It Ja Kn Ko Ms Nl Pl Pt Ru Sq Th Tr Uk Zh

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

Общ преглед

Предоставеният програмен код показва как се намира местоположението чрез клас QGeoPositionInfoSource от Qt Mobility. След като бъде установена позицията на екрана се показват нейните координати (географска ширина и дължина). Примерът е тестван на Nokia E7 със Symbian^3

Следните методи за позициониране могат да бъдат използвани:

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

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

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

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

Qt Mobility трябва да бъде включено в проектовия файл (.pro). Освен това, ако програмата е за устройства със Symbian трябва да бъде добавена възможността Location.

symbian:TARGET.CAPABILITY = NetworkServices Location

CONFIG= mobility MOBILITY += location

Хедър

  1. ifndef MAINWINDOW_H
  2. define MAINWINDOW_H
  1. include <QMainWindow>
  2. include <QGeoPositionInfo>
  3. include <QGeoPositionInfoSource>
  4. 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;

};

  1. endif // MAINWINDOW_H

Код

  1. include "mainwindow.h"
  1. include <QGeoCoordinate>
  2. include <QApplication>
  3. include <QDesktopWidget>
  1. include <QCoreApplication>
  1. 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[http://bugreports.qt.nokia.com/browse/QTMOBILITY-1550?focusedCommentId=151456&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel ).arg(latitude).arg(longitude) );
}

}

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

'QGeoPositionInfo' has not been declared

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

  1. include <QGeoPositionInfo>
  2. include <QGeoPositionInfoSource>

// QtMobility namespace QTM_USE_NAMESPACE

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

Това е известен критичен бъг, който засяга Qt Mobility 1.1.2]. Моля вижте посочената страница за повече информация.

Вижте също