3

我使用以下代码为我的应用获取 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 地图应用程序中工作。知道为什么上面的代码无法在手机上获取地理位置但在模拟器上完美运行吗?

4

1 回答 1

2

您应该从插槽设置标签,positionUpdated()因为在收到更新时会触发信号。您的呼叫requestUpdate()也会触发positionUpdated()信号。如果在设置超时后它没有得到更新,它会发出信号requestTimeout(),您可能希望将插槽连接到哪个插槽以供参考。很可能当您检索时lastKnownPosition(),尚未确定任何位置并且返回的值是空值。仅从文档中很难确定,但我认为这意味着它requestUpdate()总是会立即返回,而不是在它成功接收到更新之后,所以你应该打电话source->lastKnownPosition.isValid()来看看它是否包含一个好的位置。

您真的应该检查插槽中的位置,positionUpdated()或者在该插槽至少被调用一次之后。模拟器很可能有一个立即可用的位置,并且在这种情况下可以工作。

你的positionUpdated()插槽有没有被调用?

于 2010-09-21T01:57:05.947 回答