2010-09-20 112 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()插槽是否会被调用?

相关问题