2010-09-20 113 views
3

我用下面的代碼獲取GeoLocation中我的應用程序的Qt:移動GeoLocation中工作在模擬器,但不是在N900

QGeoPositionInfoSource *source = QGeoPositionInfoSource::createDefaultSource(this); 
if (source) { 
    source->setUpdateInterval(1000); // time in milliseconds 
    source->setPreferredPositioningMethods(QGeoPositionInfoSource::AllPositioningMethods); 
    connect(source, SIGNAL(positionUpdated(QGeoPositionInfo)), this, SLOT(positionUpdated(QGeoPositionInfo))); 
    source->startUpdates(); 
    source->requestUpdate(30000); 
    const QGeoPositionInfo &info =source->lastKnownPosition();    
    ui->label->setText(QString("Latitude - %1 Longitude - %2").arg(info.coordinate().latitude()).arg(info.coordinate().longitude())); 
} 

此代碼完美運行在模擬器,給我的模擬器提供的座標,但是這當我嘗試在我的N900上運行它時不起作用。它返回Nan而不是經緯度座標。手機上的當前GPS信號精度較低。地理定位功能也可以在手機上的OVI Maps應用程序中使用。任何想法爲什麼上面的代碼無法獲得手機上的地理位置,但在模擬器上完美工作?

回答

2

當接收到更新信號時,您應該設置positionUpdated()插槽中的標籤。您撥打requestUpdate()的呼叫也會觸發positionUpdated()信號。如果它在超時設置後沒有得到更新,它會發出信號requestTimeout(),您可能想要連接一個插槽以提供信息。很有可能當您檢索lastKnownPosition()時,尚未確定位置,並且返回的值爲空值。從文檔中很難確定,但我認爲這意味着requestUpdate()將始終立即返回,而不是在它已成功接收更新之後,因此您應該撥打source->lastKnownPosition.isValid()以查看其是否包含良好的位置。

您應該確實在檢查positionUpdated()插槽中的位置,或者該插槽已被調用至少一次之後。模擬器可能立即有一個位置並在這種情況下工作。

您的positionUpdated()插槽是否會被調用?

相關問題