2016-12-06 67 views
1

我在QTCreator for Android中編寫應用程序。我的GPS位置有問題。 當我在手機上運行應用程序時,我沒有協調。在qDebug我看到這一點:與Android的QGeoPositionInfoSource發生奇怪的錯誤

(無效GPS :: startLocationAPI()):QGeoPositionInfoSourceAndroid(0x9f8c06d0)

什麼是支架沒有意義,因爲每到這個值是不同的(0xb03c9ba0 ,0xb03d2ba0,0xf01c9d10)

這是我的代碼:

gps.h:

#ifndef GPS_H 
#define GPS_H 
#include <QMainWindow> 
#include <QGeoPositionInfo> 
#include <QGeoPositionInfoSource> 
class gps : public QObject 
{ 
Q_OBJECT 
public: 
    explicit gps(QWidget *parent = 0); 
    virtual ~gps(); 
public slots: 
    void positionUpdated(QGeoPositionInfo geoPositionInfo); 
    void startLocationAPI(); 
private: 
    QGeoPositionInfoSource *m_pLocationInfo; 
}; 
#endif //GPS_H 

gps.cpp

#include "gps.h" 

#include <QGeoCoordinate> 
#include <QGeoPositionInfo> 
#include <QGeoPositionInfoSource> 
#include <QDebug> 

gps::gps(QWidget *parent) 
: QObject(parent), m_pLocationInfo(NULL) 
{ 
    startLocationAPI(); 
} 

gps::~gps() 
{ 
} 

void gps::startLocationAPI() 
{ 
    if (!m_pLocationInfo) 
    { 
     m_pLocationInfo =QGeoPositionInfoSource::createDefaultSource(0); 
     m_pLocationInfo->setPreferredPositioningMethods(QGeoPositionInfoSource::NonSatellitePositioningMethods); 
     connect(m_pLocationInfo, SIGNAL (positionUpdated(QGeoPositionInfo)),this, SLOT (positionUpdated(QGeoPositionInfo))); 
     m_pLocationInfo->startUpdates(); 
     qDebug() << m_pLocationInfo; 
    } 
} 

void gps::positionUpdated(QGeoPositionInfo geoPositionInfo) 
{ 
} 
+0

是否調用了'gps :: positionUpdated'?你有沒有嘗試把'qDebug()<<「Hello」'放在那裏看看它是否被調用? – jpo38

回答

0

如果輸出m_pLocationInfo它總是會輸出不同不會忽略,因爲這是一個指針,它的地址很可能會更改每次運行程序時。

如果你這樣做:

void gps::positionUpdated(QGeoPositionInfo geoPositionInfo) 
{ 
    qDebug() << geoPositionInfo.coordinate().toString(); 
} 

那麼你應該得到的GPS座標。

您可能需要連接error信號知道出事了:

gps::startLocationAPI(),添加

connect(m_pLocationInfo, SIGNAL (error(QGeoPositionInfoSource::Error)),this, SLOT (error(QGeoPositionInfoSource::Error))); 

,使error(QGeoPositionInfoSource::Error)是您的GPS類的插槽:

void gps::error(QGeoPositionInfoSource::Error positioningError) 
{ 
    qDebug() << "An error occured: " << positioningError; 
} 

然後,你會知道是否出了問題。