我使用以下代码为我的应用程序获取GeoLocation
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地图应用程序中工作。知道为什么上面的代码无法在手机上获得地理定位但在模拟器上运行得很好吗?
答案 0 :(得分:2)
您应该在positionUpdated()
的插槽中设置标签,因为在收到更新时会触发信号。您拨打requestUpdate()
的电话也会触发positionUpdated()
信号。如果在超时设置后没有获得更新,则会发出requestTimeout()
信号,您可能希望将其连接到插槽以供参考。很可能当您检索lastKnownPosition()
时,尚未确定任何位置,并且返回的值为空值。很难从文档中确定,但我认为这意味着requestUpdate()
将始终立即返回,而不是在成功收到更新之后,因此您应该致电source->lastKnownPosition.isValid()
以查看它是否包含良好的位置。
你应该真正检查positionUpdated()
位置中的位置,或者在该位置被调用至少一次之后。很可能模拟器有一个立即可用的位置,并在这种情况下工作。
您的positionUpdated()
广告位是否会被调用?