首页 > 解决方案 > 将 QGyroscopeReading 转换为 QVector3D 的正确方法是什么?

问题描述

Qt5中是否有正确/好的转换QGyroscopeReading方法?QVector3D

QGyroscopeReading将其xyz值存储为qreal,而QVector3D使用float

由于 qreal 不能保证是浮点数(它的类型是在 Qt 构建时指定的),所以无警告的天真转换看起来非常难看:

QGyroscopeReading gr;
QVector3D myVec(static_cast<float>(gr.x())
  , static_cast<float>(gr.y())
  , static_cast<float>(gr.z()));

肯定有更好的东西吗?

标签: c++qtqt5qvector3dqgyroscopereading

解决方案


它的设计看起来很丑。它必须提醒你这里有一些危险的代码。

为了防止在项目中传播此类代码,请从 QVector3D 继承您的类并使用qreal参数定义构造函数。

class QRealVector3D: public QVector3D
{
QRealVector3D (qreal x, qreal y, qreal z):
QVector3D (static_cast<float>(x)
  , static_cast<float>(y)
  , static_cast<float>(z)
{}
}

推荐阅读