Is there a correct/good way to convert QGyroscopeReading
to QVector3D
in Qt5?
QGyroscopeReading
has its x,y and z values stored as qreal
, while QVector3D
uses float
.
Since qreal is not guaranteed to be float (it's type is specified at Qt build time), the warning-free naive conversion looks really ugly:
QGyroscopeReading gr;
QVector3D myVec(static_cast<float>(gr.x())
, static_cast<float>(gr.y())
, static_cast<float>(gr.z()));
Surely there is something better?
From Qt doc. QGyroscopeReading Class:
QGyroscopeReading Units
The reading contains 3 values, measured in degrees per second that define the movement of the device around the x, y and z axes. Unlike QRotationReading, the values represent the current angular velocity rather than a fixed rotation. The measurements are in degrees per second.
So, conversion of qreal
to float
is your least problem except you just want to store the values in a QVector3D
(remembering that this doesn't represent a point or vector in 3D space). But if this is the case, then your conversion is fine. (Although, I don't understand why not to store gyroscope reading just as QGyroscopeReading
.)
If you want to apply QGyroscodeReading
to a QVector3D
(e.g. to display the effect), then you could apply the rotations to a predefined vector (e.g. QVector3D(0, 0, 1)
). For a cumulate update, the time would be necessary as well (to convert angular velocities to angles).
For the time, the QGyroscopeReading::timestamp()
could be interesting (i.e. determine duration from current timestamp and the previous one). Though, the doc. is not very encouraging:
Note that some platforms do not deliver timestamps correctly. Applications should be prepared for occasional issues that cause timestamps to jump backwards.