如何将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
相关产品推荐
相关产品推荐

