【问题标题】:Qt: Mobility GeoLocation works on Simulator but not on N900Qt:Mobility GeoLocation 适用于模拟器但不适用于 N900
【发布时间】:2011-04-14 13:42:00
【问题描述】:

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

【问题讨论】:

    标签: qt geolocation qt-creator maemo qt-mobility


    【解决方案1】:

    您应该从插槽为positionUpdated() 设置标签,因为当收到更新时会触发信号。您对requestUpdate() 的调用也会触发positionUpdated() 信号。如果在设置超时后它没有得到更新,它将发出requestTimeout() 信号,您可能希望将插槽连接到该位置以提供信息。很可能当您检索lastKnownPosition() 时,尚未确定位置,返回的值为空值。仅从文档中很难确定,但我认为这意味着requestUpdate() 将始终立即返回,而不是在它成功接收更新之后,因此您应该致电source->lastKnownPosition.isValid() 以查看它是否包含一个好的位置。

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

    您的positionUpdated() 插槽是否被调用过?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-17
      • 1970-01-01
      • 2012-11-01
      • 2011-03-08
      • 2015-02-13
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多