You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将qInfo()输出转为QString?获取QGeoCoordinate完整坐标值

如何获取QGeoCoordinate的完整精度坐标值?

你遇到的问题核心是:QGeoCoordinate的latitude()/longitude()返回的double值本身是完整精度的,但默认打印和toString方法会截断小数位;而qInfo()能显示全精度是因为Qt对QGeoCoordinate的调试输出做了特殊格式化。

直接解决方案:手动格式化数值到指定精度

double类型本身足够存储你需要的9/8位小数(double有15-17位有效数字),所以直接用QString::number指定精度即可:

QObject *pin = qvariant_cast<QObject *>(mapObject->property("destination"));
QGeoCoordinate dest = qvariant_cast<QGeoCoordinate>(pin->property("coordinate"));

// 获取完整精度的纬度(9位小数)和经度(8位小数)
QString fullLat = QString::number(dest.latitude(), 'f', 9);
QString fullLon = QString::number(dest.longitude(), 'f', 8);

qInfo() << fullLat;  // 输出:"33.751513868"
qInfo() << fullLon;  // 输出:"-118.17815810"

如果需要类似toString的格式(带单位),可以自己拼接:

QString fullCoord = QString("%1°, %2°, %3m")
    .arg(dest.latitude(), 0, 'f', 9)
    .arg(dest.longitude(), 0, 'f', 8)
    .arg(dest.altitude());

为什么之前的输出会丢失精度?

  • dest.latitude()返回的double值本身是完整的,但qInfo()打印double时默认只显示6位有效数字,所以看起来像是丢失了精度,实际数值并没有丢失。
  • toString(QGeoCoordinate::Degrees)的默认行为就是只保留5位小数,Qt没有提供直接修改这个精度的参数,所以需要手动格式化。

不建议抓取qInfo()的输出

虽然可以通过重定向QDebug输出的方式捕获内容,但这种方法依赖Qt的调试输出格式,版本更新可能会改变格式,而且实现起来比直接格式化数值麻烦得多,完全没必要。

内容的提问来源于stack exchange,提问作者xxxxreader

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 00:40:15