summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuha Vuolle <juha.vuolle@insta.fi>2021-06-13 11:45:35 +0300
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-06-21 07:31:07 +0000
commit39b3ff04e6c6d01c4f294a870caaf19ced3216b2 (patch)
tree38df448da04bf34c5865171ba9b5c77c57031d94
parent480c3543b1f686d15e4d5decafb8ae5c5198d49a (diff)
Add binding support for sensor readings
Many of the sensors' QML "reading" value properties change with high frequency. This makes them candidates to benefit from the more performant bindable support. This commit adds the bindable support for QML sensor 'reading' classes: pressure, gyroscope, tap, compass, proximity, orientation, distance, magnetometer, lid reading, tilt, rotation, humidity, holster, ambient temperature, light sensor, altimeter, IR proximity, accelerometer, ambient light, and sensor reading baseclass (timestamp common to all) In addition to the 'reading' classes, the commit adds bindable support for QmlSensor::reading, as it's change signal is emitted with high frequency, on every sensor reading change. Task-number: QTBUG-92513 Task-number: QTBUG-92503 Task-number: QTBUG-92505 Change-Id: I413ddd8a758142b9b93596e55b3bc8c3c2c98252 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Alex Blasche <alexander.blasche@qt.io> Reviewed-by: Ivan Solovev <ivan.solovev@qt.io> (cherry picked from commit c255fe62f86598f48bd7e69e449aa95aa016f4fb) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/sensorsquick/qmlaccelerometer.cpp33
-rw-r--r--src/sensorsquick/qmlaccelerometer_p.h21
-rw-r--r--src/sensorsquick/qmlaltimeter.cpp12
-rw-r--r--src/sensorsquick/qmlaltimeter_p.h11
-rw-r--r--src/sensorsquick/qmlambientlightsensor.cpp11
-rw-r--r--src/sensorsquick/qmlambientlightsensor_p.h10
-rw-r--r--src/sensorsquick/qmlambienttemperaturesensor.cpp11
-rw-r--r--src/sensorsquick/qmlambienttemperaturesensor_p.h10
-rw-r--r--src/sensorsquick/qmlcompass.cpp22
-rw-r--r--src/sensorsquick/qmlcompass_p.h15
-rw-r--r--src/sensorsquick/qmldistancesensor.cpp12
-rw-r--r--src/sensorsquick/qmldistancesensor_p.h9
-rw-r--r--src/sensorsquick/qmlgyroscope.cpp33
-rw-r--r--src/sensorsquick/qmlgyroscope_p.h20
-rw-r--r--src/sensorsquick/qmlholstersensor.cpp11
-rw-r--r--src/sensorsquick/qmlholstersensor_p.h10
-rw-r--r--src/sensorsquick/qmlhumiditysensor.cpp22
-rw-r--r--src/sensorsquick/qmlhumiditysensor_p.h17
-rw-r--r--src/sensorsquick/qmlirproximitysensor.cpp12
-rw-r--r--src/sensorsquick/qmlirproximitysensor_p.h10
-rw-r--r--src/sensorsquick/qmllidsensor.cpp22
-rw-r--r--src/sensorsquick/qmllidsensor_p.h17
-rw-r--r--src/sensorsquick/qmllightsensor.cpp11
-rw-r--r--src/sensorsquick/qmllightsensor_p.h9
-rw-r--r--src/sensorsquick/qmlmagnetometer.cpp44
-rw-r--r--src/sensorsquick/qmlmagnetometer_p.h29
-rw-r--r--src/sensorsquick/qmlorientationsensor.cpp11
-rw-r--r--src/sensorsquick/qmlorientationsensor_p.h9
-rw-r--r--src/sensorsquick/qmlpressuresensor.cpp23
-rw-r--r--src/sensorsquick/qmlpressuresensor_p.h16
-rw-r--r--src/sensorsquick/qmlproximitysensor.cpp11
-rw-r--r--src/sensorsquick/qmlproximitysensor_p.h8
-rw-r--r--src/sensorsquick/qmlrotationsensor.cpp33
-rw-r--r--src/sensorsquick/qmlrotationsensor_p.h20
-rw-r--r--src/sensorsquick/qmlsensor.cpp22
-rw-r--r--src/sensorsquick/qmlsensor_p.h18
-rw-r--r--src/sensorsquick/qmltapsensor.cpp23
-rw-r--r--src/sensorsquick/qmltapsensor_p.h17
-rw-r--r--src/sensorsquick/qmltiltsensor.cpp22
-rw-r--r--src/sensorsquick/qmltiltsensor_p.h15
-rw-r--r--tests/auto/common/test_backends.cpp66
-rw-r--r--tests/auto/common/test_backends.h3
-rw-r--r--tests/auto/qml/qml_cpp/CMakeLists.txt6
-rw-r--r--tests/auto/qml/qml_cpp/tst_sensors_qmlcpp.cpp149
-rw-r--r--tests/auto/qml/qml_quick/tst_sensors_basic.qml2
-rw-r--r--tests/auto/qml/qml_quick/tst_sensors_qmlquick.cpp2
46 files changed, 608 insertions, 312 deletions
diff --git a/src/sensorsquick/qmlaccelerometer.cpp b/src/sensorsquick/qmlaccelerometer.cpp
index fc013837..2063ec69 100644
--- a/src/sensorsquick/qmlaccelerometer.cpp
+++ b/src/sensorsquick/qmlaccelerometer.cpp
@@ -139,6 +139,11 @@ qreal QmlAccelerometerReading::x() const
return m_x;
}
+QBindable<qreal> QmlAccelerometerReading::bindableX() const
+{
+ return &m_x;
+}
+
/*!
\qmlproperty qreal AccelerometerReading::y
This property holds the acceleration on the Y axis.
@@ -151,6 +156,11 @@ qreal QmlAccelerometerReading::y() const
return m_y;
}
+QBindable<qreal> QmlAccelerometerReading::bindableY() const
+{
+ return &m_y;
+}
+
/*!
\qmlproperty qreal AccelerometerReading::z
This property holds the acceleration on the Z axis.
@@ -163,6 +173,11 @@ qreal QmlAccelerometerReading::z() const
return m_z;
}
+QBindable<qreal> QmlAccelerometerReading::bindableZ() const
+{
+ return &m_z;
+}
+
QSensorReading *QmlAccelerometerReading::reading() const
{
return m_sensor->reading();
@@ -170,19 +185,7 @@ QSensorReading *QmlAccelerometerReading::reading() const
void QmlAccelerometerReading::readingUpdate()
{
- qreal aX = m_sensor->reading()->x();
- if (m_x != aX) {
- m_x = aX;
- Q_EMIT xChanged();
- }
- qreal aY = m_sensor->reading()->y();
- if (m_y != aY) {
- m_y = aY;
- Q_EMIT yChanged();
- }
- qreal aZ = m_sensor->reading()->z();
- if (m_z != aZ) {
- m_z = aZ;
- Q_EMIT zChanged();
- }
+ m_x = m_sensor->reading()->x();
+ m_y = m_sensor->reading()->y();
+ m_z = m_sensor->reading()->z();
}
diff --git a/src/sensorsquick/qmlaccelerometer_p.h b/src/sensorsquick/qmlaccelerometer_p.h
index 24a691d8..2a2e9e08 100644
--- a/src/sensorsquick/qmlaccelerometer_p.h
+++ b/src/sensorsquick/qmlaccelerometer_p.h
@@ -79,11 +79,12 @@ public:
AccelerationMode accelerationMode() const;
void setAccelerationMode(AccelerationMode accelerationMode);
+ QSensor *sensor() const override;
+
signals:
Q_REVISION(1) void accelerationModeChanged(AccelerationMode accelerationMode);
private:
- QSensor *sensor() const override;
QAccelerometer *m_sensor;
QmlSensorReading *createReading() const override;
};
@@ -91,9 +92,9 @@ private:
class Q_SENSORSQUICK_PRIVATE_EXPORT QmlAccelerometerReading : public QmlSensorReading
{
Q_OBJECT
- Q_PROPERTY(qreal x READ x NOTIFY xChanged)
- Q_PROPERTY(qreal y READ y NOTIFY yChanged)
- Q_PROPERTY(qreal z READ z NOTIFY zChanged)
+ Q_PROPERTY(qreal x READ x NOTIFY xChanged BINDABLE bindableX)
+ Q_PROPERTY(qreal y READ y NOTIFY yChanged BINDABLE bindableY)
+ Q_PROPERTY(qreal z READ z NOTIFY zChanged BINDABLE bindableZ)
QML_NAMED_ELEMENT(AccelerometerReading)
QML_UNCREATABLE("Cannot create AccelerometerReading")
QML_ADDED_IN_VERSION(5,0)
@@ -102,8 +103,11 @@ public:
~QmlAccelerometerReading();
qreal x() const;
+ QBindable<qreal> bindableX() const;
qreal y() const;
+ QBindable<qreal> bindableY() const;
qreal z() const;
+ QBindable<qreal> bindableZ() const;
Q_SIGNALS:
void xChanged();
@@ -114,9 +118,12 @@ private:
QSensorReading *reading() const override;
void readingUpdate() override;
QAccelerometer *m_sensor;
- qreal m_x;
- qreal m_y;
- qreal m_z;
+ Q_OBJECT_BINDABLE_PROPERTY(QmlAccelerometerReading, qreal,
+ m_x, &QmlAccelerometerReading::xChanged)
+ Q_OBJECT_BINDABLE_PROPERTY(QmlAccelerometerReading, qreal,
+ m_y, &QmlAccelerometerReading::yChanged)
+ Q_OBJECT_BINDABLE_PROPERTY(QmlAccelerometerReading, qreal,
+ m_z, &QmlAccelerometerReading::zChanged)
};
QT_END_NAMESPACE
diff --git a/src/sensorsquick/qmlaltimeter.cpp b/src/sensorsquick/qmlaltimeter.cpp
index 8ee3ccde..fe0177db 100644
--- a/src/sensorsquick/qmlaltimeter.cpp
+++ b/src/sensorsquick/qmlaltimeter.cpp
@@ -96,7 +96,6 @@ QSensor *QmlAltimeter::sensor() const
QmlAltimeterReading::QmlAltimeterReading(QAltimeter *sensor)
: QmlSensorReading(sensor)
, m_sensor(sensor)
- , m_altitude(0)
{
}
@@ -116,6 +115,11 @@ qreal QmlAltimeterReading::altitude() const
return m_altitude;
}
+QBindable<qreal> QmlAltimeterReading::bindableAltitude() const
+{
+ return &m_altitude;
+}
+
QSensorReading *QmlAltimeterReading::reading() const
{
return m_sensor->reading();
@@ -123,9 +127,5 @@ QSensorReading *QmlAltimeterReading::reading() const
void QmlAltimeterReading::readingUpdate()
{
- qreal altitude = m_sensor->reading()->altitude();
- if (m_altitude != altitude) {
- m_altitude = altitude;
- Q_EMIT altitudeChanged();
- }
+ m_altitude = m_sensor->reading()->altitude();
}
diff --git a/src/sensorsquick/qmlaltimeter_p.h b/src/sensorsquick/qmlaltimeter_p.h
index 322fbdfb..19f124cb 100644
--- a/src/sensorsquick/qmlaltimeter_p.h
+++ b/src/sensorsquick/qmlaltimeter_p.h
@@ -65,17 +65,18 @@ public:
explicit QmlAltimeter(QObject *parent = 0);
~QmlAltimeter();
-private:
QSensor *sensor() const override;
- QmlSensorReading *createReading() const override;
+private:
+ QmlSensorReading *createReading() const override;
QAltimeter *m_sensor;
};
class Q_SENSORSQUICK_PRIVATE_EXPORT QmlAltimeterReading : public QmlSensorReading
{
Q_OBJECT
- Q_PROPERTY(qreal altitude READ altitude NOTIFY altitudeChanged)
+ Q_PROPERTY(qreal altitude READ altitude
+ NOTIFY altitudeChanged BINDABLE bindableAltitude)
QML_NAMED_ELEMENT(AltimeterReading)
QML_UNCREATABLE("Cannot create AltimeterReading")
QML_ADDED_IN_VERSION(5,1)
@@ -84,6 +85,7 @@ public:
~QmlAltimeterReading();
qreal altitude() const;
+ QBindable<qreal> bindableAltitude() const;
Q_SIGNALS:
void altitudeChanged();
@@ -93,7 +95,8 @@ private:
void readingUpdate() override;
QAltimeter *m_sensor;
- qreal m_altitude;
+ Q_OBJECT_BINDABLE_PROPERTY(QmlAltimeterReading, qreal,
+ m_altitude, &QmlAltimeterReading::altitudeChanged)
};
QT_END_NAMESPACE
diff --git a/src/sensorsquick/qmlambientlightsensor.cpp b/src/sensorsquick/qmlambientlightsensor.cpp
index a114f8b3..6854baf7 100644
--- a/src/sensorsquick/qmlambientlightsensor.cpp
+++ b/src/sensorsquick/qmlambientlightsensor.cpp
@@ -126,6 +126,11 @@ QAmbientLightReading::LightLevel QmlAmbientLightSensorReading::lightLevel() cons
return m_lightLevel;
}
+QBindable<QAmbientLightReading::LightLevel> QmlAmbientLightSensorReading::bindableLightLevel() const
+{
+ return &m_lightLevel;
+}
+
QSensorReading *QmlAmbientLightSensorReading::reading() const
{
return m_sensor->reading();
@@ -133,9 +138,5 @@ QSensorReading *QmlAmbientLightSensorReading::reading() const
void QmlAmbientLightSensorReading::readingUpdate()
{
- QAmbientLightReading::LightLevel ll = m_sensor->reading()->lightLevel();
- if (m_lightLevel != ll) {
- m_lightLevel = ll;
- Q_EMIT lightLevelChanged();
- }
+ m_lightLevel = m_sensor->reading()->lightLevel();
}
diff --git a/src/sensorsquick/qmlambientlightsensor_p.h b/src/sensorsquick/qmlambientlightsensor_p.h
index 356a1128..f920fe58 100644
--- a/src/sensorsquick/qmlambientlightsensor_p.h
+++ b/src/sensorsquick/qmlambientlightsensor_p.h
@@ -67,8 +67,9 @@ public:
explicit QmlAmbientLightSensor(QObject *parent = 0);
~QmlAmbientLightSensor();
-private:
QSensor *sensor() const override;
+
+private:
QAmbientLightSensor *m_sensor;
QmlSensorReading *createReading() const override;
@@ -77,7 +78,8 @@ private:
class Q_SENSORSQUICK_PRIVATE_EXPORT QmlAmbientLightSensorReading : public QmlSensorReading
{
Q_OBJECT
- Q_PROPERTY(QAmbientLightReading::LightLevel lightLevel READ lightLevel NOTIFY lightLevelChanged)
+ Q_PROPERTY(QAmbientLightReading::LightLevel lightLevel READ lightLevel
+ NOTIFY lightLevelChanged BINDABLE bindableLightLevel)
QML_NAMED_ELEMENT(AmbientLightReading)
QML_UNCREATABLE("Cannot create AmbientLightReading")
QML_ADDED_IN_VERSION(5,0)
@@ -87,6 +89,7 @@ public:
~QmlAmbientLightSensorReading();
QAmbientLightReading::LightLevel lightLevel() const;
+ QBindable<QAmbientLightReading::LightLevel> bindableLightLevel() const;
Q_SIGNALS:
void lightLevelChanged();
@@ -95,7 +98,8 @@ private:
QSensorReading *reading() const override;
void readingUpdate() override;
QAmbientLightSensor *m_sensor;
- QAmbientLightReading::LightLevel m_lightLevel;
+ Q_OBJECT_BINDABLE_PROPERTY(QmlAmbientLightSensorReading, QAmbientLightReading::LightLevel,
+ m_lightLevel, &QmlAmbientLightSensorReading::lightLevelChanged)
};
QT_END_NAMESPACE
diff --git a/src/sensorsquick/qmlambienttemperaturesensor.cpp b/src/sensorsquick/qmlambienttemperaturesensor.cpp
index 3f1a4679..2dccfa38 100644
--- a/src/sensorsquick/qmlambienttemperaturesensor.cpp
+++ b/src/sensorsquick/qmlambienttemperaturesensor.cpp
@@ -116,6 +116,11 @@ qreal QmlAmbientTemperatureReading::temperature() const
return m_temperature;
}
+QBindable<qreal> QmlAmbientTemperatureReading::bindableTemperature() const
+{
+ return &m_temperature;
+}
+
QSensorReading *QmlAmbientTemperatureReading::reading() const
{
return m_sensor->reading();
@@ -123,9 +128,5 @@ QSensorReading *QmlAmbientTemperatureReading::reading() const
void QmlAmbientTemperatureReading::readingUpdate()
{
- const qreal temperature = m_sensor->reading()->temperature();
- if (m_temperature != temperature) {
- m_temperature = temperature;
- Q_EMIT temperatureChanged();
- }
+ m_temperature = m_sensor->reading()->temperature();
}
diff --git a/src/sensorsquick/qmlambienttemperaturesensor_p.h b/src/sensorsquick/qmlambienttemperaturesensor_p.h
index 45183ee7..39608ad5 100644
--- a/src/sensorsquick/qmlambienttemperaturesensor_p.h
+++ b/src/sensorsquick/qmlambienttemperaturesensor_p.h
@@ -65,8 +65,9 @@ public:
explicit QmlAmbientTemperatureSensor(QObject *parent = 0);
~QmlAmbientTemperatureSensor();
-private:
QSensor *sensor() const override;
+
+private:
QmlSensorReading *createReading() const override;
QAmbientTemperatureSensor *m_sensor;
@@ -75,7 +76,8 @@ private:
class Q_SENSORSQUICK_PRIVATE_EXPORT QmlAmbientTemperatureReading : public QmlSensorReading
{
Q_OBJECT
- Q_PROPERTY(qreal temperature READ temperature NOTIFY temperatureChanged)
+ Q_PROPERTY(qreal temperature READ temperature
+ NOTIFY temperatureChanged BINDABLE bindableTemperature)
QML_NAMED_ELEMENT(AmbientTemperatureReading)
QML_UNCREATABLE("Cannot create AmbientTemperatureReading")
QML_ADDED_IN_VERSION(5,1)
@@ -84,6 +86,7 @@ public:
~QmlAmbientTemperatureReading();
qreal temperature() const;
+ QBindable<qreal> bindableTemperature() const;
Q_SIGNALS:
void temperatureChanged();
@@ -93,7 +96,8 @@ private:
void readingUpdate() override;
QAmbientTemperatureSensor *m_sensor;
- qreal m_temperature;
+ Q_OBJECT_BINDABLE_PROPERTY(QmlAmbientTemperatureReading, qreal,
+ m_temperature, &QmlAmbientTemperatureReading::temperatureChanged)
};
QT_END_NAMESPACE
diff --git a/src/sensorsquick/qmlcompass.cpp b/src/sensorsquick/qmlcompass.cpp
index b3620d6c..c1c110d1 100644
--- a/src/sensorsquick/qmlcompass.cpp
+++ b/src/sensorsquick/qmlcompass.cpp
@@ -116,6 +116,11 @@ qreal QmlCompassReading::azimuth() const
return m_azimuth;
}
+QBindable<qreal> QmlCompassReading::bindableAzimuth() const
+{
+ return &m_azimuth;
+}
+
/*!
\qmlproperty qreal CompassReading::calibrationLevel
This property holds the calibration level of the reading.
@@ -128,6 +133,11 @@ qreal QmlCompassReading::calibrationLevel() const
return m_calibrationLevel;
}
+QBindable<qreal> QmlCompassReading::bindableCalibrationLevel() const
+{
+ return &m_calibrationLevel;
+}
+
QSensorReading *QmlCompassReading::reading() const
{
return m_sensor->reading();
@@ -135,14 +145,6 @@ QSensorReading *QmlCompassReading::reading() const
void QmlCompassReading::readingUpdate()
{
- qreal azm = m_sensor->reading()->azimuth();
- if (m_azimuth != azm) {
- m_azimuth = azm;
- Q_EMIT azimuthChanged();
- }
- qreal calLevel = m_sensor->reading()->calibrationLevel();
- if (m_calibrationLevel != calLevel) {
- m_calibrationLevel = calLevel;
- Q_EMIT calibrationLevelChanged();
- }
+ m_azimuth = m_sensor->reading()->azimuth();
+ m_calibrationLevel = m_sensor->reading()->calibrationLevel();
}
diff --git a/src/sensorsquick/qmlcompass_p.h b/src/sensorsquick/qmlcompass_p.h
index 42c1b15c..af0777bc 100644
--- a/src/sensorsquick/qmlcompass_p.h
+++ b/src/sensorsquick/qmlcompass_p.h
@@ -66,9 +66,9 @@ public:
explicit QmlCompass(QObject *parent = 0);
~QmlCompass();
+ QSensor *sensor() const override;
private:
- QSensor *sensor() const override;
QCompass *m_sensor;
QmlSensorReading *createReading() const override;
};
@@ -76,8 +76,9 @@ private:
class Q_SENSORSQUICK_PRIVATE_EXPORT QmlCompassReading : public QmlSensorReading
{
Q_OBJECT
- Q_PROPERTY(qreal azimuth READ azimuth NOTIFY azimuthChanged)
- Q_PROPERTY(qreal calibrationLevel READ calibrationLevel NOTIFY calibrationLevelChanged)
+ Q_PROPERTY(qreal azimuth READ azimuth NOTIFY azimuthChanged BINDABLE bindableAzimuth)
+ Q_PROPERTY(qreal calibrationLevel READ calibrationLevel
+ NOTIFY calibrationLevelChanged BINDABLE bindableCalibrationLevel)
QML_NAMED_ELEMENT(CompassReading)
QML_UNCREATABLE("Cannot create CompassReading")
QML_ADDED_IN_VERSION(5,0)
@@ -86,7 +87,9 @@ public:
~QmlCompassReading();
qreal azimuth() const;
+ QBindable<qreal> bindableAzimuth() const;
qreal calibrationLevel() const;
+ QBindable<qreal> bindableCalibrationLevel() const;
Q_SIGNALS:
void azimuthChanged();
@@ -96,8 +99,10 @@ private:
QSensorReading *reading() const override;
void readingUpdate() override;
QCompass *m_sensor;
- qreal m_azimuth;
- qreal m_calibrationLevel;
+ Q_OBJECT_BINDABLE_PROPERTY(QmlCompassReading, qreal,
+ m_azimuth, &QmlCompassReading::azimuthChanged)
+ Q_OBJECT_BINDABLE_PROPERTY(QmlCompassReading, qreal,
+ m_calibrationLevel, &QmlCompassReading::calibrationLevelChanged)
};
QT_END_NAMESPACE
diff --git a/src/sensorsquick/qmldistancesensor.cpp b/src/sensorsquick/qmldistancesensor.cpp
index b1d9f6bb..8d48ece9 100644
--- a/src/sensorsquick/qmldistancesensor.cpp
+++ b/src/sensorsquick/qmldistancesensor.cpp
@@ -116,6 +116,12 @@ qreal QmlDistanceReading::distance() const
return m_distance;
}
+QBindable<qreal> QmlDistanceReading::bindableDistance() const
+{
+ return &m_distance;
+}
+
+
QSensorReading *QmlDistanceReading::reading() const
{
return m_sensor->reading();
@@ -123,9 +129,5 @@ QSensorReading *QmlDistanceReading::reading() const
void QmlDistanceReading::readingUpdate()
{
- qreal distance = m_sensor->reading()->distance();
- if (m_distance != distance) {
- m_distance = distance;
- Q_EMIT distanceChanged();
- }
+ m_distance = m_sensor->reading()->distance();
}
diff --git a/src/sensorsquick/qmldistancesensor_p.h b/src/sensorsquick/qmldistancesensor_p.h
index 1f9d9425..9692a997 100644
--- a/src/sensorsquick/qmldistancesensor_p.h
+++ b/src/sensorsquick/qmldistancesensor_p.h
@@ -66,8 +66,9 @@ public:
explicit QmlDistanceSensor(QObject *parent = 0);
~QmlDistanceSensor();
-private:
QSensor *sensor() const override;
+
+private:
QmlSensorReading *createReading() const override;
QDistanceSensor *m_sensor;
@@ -76,7 +77,7 @@ private:
class Q_SENSORSQUICK_PRIVATE_EXPORT QmlDistanceReading : public QmlSensorReading
{
Q_OBJECT
- Q_PROPERTY(qreal distance READ distance NOTIFY distanceChanged)
+ Q_PROPERTY(qreal distance READ distance NOTIFY distanceChanged BINDABLE bindableDistance)
QML_NAMED_ELEMENT(DistanceReading)
QML_UNCREATABLE("Cannot create DistanceReading")
QML_ADDED_IN_VERSION(5,4)
@@ -85,6 +86,7 @@ public:
~QmlDistanceReading();
qreal distance() const;
+ QBindable<qreal> bindableDistance() const;
Q_SIGNALS:
void distanceChanged();
@@ -94,7 +96,8 @@ private:
void readingUpdate() override;
QDistanceSensor *m_sensor;
- qreal m_distance;
+ Q_OBJECT_BINDABLE_PROPERTY(QmlDistanceReading, qreal,
+ m_distance, &QmlDistanceReading::distanceChanged)
};
QT_END_NAMESPACE
diff --git a/src/sensorsquick/qmlgyroscope.cpp b/src/sensorsquick/qmlgyroscope.cpp
index 9983564a..2db7a67f 100644
--- a/src/sensorsquick/qmlgyroscope.cpp
+++ b/src/sensorsquick/qmlgyroscope.cpp
@@ -115,6 +115,11 @@ qreal QmlGyroscopeReading::x() const
return m_x;
}
+QBindable<qreal> QmlGyroscopeReading::bindableX() const
+{
+ return &m_x;
+}
+
/*!
\qmlproperty qreal GyroscopeReading::y
This property holds the angular velocity around the y axis.
@@ -127,6 +132,11 @@ qreal QmlGyroscopeReading::y() const
return m_y;
}
+QBindable<qreal> QmlGyroscopeReading::bindableY() const
+{
+ return &m_y;
+}
+
/*!
\qmlproperty qreal GyroscopeReading::z
This property holds the angular velocity around the z axis.
@@ -139,6 +149,11 @@ qreal QmlGyroscopeReading::z() const
return m_z;
}
+QBindable<qreal> QmlGyroscopeReading::bindableZ() const
+{
+ return &m_z;
+}
+
QSensorReading *QmlGyroscopeReading::reading() const
{
return m_sensor->reading();
@@ -146,19 +161,7 @@ QSensorReading *QmlGyroscopeReading::reading() const
void QmlGyroscopeReading::readingUpdate()
{
- qreal gx = m_sensor->reading()->x();
- if (m_x != gx) {
- m_x = gx;
- Q_EMIT xChanged();
- }
- qreal gy = m_sensor->reading()->y();
- if (m_y != gy) {
- m_y = gy;
- Q_EMIT yChanged();
- }
- qreal gz = m_sensor->reading()->z();
- if (m_z != gz) {
- m_z = gz;
- Q_EMIT zChanged();
- }
+ m_x = m_sensor->reading()->x();
+ m_y = m_sensor->reading()->y();
+ m_z = m_sensor->reading()->z();
}
diff --git a/src/sensorsquick/qmlgyroscope_p.h b/src/sensorsquick/qmlgyroscope_p.h
index 549a67e4..a3fed868 100644
--- a/src/sensorsquick/qmlgyroscope_p.h
+++ b/src/sensorsquick/qmlgyroscope_p.h
@@ -66,9 +66,9 @@ public:
explicit QmlGyroscope(QObject *parent = 0);
~QmlGyroscope();
+ QSensor *sensor() const override;
private:
- QSensor *sensor() const override;
QGyroscope *m_sensor;
QmlSensorReading *createReading() const override;
};
@@ -76,9 +76,9 @@ private:
class Q_SENSORSQUICK_PRIVATE_EXPORT QmlGyroscopeReading : public QmlSensorReading
{
Q_OBJECT
- Q_PROPERTY(qreal x READ x NOTIFY xChanged)
- Q_PROPERTY(qreal y READ y NOTIFY yChanged)
- Q_PROPERTY(qreal z READ z NOTIFY zChanged)
+ Q_PROPERTY(qreal x READ x NOTIFY xChanged BINDABLE bindableX)
+ Q_PROPERTY(qreal y READ y NOTIFY yChanged BINDABLE bindableY)
+ Q_PROPERTY(qreal z READ z NOTIFY zChanged BINDABLE bindableZ)
QML_NAMED_ELEMENT(GyroscopeReading)
QML_UNCREATABLE("Cannot create GyroscopeReading")
QML_ADDED_IN_VERSION(5,0)
@@ -87,8 +87,11 @@ public:
~QmlGyroscopeReading();
qreal x() const;
+ QBindable<qreal> bindableX() const;
qreal y() const;
+ QBindable<qreal> bindableY() const;
qreal z() const;
+ QBindable<qreal> bindableZ() const;
Q_SIGNALS:
void xChanged();
@@ -99,9 +102,12 @@ private:
QSensorReading *reading() const override;
void readingUpdate() override;
QGyroscope *m_sensor;
- qreal m_x;
- qreal m_y;
- qreal m_z;
+ Q_OBJECT_BINDABLE_PROPERTY(QmlGyroscopeReading, qreal,
+ m_x, &QmlGyroscopeReading::xChanged)
+ Q_OBJECT_BINDABLE_PROPERTY(QmlGyroscopeReading, qreal,
+ m_y, &QmlGyroscopeReading::yChanged)
+ Q_OBJECT_BINDABLE_PROPERTY(QmlGyroscopeReading, qreal,
+ m_z, &QmlGyroscopeReading::zChanged)
};
QT_END_NAMESPACE
diff --git a/src/sensorsquick/qmlholstersensor.cpp b/src/sensorsquick/qmlholstersensor.cpp
index cdefd683..d1b8863c 100644
--- a/src/sensorsquick/qmlholstersensor.cpp
+++ b/src/sensorsquick/qmlholstersensor.cpp
@@ -116,6 +116,11 @@ bool QmlHolsterReading::holstered() const
return m_holstered;
}
+QBindable<bool> QmlHolsterReading::bindableHolstered() const
+{
+ return &m_holstered;
+}
+
QSensorReading *QmlHolsterReading::reading() const
{
return m_sensor->reading();
@@ -123,9 +128,5 @@ QSensorReading *QmlHolsterReading::reading() const
void QmlHolsterReading::readingUpdate()
{
- const bool holstered = m_sensor->reading()->holstered();
- if (m_holstered != holstered) {
- m_holstered = holstered;
- Q_EMIT holsteredChanged();
- }
+ m_holstered = m_sensor->reading()->holstered();
}
diff --git a/src/sensorsquick/qmlholstersensor_p.h b/src/sensorsquick/qmlholstersensor_p.h
index a64e2d12..39803764 100644
--- a/src/sensorsquick/qmlholstersensor_p.h
+++ b/src/sensorsquick/qmlholstersensor_p.h
@@ -65,8 +65,9 @@ public:
explicit QmlHolsterSensor(QObject *parent = 0);
~QmlHolsterSensor();
-private:
QSensor *sensor() const override;
+
+private:
QmlSensorReading *createReading() const override;
QHolsterSensor *m_sensor;
@@ -75,7 +76,8 @@ private:
class Q_SENSORSQUICK_PRIVATE_EXPORT QmlHolsterReading : public QmlSensorReading
{
Q_OBJECT
- Q_PROPERTY(bool holstered READ holstered NOTIFY holsteredChanged)
+ Q_PROPERTY(bool holstered READ holstered
+ NOTIFY holsteredChanged BINDABLE bindableHolstered)
QML_NAMED_ELEMENT(HolsterReading)
QML_UNCREATABLE("Cannot create HolsterReading")
QML_ADDED_IN_VERSION(5,1)
@@ -84,6 +86,7 @@ public:
~QmlHolsterReading();
bool holstered() const;
+ QBindable<bool> bindableHolstered() const;
Q_SIGNALS:
void holsteredChanged();
@@ -93,7 +96,8 @@ private:
void readingUpdate() override;
QHolsterSensor *m_sensor;
- bool m_holstered;
+ Q_OBJECT_BINDABLE_PROPERTY(QmlHolsterReading, bool,
+ m_holstered, &QmlHolsterReading::holsteredChanged)
};
QT_END_NAMESPACE
diff --git a/src/sensorsquick/qmlhumiditysensor.cpp b/src/sensorsquick/qmlhumiditysensor.cpp
index 37bf7a18..4715789c 100644
--- a/src/sensorsquick/qmlhumiditysensor.cpp
+++ b/src/sensorsquick/qmlhumiditysensor.cpp
@@ -118,6 +118,11 @@ qreal QmlHumidityReading::relativeHumidity() const
return m_relativeHumidity;
}
+QBindable<qreal> QmlHumidityReading::bindableRelativeHumidity() const
+{
+ return &m_relativeHumidity;
+}
+
/*!
\qmlproperty qreal HumidityReading::absoluteHumidity
This property holds the absolute humidity in grams per cubic meter (g/m3).
@@ -130,6 +135,11 @@ qreal QmlHumidityReading::absoluteHumidity() const
return m_absoluteHumidity;
}
+QBindable<qreal> QmlHumidityReading::bindableAbsoluteHumidity() const
+{
+ return &m_absoluteHumidity;
+}
+
QSensorReading *QmlHumidityReading::reading() const
{
return m_sensor->reading();
@@ -137,14 +147,6 @@ QSensorReading *QmlHumidityReading::reading() const
void QmlHumidityReading::readingUpdate()
{
- qreal humidity = m_sensor->reading()->relativeHumidity();
- if (m_relativeHumidity != humidity) {
- m_relativeHumidity = humidity;
- Q_EMIT relativeHumidityChanged();
- }
- qreal abs = m_sensor->reading()->absoluteHumidity();
- if (m_absoluteHumidity != abs) {
- m_absoluteHumidity = abs;
- Q_EMIT absoluteHumidityChanged();
- }
+ m_relativeHumidity = m_sensor->reading()->relativeHumidity();
+ m_absoluteHumidity = m_sensor->reading()->absoluteHumidity();
}
diff --git a/src/sensorsquick/qmlhumiditysensor_p.h b/src/sensorsquick/qmlhumiditysensor_p.h
index 40c49339..08083d90 100644
--- a/src/sensorsquick/qmlhumiditysensor_p.h
+++ b/src/sensorsquick/qmlhumiditysensor_p.h
@@ -67,8 +67,9 @@ public:
explicit QmlHumiditySensor(QObject *parent = nullptr);
~QmlHumiditySensor();
-private:
QSensor *sensor() const override;
+
+private:
QmlSensorReading *createReading() const override;
QHumiditySensor *m_sensor;
@@ -77,8 +78,10 @@ private:
class Q_SENSORSQUICK_PRIVATE_EXPORT QmlHumidityReading : public QmlSensorReading
{
Q_OBJECT
- Q_PROPERTY(qreal relativeHumidity READ relativeHumidity NOTIFY relativeHumidityChanged)
- Q_PROPERTY(qreal absoluteHumidity READ absoluteHumidity NOTIFY absoluteHumidityChanged)
+ Q_PROPERTY(qreal relativeHumidity READ relativeHumidity
+ NOTIFY relativeHumidityChanged BINDABLE bindableRelativeHumidity)
+ Q_PROPERTY(qreal absoluteHumidity READ absoluteHumidity
+ NOTIFY absoluteHumidityChanged BINDABLE bindableAbsoluteHumidity)
QML_NAMED_ELEMENT(HumidityReading)
QML_UNCREATABLE("Cannot create HumidityReading")
QML_ADDED_IN_VERSION(5,9)
@@ -87,7 +90,9 @@ public:
~QmlHumidityReading();
qreal relativeHumidity() const;
+ QBindable<qreal> bindableRelativeHumidity() const;
qreal absoluteHumidity() const;
+ QBindable<qreal> bindableAbsoluteHumidity() const;
Q_SIGNALS:
void relativeHumidityChanged();
@@ -98,8 +103,10 @@ private:
void readingUpdate() override;
QHumiditySensor *m_sensor;
- qreal m_relativeHumidity;
- qreal m_absoluteHumidity;
+ Q_OBJECT_BINDABLE_PROPERTY(QmlHumidityReading, qreal,
+ m_relativeHumidity, &QmlHumidityReading::relativeHumidityChanged)
+ Q_OBJECT_BINDABLE_PROPERTY(QmlHumidityReading, qreal,
+ m_absoluteHumidity, &QmlHumidityReading::absoluteHumidityChanged)
};
QT_END_NAMESPACE
diff --git a/src/sensorsquick/qmlirproximitysensor.cpp b/src/sensorsquick/qmlirproximitysensor.cpp
index 42e9cfe9..9623377a 100644
--- a/src/sensorsquick/qmlirproximitysensor.cpp
+++ b/src/sensorsquick/qmlirproximitysensor.cpp
@@ -114,6 +114,12 @@ qreal QmlIRProximitySensorReading::reflectance() const
return m_reflectance;
}
+QBindable<qreal> QmlIRProximitySensorReading::bindableReflectance() const
+{
+ return &m_reflectance;
+}
+
+
QSensorReading *QmlIRProximitySensorReading::reading() const
{
return m_sensor->reading();
@@ -121,9 +127,5 @@ QSensorReading *QmlIRProximitySensorReading::reading() const
void QmlIRProximitySensorReading::readingUpdate()
{
- qreal fl = m_sensor->reading()->reflectance();
- if (m_reflectance != fl) {
- m_reflectance = fl;
- Q_EMIT reflectanceChanged();
- }
+ m_reflectance = m_sensor->reading()->reflectance();
}
diff --git a/src/sensorsquick/qmlirproximitysensor_p.h b/src/sensorsquick/qmlirproximitysensor_p.h
index 6039794d..e67f6b78 100644
--- a/src/sensorsquick/qmlirproximitysensor_p.h
+++ b/src/sensorsquick/qmlirproximitysensor_p.h
@@ -66,8 +66,9 @@ public:
explicit QmlIRProximitySensor(QObject *parent = 0);
~QmlIRProximitySensor();
-private:
QSensor *sensor() const override;
+
+private:
QIRProximitySensor *m_sensor;
QmlSensorReading *createReading() const override;
};
@@ -75,7 +76,8 @@ private:
class Q_SENSORSQUICK_PRIVATE_EXPORT QmlIRProximitySensorReading : public QmlSensorReading
{
Q_OBJECT
- Q_PROPERTY(qreal reflectance READ reflectance NOTIFY reflectanceChanged)
+ Q_PROPERTY(qreal reflectance READ reflectance
+ NOTIFY reflectanceChanged BINDABLE bindableReflectance)
QML_NAMED_ELEMENT(IRProximityReading)
QML_UNCREATABLE("Cannot create IRProximityReading")
QML_ADDED_IN_VERSION(5,0)
@@ -84,6 +86,7 @@ public:
~QmlIRProximitySensorReading();
qreal reflectance() const;
+ QBindable<qreal> bindableReflectance() const;
Q_SIGNALS:
void reflectanceChanged();
@@ -92,7 +95,8 @@ private:
QSensorReading *reading() const override;
void readingUpdate() override;
QIRProximitySensor *m_sensor;
- qreal m_reflectance;
+ Q_OBJECT_BINDABLE_PROPERTY(QmlIRProximitySensorReading, qreal,
+ m_reflectance, &QmlIRProximitySensorReading::reflectanceChanged)
};
QT_END_NAMESPACE
diff --git a/src/sensorsquick/qmllidsensor.cpp b/src/sensorsquick/qmllidsensor.cpp
index 698c03cc..68d92181 100644
--- a/src/sensorsquick/qmllidsensor.cpp
+++ b/src/sensorsquick/qmllidsensor.cpp
@@ -117,6 +117,11 @@ bool QmlLidReading::backLidClosed() const
return m_backClosed;
}
+QBindable<bool> QmlLidReading::bindableBackLidClosed() const
+{
+ return &m_backClosed;
+}
+
/*!
\qmlproperty qreal LidReading::frontLidClosed
This property holds whether the front lid is closed.
@@ -129,6 +134,11 @@ bool QmlLidReading::frontLidClosed() const
return m_frontClosed;
}
+QBindable<bool> QmlLidReading::bindableFrontLidClosed() const
+{
+ return &m_frontClosed;
+}
+
QSensorReading *QmlLidReading::reading() const
{
return m_sensor->reading();
@@ -136,14 +146,6 @@ QSensorReading *QmlLidReading::reading() const
void QmlLidReading::readingUpdate()
{
- const bool backClosed = m_sensor->reading()->backLidClosed();
- if (m_backClosed != backClosed) {
- m_backClosed = backClosed;
- Q_EMIT backLidChanged(m_backClosed);
- }
- const bool frontClosed = m_sensor->reading()->frontLidClosed();
- if (m_frontClosed != frontClosed) {
- m_frontClosed = frontClosed;
- Q_EMIT frontLidChanged(m_frontClosed);
- }
+ m_backClosed = m_sensor->reading()->backLidClosed();
+ m_frontClosed = m_sensor->reading()->frontLidClosed();
}
diff --git a/src/sensorsquick/qmllidsensor_p.h b/src/sensorsquick/qmllidsensor_p.h
index 99f6eba3..73242e0b 100644
--- a/src/sensorsquick/qmllidsensor_p.h
+++ b/src/sensorsquick/qmllidsensor_p.h
@@ -65,8 +65,9 @@ public:
explicit QmlLidSensor(QObject *parent = 0);
~QmlLidSensor();
-private:
QSensor *sensor() const override;
+
+private:
QmlSensorReading *createReading() const override;
QLidSensor *m_sensor;
@@ -75,8 +76,10 @@ private:
class Q_SENSORSQUICK_PRIVATE_EXPORT QmlLidReading : public QmlSensorReading
{
Q_OBJECT
- Q_PROPERTY(bool backLidClosed READ backLidClosed NOTIFY backLidChanged)
- Q_PROPERTY(bool frontLidClosed READ frontLidClosed NOTIFY frontLidChanged)
+ Q_PROPERTY(bool backLidClosed READ backLidClosed
+ NOTIFY backLidChanged BINDABLE bindableBackLidClosed)
+ Q_PROPERTY(bool frontLidClosed READ frontLidClosed
+ NOTIFY frontLidChanged BINDABLE bindableFrontLidClosed)
QML_NAMED_ELEMENT(LidReading)
QML_UNCREATABLE("Cannot create LidReading")
QML_ADDED_IN_VERSION(5,9)
@@ -85,7 +88,9 @@ public:
~QmlLidReading();
bool backLidClosed() const;
+ QBindable<bool> bindableBackLidClosed() const;
bool frontLidClosed() const;
+ QBindable<bool> bindableFrontLidClosed() const;
Q_SIGNALS:
void backLidChanged(bool closed);
@@ -96,8 +101,10 @@ private:
void readingUpdate() override;
QLidSensor *m_sensor;
- bool m_backClosed;
- bool m_frontClosed;
+ Q_OBJECT_BINDABLE_PROPERTY(QmlLidReading, bool,
+ m_backClosed, &QmlLidReading::backLidChanged)
+ Q_OBJECT_BINDABLE_PROPERTY(QmlLidReading, bool,
+ m_frontClosed, &QmlLidReading::frontLidChanged)
};
QT_END_NAMESPACE
diff --git a/src/sensorsquick/qmllightsensor.cpp b/src/sensorsquick/qmllightsensor.cpp
index f60390bf..2be7e1e0 100644
--- a/src/sensorsquick/qmllightsensor.cpp
+++ b/src/sensorsquick/qmllightsensor.cpp
@@ -130,6 +130,11 @@ qreal QmlLightSensorReading::illuminance() const
return m_illuminance;
}
+QBindable<qreal> QmlLightSensorReading::bindableIlluminance() const
+{
+ return &m_illuminance;
+}
+
QSensorReading *QmlLightSensorReading::reading() const
{
return m_sensor->reading();
@@ -137,9 +142,5 @@ QSensorReading *QmlLightSensorReading::reading() const
void QmlLightSensorReading::readingUpdate()
{
- qreal ill = m_sensor->reading()->lux();
- if (m_illuminance != ill) {
- m_illuminance = ill;
- Q_EMIT illuminanceChanged();
- }
+ m_illuminance = m_sensor->reading()->lux();
}
diff --git a/src/sensorsquick/qmllightsensor_p.h b/src/sensorsquick/qmllightsensor_p.h
index 137be444..66770349 100644
--- a/src/sensorsquick/qmllightsensor_p.h
+++ b/src/sensorsquick/qmllightsensor_p.h
@@ -68,12 +68,12 @@ public:
~QmlLightSensor();
qreal fieldOfView() const;
+ QSensor *sensor() const override;
Q_SIGNALS:
void fieldOfViewChanged(qreal fieldOfView);
private:
- QSensor *sensor() const override;
QLightSensor *m_sensor;
QmlSensorReading *createReading() const override;
};
@@ -81,7 +81,8 @@ private:
class Q_SENSORSQUICK_PRIVATE_EXPORT QmlLightSensorReading : public QmlSensorReading
{
Q_OBJECT
- Q_PROPERTY(qreal illuminance READ illuminance NOTIFY illuminanceChanged)
+ Q_PROPERTY(qreal illuminance READ illuminance
+ NOTIFY illuminanceChanged BINDABLE bindableIlluminance)
QML_NAMED_ELEMENT(LightReading)
QML_UNCREATABLE("Cannot create LightReading")
QML_ADDED_IN_VERSION(5,0)
@@ -90,6 +91,7 @@ public:
~QmlLightSensorReading();
qreal illuminance() const;
+ QBindable<qreal> bindableIlluminance() const;
Q_SIGNALS:
void illuminanceChanged();
@@ -98,7 +100,8 @@ private:
QSensorReading *reading() const override;
void readingUpdate() override;
QLightSensor *m_sensor;
- qreal m_illuminance;
+ Q_OBJECT_BINDABLE_PROPERTY(QmlLightSensorReading, qreal,
+ m_illuminance, &QmlLightSensorReading::illuminanceChanged)
};
QT_END_NAMESPACE
diff --git a/src/sensorsquick/qmlmagnetometer.cpp b/src/sensorsquick/qmlmagnetometer.cpp
index e911d583..f2d144a5 100644
--- a/src/sensorsquick/qmlmagnetometer.cpp
+++ b/src/sensorsquick/qmlmagnetometer.cpp
@@ -137,6 +137,11 @@ qreal QmlMagnetometerReading::x() const
return m_x;
}
+QBindable<qreal> QmlMagnetometerReading::bindableX() const
+{
+ return &m_x;
+}
+
/*!
\qmlproperty qreal MagnetometerReading::y
This property holds the raw magnetic flux density on the Y axis.
@@ -149,6 +154,11 @@ qreal QmlMagnetometerReading::y() const
return m_y;
}
+QBindable<qreal> QmlMagnetometerReading::bindableY() const
+{
+ return &m_y;
+}
+
/*!
\qmlproperty qreal MagnetometerReading::z
This property holds the raw magnetic flux density on the Z axis.
@@ -161,6 +171,11 @@ qreal QmlMagnetometerReading::z() const
return m_z;
}
+QBindable<qreal> QmlMagnetometerReading::bindableZ() const
+{
+ return &m_z;
+}
+
/*!
\qmlproperty qreal MagnetometerReading::calibrationLevel
This property holds the accuracy of the reading.
@@ -173,6 +188,11 @@ qreal QmlMagnetometerReading::calibrationLevel() const
return m_calibrationLevel;
}
+QBindable<qreal> QmlMagnetometerReading::bindableCalibrationLevel() const
+{
+ return &m_calibrationLevel;
+}
+
QSensorReading *QmlMagnetometerReading::reading() const
{
return m_sensor->reading();
@@ -180,24 +200,8 @@ QSensorReading *QmlMagnetometerReading::reading() const
void QmlMagnetometerReading::readingUpdate()
{
- qreal magX = m_sensor->reading()->x();
- if (m_x != magX) {
- m_x = magX;
- Q_EMIT xChanged();
- }
- qreal magY = m_sensor->reading()->y();
- if (m_y != magY) {
- m_y = magY;
- Q_EMIT yChanged();
- }
- qreal magZ = m_sensor->reading()->z();
- if (m_z != magZ) {
- m_z = magZ;
- Q_EMIT zChanged();
- }
- qreal calLevel = m_sensor->reading()->calibrationLevel();
- if (m_calibrationLevel != calLevel) {
- m_calibrationLevel = calLevel;
- Q_EMIT calibrationLevelChanged();
- }
+ m_x = m_sensor->reading()->x();
+ m_y = m_sensor->reading()->y();
+ m_z = m_sensor->reading()->z();
+ m_calibrationLevel= m_sensor->reading()->calibrationLevel();
}
diff --git a/src/sensorsquick/qmlmagnetometer_p.h b/src/sensorsquick/qmlmagnetometer_p.h
index ef30f6ff..36e41d56 100644
--- a/src/sensorsquick/qmlmagnetometer_p.h
+++ b/src/sensorsquick/qmlmagnetometer_p.h
@@ -70,11 +70,12 @@ public:
bool returnGeoValues() const;
void setReturnGeoValues(bool geo);
+ QSensor *sensor() const override;
+
Q_SIGNALS:
void returnGeoValuesChanged(bool returnGeoValues);
private:
- QSensor *sensor() const override;
QMagnetometer *m_sensor;
QmlSensorReading *createReading() const override;
};
@@ -82,10 +83,11 @@ private:
class Q_SENSORSQUICK_PRIVATE_EXPORT QmlMagnetometerReading : public QmlSensorReading
{
Q_OBJECT
- Q_PROPERTY(qreal x READ x NOTIFY xChanged)
- Q_PROPERTY(qreal y READ y NOTIFY yChanged)
- Q_PROPERTY(qreal z READ z NOTIFY zChanged)
- Q_PROPERTY(qreal calibrationLevel READ calibrationLevel NOTIFY calibrationLevelChanged)
+ Q_PROPERTY(qreal x READ x NOTIFY xChanged BINDABLE bindableX)
+ Q_PROPERTY(qreal y READ y NOTIFY yChanged BINDABLE bindableY)
+ Q_PROPERTY(qreal z READ z NOTIFY zChanged BINDABLE bindableZ)
+ Q_PROPERTY(qreal calibrationLevel READ calibrationLevel
+ NOTIFY calibrationLevelChanged BINDABLE bindableCalibrationLevel)
QML_NAMED_ELEMENT(MagnetometerReading)
QML_UNCREATABLE("Cannot create MagnetometerReading")
QML_ADDED_IN_VERSION(5,0)
@@ -94,9 +96,14 @@ public:
~QmlMagnetometerReading();
qreal x() const;
+ QBindable<qreal> bindableX() const;
qreal y() const;
+ QBindable<qreal> bindableY() const;
qreal z() const;
+ QBindable<qreal> bindableZ() const;
qreal calibrationLevel() const;
+ QBindable<qreal> bindableCalibrationLevel() const;
+
Q_SIGNALS:
void xChanged();
@@ -108,10 +115,14 @@ private:
QSensorReading *reading() const override;
void readingUpdate() override;
QMagnetometer *m_sensor;
- qreal m_x;
- qreal m_y;
- qreal m_z;
- qreal m_calibrationLevel;
+ Q_OBJECT_BINDABLE_PROPERTY(QmlMagnetometerReading, qreal,
+ m_x, &QmlMagnetometerReading::xChanged)
+ Q_OBJECT_BINDABLE_PROPERTY(QmlMagnetometerReading, qreal,
+ m_y, &QmlMagnetometerReading::yChanged)
+ Q_OBJECT_BINDABLE_PROPERTY(QmlMagnetometerReading, qreal,
+ m_z, &QmlMagnetometerReading::zChanged)
+ Q_OBJECT_BINDABLE_PROPERTY(QmlMagnetometerReading, qreal,
+ m_calibrationLevel, &QmlMagnetometerReading::calibrationLevelChanged)
};
QT_END_NAMESPACE
diff --git a/src/sensorsquick/qmlorientationsensor.cpp b/src/sensorsquick/qmlorientationsensor.cpp
index 0cf9cc19..c44df521 100644
--- a/src/sensorsquick/qmlorientationsensor.cpp
+++ b/src/sensorsquick/qmlorientationsensor.cpp
@@ -126,6 +126,11 @@ QOrientationReading::Orientation QmlOrientationSensorReading::orientation() cons
return m_orientation;
}
+QBindable<QOrientationReading::Orientation> QmlOrientationSensorReading::bindableOrientation() const
+{
+ return &m_orientation;
+}
+
QSensorReading *QmlOrientationSensorReading::reading() const
{
return m_sensor->reading();
@@ -133,9 +138,5 @@ QSensorReading *QmlOrientationSensorReading::reading() const
void QmlOrientationSensorReading::readingUpdate()
{
- QOrientationReading::Orientation o = m_sensor->reading()->orientation();
- if (m_orientation != o) {
- m_orientation = o;
- Q_EMIT orientationChanged();
- }
+ m_orientation = m_sensor->reading()->orientation();
}
diff --git a/src/sensorsquick/qmlorientationsensor_p.h b/src/sensorsquick/qmlorientationsensor_p.h
index 4b04b3e8..9077e338 100644
--- a/src/sensorsquick/qmlorientationsensor_p.h
+++ b/src/sensorsquick/qmlorientationsensor_p.h
@@ -67,9 +67,9 @@ public:
explicit QmlOrientationSensor(QObject *parent = 0);
~QmlOrientationSensor();
+ QSensor *sensor() const override;
private:
- QSensor *sensor() const override;
QOrientationSensor *m_sensor;
QmlSensorReading *createReading() const override;
};
@@ -77,7 +77,8 @@ private:
class Q_SENSORSQUICK_PRIVATE_EXPORT QmlOrientationSensorReading : public QmlSensorReading
{
Q_OBJECT
- Q_PROPERTY(QOrientationReading::Orientation orientation READ orientation NOTIFY orientationChanged)
+ Q_PROPERTY(QOrientationReading::Orientation orientation READ orientation
+ NOTIFY orientationChanged BINDABLE bindableOrientation)
QML_NAMED_ELEMENT(OrientationReading)
QML_UNCREATABLE("Cannot create OrientationReading")
QML_ADDED_IN_VERSION(5,0)
@@ -87,6 +88,7 @@ public:
~QmlOrientationSensorReading();
QOrientationReading::Orientation orientation() const;
+ QBindable<QOrientationReading::Orientation> bindableOrientation() const;
Q_SIGNALS:
void orientationChanged();
@@ -95,7 +97,8 @@ private:
QSensorReading *reading() const override;
void readingUpdate() override;
QOrientationSensor *m_sensor;
- QOrientationReading::Orientation m_orientation;
+ Q_OBJECT_BINDABLE_PROPERTY(QmlOrientationSensorReading, QOrientationReading::Orientation,
+ m_orientation, &QmlOrientationSensorReading::orientationChanged)
};
QT_END_NAMESPACE
diff --git a/src/sensorsquick/qmlpressuresensor.cpp b/src/sensorsquick/qmlpressuresensor.cpp
index 08a434b0..054f089e 100644
--- a/src/sensorsquick/qmlpressuresensor.cpp
+++ b/src/sensorsquick/qmlpressuresensor.cpp
@@ -117,6 +117,11 @@ qreal QmlPressureReading::pressure() const
return m_pressure;
}
+QBindable<qreal> QmlPressureReading::bindablePressure() const
+{
+ return &m_pressure;
+}
+
/*!
\qmlproperty qreal PressureReading::temperature
This property holds the pressure sensor's temperature value in degrees Celsius.
@@ -130,6 +135,11 @@ qreal QmlPressureReading::temperature() const
return m_temperature;
}
+QBindable<qreal> QmlPressureReading::bindableTemperature() const
+{
+ return &m_temperature;
+}
+
QSensorReading *QmlPressureReading::reading() const
{
return m_sensor->reading();
@@ -137,15 +147,6 @@ QSensorReading *QmlPressureReading::reading() const
void QmlPressureReading::readingUpdate()
{
- qreal pressure = m_sensor->reading()->pressure();
- if (m_pressure != pressure) {
- m_pressure = pressure;
- Q_EMIT pressureChanged();
- }
-
- qreal temperature = m_sensor->reading()->temperature();
- if (m_temperature != temperature) {
- m_temperature = temperature;
- Q_EMIT temperatureChanged();
- }
+ m_pressure = m_sensor->reading()->pressure();
+ m_temperature = m_sensor->reading()->temperature();
}
diff --git a/src/sensorsquick/qmlpressuresensor_p.h b/src/sensorsquick/qmlpressuresensor_p.h
index b4b353d1..61e24a55 100644
--- a/src/sensorsquick/qmlpressuresensor_p.h
+++ b/src/sensorsquick/qmlpressuresensor_p.h
@@ -65,8 +65,9 @@ public:
explicit QmlPressureSensor(QObject *parent = 0);
~QmlPressureSensor();
-private:
QSensor *sensor() const override;
+
+private:
QmlSensorReading *createReading() const override;
QPressureSensor *m_sensor;
@@ -75,8 +76,9 @@ private:
class Q_SENSORSQUICK_PRIVATE_EXPORT QmlPressureReading : public QmlSensorReading
{
Q_OBJECT
- Q_PROPERTY(qreal pressure READ pressure NOTIFY pressureChanged)
- Q_PROPERTY(qreal temperature READ temperature NOTIFY temperatureChanged REVISION 1)
+ Q_PROPERTY(qreal pressure READ pressure NOTIFY pressureChanged BINDABLE bindablePressure)
+ Q_PROPERTY(qreal temperature READ temperature
+ NOTIFY temperatureChanged REVISION 1 BINDABLE bindableTemperature)
QML_NAMED_ELEMENT(PressureReading)
QML_UNCREATABLE("Cannot create PressureReading")
QML_ADDED_IN_VERSION(5,1)
@@ -85,7 +87,9 @@ public:
~QmlPressureReading();
qreal pressure() const;
+ QBindable<qreal> bindablePressure() const;
qreal temperature() const;
+ QBindable<qreal> bindableTemperature() const;
Q_SIGNALS:
void pressureChanged();
@@ -96,8 +100,10 @@ private:
void readingUpdate() override;
QPressureSensor *m_sensor;
- qreal m_pressure;
- qreal m_temperature;
+ Q_OBJECT_BINDABLE_PROPERTY(QmlPressureReading, qreal,
+ m_pressure, &QmlPressureReading::pressureChanged)
+ Q_OBJECT_BINDABLE_PROPERTY(QmlPressureReading, qreal,
+ m_temperature, &QmlPressureReading::temperatureChanged)
};
QT_END_NAMESPACE
diff --git a/src/sensorsquick/qmlproximitysensor.cpp b/src/sensorsquick/qmlproximitysensor.cpp
index 73767f64..fcf73452 100644
--- a/src/sensorsquick/qmlproximitysensor.cpp
+++ b/src/sensorsquick/qmlproximitysensor.cpp
@@ -116,6 +116,11 @@ bool QmlProximitySensorReading::near() const
return m_near;
}
+QBindable<bool> QmlProximitySensorReading::bindableNear() const
+{
+ return &m_near;
+}
+
QSensorReading *QmlProximitySensorReading::reading() const
{
return m_sensor->reading();
@@ -123,9 +128,5 @@ QSensorReading *QmlProximitySensorReading::reading() const
void QmlProximitySensorReading::readingUpdate()
{
- bool pNear = m_sensor->reading()->close();
- if (m_near != pNear) {
- m_near = pNear;
- Q_EMIT nearChanged();
- }
+ m_near = m_sensor->reading()->close();
}
diff --git a/src/sensorsquick/qmlproximitysensor_p.h b/src/sensorsquick/qmlproximitysensor_p.h
index 9d28dfcf..0eab0f8e 100644
--- a/src/sensorsquick/qmlproximitysensor_p.h
+++ b/src/sensorsquick/qmlproximitysensor_p.h
@@ -68,9 +68,9 @@ public:
explicit QmlProximitySensor(QObject *parent = 0);
~QmlProximitySensor();
+ QSensor *sensor() const override;
private:
- QSensor *sensor() const override;
QProximitySensor *m_sensor;
QmlSensorReading *createReading() const override;
};
@@ -78,7 +78,7 @@ private:
class Q_SENSORSQUICK_PRIVATE_EXPORT QmlProximitySensorReading : public QmlSensorReading
{
Q_OBJECT
- Q_PROPERTY(bool near READ near NOTIFY nearChanged)
+ Q_PROPERTY(bool near READ near NOTIFY nearChanged BINDABLE bindableNear)
QML_NAMED_ELEMENT(ProximityReading)
QML_UNCREATABLE("Cannot create ProximityReading")
QML_ADDED_IN_VERSION(5,0)
@@ -87,6 +87,7 @@ public:
~QmlProximitySensorReading();
bool near() const;
+ QBindable<bool> bindableNear() const;
Q_SIGNALS:
void nearChanged();
@@ -95,7 +96,8 @@ private:
QSensorReading *reading() const override;
void readingUpdate() override;
QProximitySensor *m_sensor;
- bool m_near;
+ Q_OBJECT_BINDABLE_PROPERTY(QmlProximitySensorReading, bool,
+ m_near, &QmlProximitySensorReading::nearChanged)
};
QT_END_NAMESPACE
diff --git a/src/sensorsquick/qmlrotationsensor.cpp b/src/sensorsquick/qmlrotationsensor.cpp
index 4eb6aac7..71e77c01 100644
--- a/src/sensorsquick/qmlrotationsensor.cpp
+++ b/src/sensorsquick/qmlrotationsensor.cpp
@@ -135,6 +135,11 @@ qreal QmlRotationSensorReading::x() const
return m_x;
}
+QBindable<qreal> QmlRotationSensorReading::bindableX() const
+{
+ return &m_x;
+}
+
/*!
\qmlproperty qreal RotationReading::y
This property holds the rotation around the y axis.
@@ -147,6 +152,11 @@ qreal QmlRotationSensorReading::y() const
return m_y;
}
+QBindable<qreal> QmlRotationSensorReading::bindableY() const
+{
+ return &m_y;
+}
+
/*!
\qmlproperty qreal RotationReading::z
This property holds the rotation around the z axis.
@@ -159,6 +169,11 @@ qreal QmlRotationSensorReading::z() const
return m_z;
}
+QBindable<qreal> QmlRotationSensorReading::bindableZ() const
+{
+ return &m_z;
+}
+
QSensorReading *QmlRotationSensorReading::reading() const
{
return m_sensor->reading();
@@ -166,19 +181,7 @@ QSensorReading *QmlRotationSensorReading::reading() const
void QmlRotationSensorReading::readingUpdate()
{
- qreal rX = m_sensor->reading()->x();
- if (m_x != rX) {
- m_x = rX;
- Q_EMIT xChanged();
- }
- qreal rY = m_sensor->reading()->y();
- if (m_y != rY) {
- m_y = rY;
- Q_EMIT yChanged();
- }
- qreal rZ = m_sensor->reading()->z();
- if (m_z != rZ) {
- m_z = rZ;
- Q_EMIT zChanged();
- }
+ m_x = m_sensor->reading()->x();
+ m_y = m_sensor->reading()->y();
+ m_z = m_sensor->reading()->z();
}
diff --git a/src/sensorsquick/qmlrotationsensor_p.h b/src/sensorsquick/qmlrotationsensor_p.h
index f14ad791..a3799968 100644
--- a/src/sensorsquick/qmlrotationsensor_p.h
+++ b/src/sensorsquick/qmlrotationsensor_p.h
@@ -68,12 +68,12 @@ public:
~QmlRotationSensor();
bool hasZ() const;
+ QSensor *sensor() const override;
Q_SIGNALS:
void hasZChanged(bool hasZ);
private:
- QSensor *sensor() const override;
void _update() override;
QRotationSensor *m_sensor;
QmlSensorReading *createReading() const override;
@@ -82,9 +82,9 @@ private:
class Q_SENSORSQUICK_PRIVATE_EXPORT QmlRotationSensorReading : public QmlSensorReading
{
Q_OBJECT
- Q_PROPERTY(qreal x READ x NOTIFY xChanged)
- Q_PROPERTY(qreal y READ y NOTIFY yChanged)
- Q_PROPERTY(qreal z READ z NOTIFY zChanged)
+ Q_PROPERTY(qreal x READ x NOTIFY xChanged BINDABLE bindableX)
+ Q_PROPERTY(qreal y READ y NOTIFY yChanged BINDABLE bindableY)
+ Q_PROPERTY(qreal z READ z NOTIFY zChanged BINDABLE bindableZ)
QML_NAMED_ELEMENT(RotationReading)
QML_UNCREATABLE("Cannot create RotationReading")
QML_ADDED_IN_VERSION(5,0)
@@ -93,8 +93,11 @@ public:
~QmlRotationSensorReading();
qreal x() const;
+ QBindable<qreal> bindableX() const;
qreal y() const;
+ QBindable<qreal> bindableY() const;
qreal z() const;
+ QBindable<qreal> bindableZ() const;
Q_SIGNALS:
void xChanged();
@@ -105,9 +108,12 @@ private:
QSensorReading *reading() const override;
void readingUpdate() override;
QRotationSensor *m_sensor;
- qreal m_x;
- qreal m_y;
- qreal m_z;
+ Q_OBJECT_BINDABLE_PROPERTY(QmlRotationSensorReading, qreal,
+ m_x, &QmlRotationSensorReading::xChanged)
+ Q_OBJECT_BINDABLE_PROPERTY(QmlRotationSensorReading, qreal,
+ m_y, &QmlRotationSensorReading::yChanged)
+ Q_OBJECT_BINDABLE_PROPERTY(QmlRotationSensorReading, qreal,
+ m_z, &QmlRotationSensorReading::zChanged)
};
QT_END_NAMESPACE
diff --git a/src/sensorsquick/qmlsensor.cpp b/src/sensorsquick/qmlsensor.cpp
index 2ff544a5..970f8198 100644
--- a/src/sensorsquick/qmlsensor.cpp
+++ b/src/sensorsquick/qmlsensor.cpp
@@ -307,6 +307,11 @@ QmlSensorReading *QmlSensor::reading() const
return m_reading;
}
+QBindable<QmlSensorReading*> QmlSensor::bindableReading() const
+{
+ return &m_reading;
+}
+
/*!
\qmlproperty Sensor::AxesOrientationMode Sensor::axesOrientationMode
\since QtSensors 5.1
@@ -455,7 +460,7 @@ void QmlSensor::componentComplete()
if (sensor()->connectToBackend())
Q_EMIT connectedToBackendChanged();
- m_reading = createReading();
+ m_reading.setValueBypassingBindings(createReading());
m_reading->setParent(this);
if (oldDataRate != dataRate())
Q_EMIT dataRateChanged();
@@ -504,6 +509,7 @@ void QmlSensor::updateReading()
{
if (m_reading) {
m_reading->update();
+ m_reading.notify();
Q_EMIT readingChanged();
}
}
@@ -524,7 +530,7 @@ void QmlSensor::updateReading()
*/
QmlSensorReading::QmlSensorReading(QSensor *)
- : QObject(0)
+ : QObject(nullptr)
{
}
@@ -544,13 +550,15 @@ quint64 QmlSensorReading::timestamp() const
return m_timestamp;
}
+QBindable<quint64> QmlSensorReading::bindableTimestamp() const
+{
+ return &m_timestamp;
+}
+
+
void QmlSensorReading::update()
{
- quint64 ts = reading()->timestamp();
- if (m_timestamp != ts) {
- m_timestamp = ts;
- Q_EMIT timestampChanged();
- }
+ m_timestamp = reading()->timestamp();
readingUpdate();
}
diff --git a/src/sensorsquick/qmlsensor_p.h b/src/sensorsquick/qmlsensor_p.h
index 276b6e76..c6c748e8 100644
--- a/src/sensorsquick/qmlsensor_p.h
+++ b/src/sensorsquick/qmlsensor_p.h
@@ -77,7 +77,7 @@ class Q_SENSORSQUICK_PRIVATE_EXPORT QmlSensor : public QObject, public QQmlParse
Q_PROPERTY(bool connectedToBackend READ isConnectedToBackend NOTIFY connectedToBackendChanged)
Q_PROPERTY(QQmlListProperty<QmlSensorRange> availableDataRates READ availableDataRates NOTIFY availableDataRatesChanged)
Q_PROPERTY(int dataRate READ dataRate WRITE setDataRate NOTIFY dataRateChanged)
- Q_PROPERTY(QmlSensorReading* reading READ reading NOTIFY readingChanged)
+ Q_PROPERTY(QmlSensorReading* reading READ reading NOTIFY readingChanged BINDABLE bindableReading)
Q_PROPERTY(bool busy READ isBusy NOTIFY busyChanged)
Q_PROPERTY(bool active READ isActive WRITE setActive NOTIFY activeChanged)
Q_PROPERTY(QQmlListProperty<QmlSensorOutputRange> outputRanges READ outputRanges NOTIFY outputRangesChanged)
@@ -138,6 +138,7 @@ public:
int error() const;
QmlSensorReading *reading() const;
+ QBindable<QmlSensorReading*> bindableReading() const;
AxesOrientationMode axesOrientationMode() const;
void setAxesOrientationMode(AxesOrientationMode axesOrientationMode);
@@ -156,6 +157,8 @@ public:
virtual QSensor *sensor() const = 0;
+ void componentComplete() override;
+
public Q_SLOTS:
bool start();
void stop();
@@ -187,21 +190,19 @@ protected:
private Q_SLOTS:
void updateReading();
-protected Q_SLOTS:
- void componentComplete() override;
-
private:
void classBegin() override;
virtual void _update();
bool m_componentComplete = false;
bool m_activateOnComplete = false;
- QmlSensorReading *m_reading = nullptr;
+ Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(QmlSensor, QmlSensorReading*,
+ m_reading, nullptr)
};
class Q_SENSORSQUICK_PRIVATE_EXPORT QmlSensorReading : public QObject
{
Q_OBJECT
- Q_PROPERTY(quint64 timestamp READ timestamp NOTIFY timestampChanged)
+ Q_PROPERTY(quint64 timestamp READ timestamp NOTIFY timestampChanged BINDABLE bindableTimestamp)
QML_NAMED_ELEMENT(SensorReading)
QML_UNCREATABLE("Cannot create SensorReading")
QML_ADDED_IN_VERSION(5,0)
@@ -210,6 +211,8 @@ public:
~QmlSensorReading();
quint64 timestamp() const;
+ QBindable<quint64> bindableTimestamp() const;
+
void update();
Q_SIGNALS:
@@ -218,7 +221,8 @@ Q_SIGNALS:
private:
virtual QSensorReading *reading() const = 0;
virtual void readingUpdate() = 0;
- quint64 m_timestamp;
+ Q_OBJECT_BINDABLE_PROPERTY(QmlSensorReading, quint64,
+ m_timestamp, &QmlSensorReading::timestampChanged)
};
QT_END_NAMESPACE
diff --git a/src/sensorsquick/qmltapsensor.cpp b/src/sensorsquick/qmltapsensor.cpp
index faeba623..190bda45 100644
--- a/src/sensorsquick/qmltapsensor.cpp
+++ b/src/sensorsquick/qmltapsensor.cpp
@@ -147,6 +147,12 @@ QTapReading::TapDirection QmlTapSensorReading::tapDirection() const
return m_tapDirection;
}
+QBindable<QTapReading::TapDirection> QmlTapSensorReading::bindableTapDirection() const
+{
+ return &m_tapDirection;
+}
+
+
/*!
\qmlproperty bool TapReading::doubleTap
This property holds a value indicating if there was a single or double tap.
@@ -159,6 +165,11 @@ bool QmlTapSensorReading::isDoubleTap() const
return m_isDoubleTap;
}
+QBindable<bool> QmlTapSensorReading::bindableDoubleTap() const
+{
+ return &m_isDoubleTap;
+}
+
QSensorReading *QmlTapSensorReading::reading() const
{
return const_cast<QTapSensor*>(m_sensor)->reading();
@@ -166,14 +177,6 @@ QSensorReading *QmlTapSensorReading::reading() const
void QmlTapSensorReading::readingUpdate()
{
- QTapReading::TapDirection td = m_sensor->reading()->tapDirection();
- if (m_tapDirection != td) {
- m_tapDirection = td;
- Q_EMIT tapDirectionChanged();
- }
- bool dTap = m_sensor->reading()->isDoubleTap();
- if (m_isDoubleTap != dTap) {
- m_isDoubleTap = dTap;
- Q_EMIT isDoubleTapChanged();
- }
+ m_tapDirection = m_sensor->reading()->tapDirection();
+ m_isDoubleTap = m_sensor->reading()->isDoubleTap();
}
diff --git a/src/sensorsquick/qmltapsensor_p.h b/src/sensorsquick/qmltapsensor_p.h
index 7d8800c0..6d600544 100644
--- a/src/sensorsquick/qmltapsensor_p.h
+++ b/src/sensorsquick/qmltapsensor_p.h
@@ -71,11 +71,12 @@ public:
bool returnDoubleTapEvents() const;
void setReturnDoubleTapEvents(bool ret);
+ QSensor *sensor() const override;
+
Q_SIGNALS:
void returnDoubleTapEventsChanged(bool returnDoubleTapEvents);
private:
- QSensor *sensor() const override;
QTapSensor *m_sensor;
QmlSensorReading *createReading() const override;
};
@@ -83,8 +84,10 @@ private:
class Q_SENSORSQUICK_PRIVATE_EXPORT QmlTapSensorReading : public QmlSensorReading
{
Q_OBJECT
- Q_PROPERTY(QTapReading::TapDirection tapDirection READ tapDirection NOTIFY tapDirectionChanged)
- Q_PROPERTY(bool doubleTap READ isDoubleTap NOTIFY isDoubleTapChanged)
+ Q_PROPERTY(QTapReading::TapDirection tapDirection READ tapDirection
+ NOTIFY tapDirectionChanged BINDABLE bindableTapDirection)
+ Q_PROPERTY(bool doubleTap READ isDoubleTap
+ NOTIFY isDoubleTapChanged BINDABLE bindableDoubleTap)
QML_NAMED_ELEMENT(TapReading)
QML_UNCREATABLE("Cannot create TapReading")
QML_ADDED_IN_VERSION(5,0)
@@ -94,7 +97,9 @@ public:
~QmlTapSensorReading();
QTapReading::TapDirection tapDirection() const;
+ QBindable<QTapReading::TapDirection> bindableTapDirection() const;
bool isDoubleTap() const;
+ QBindable<bool> bindableDoubleTap() const;
Q_SIGNALS:
void tapDirectionChanged();
@@ -104,8 +109,10 @@ private:
QSensorReading *reading() const override;
void readingUpdate() override;
QTapSensor *m_sensor;
- QTapReading::TapDirection m_tapDirection;
- bool m_isDoubleTap;
+ Q_OBJECT_BINDABLE_PROPERTY(QmlTapSensorReading, QTapReading::TapDirection,
+ m_tapDirection, &QmlTapSensorReading::tapDirectionChanged)
+ Q_OBJECT_BINDABLE_PROPERTY(QmlTapSensorReading, bool,
+ m_isDoubleTap, &QmlTapSensorReading::isDoubleTapChanged)
};
QT_END_NAMESPACE
diff --git a/src/sensorsquick/qmltiltsensor.cpp b/src/sensorsquick/qmltiltsensor.cpp
index 81b4e696..64ea3a98 100644
--- a/src/sensorsquick/qmltiltsensor.cpp
+++ b/src/sensorsquick/qmltiltsensor.cpp
@@ -131,6 +131,11 @@ qreal QmlTiltSensorReading::yRotation() const
return m_yRotation;
}
+QBindable<qreal> QmlTiltSensorReading::bindableYRotation() const
+{
+ return &m_yRotation;
+}
+
/*!
\qmlproperty qreal TiltReading::xRotation
This property holds the amount of tilt on the X axis.
@@ -143,6 +148,11 @@ qreal QmlTiltSensorReading::xRotation() const
return m_xRotation;
}
+QBindable<qreal> QmlTiltSensorReading::bindableXRotation() const
+{
+ return &m_xRotation;
+}
+
QSensorReading *QmlTiltSensorReading::reading() const
{
return m_sensor->reading();
@@ -150,14 +160,6 @@ QSensorReading *QmlTiltSensorReading::reading() const
void QmlTiltSensorReading::readingUpdate()
{
- qreal tiltY = m_sensor->reading()->yRotation();
- if (m_yRotation != tiltY) {
- m_yRotation = tiltY;
- Q_EMIT yRotationChanged();
- }
- qreal tiltX = m_sensor->reading()->xRotation();
- if (m_xRotation != tiltX) {
- m_xRotation = tiltX;
- Q_EMIT xRotationChanged();
- }
+ m_yRotation = m_sensor->reading()->yRotation();
+ m_xRotation = m_sensor->reading()->xRotation();
}
diff --git a/src/sensorsquick/qmltiltsensor_p.h b/src/sensorsquick/qmltiltsensor_p.h
index f41757b3..f7fbe6d5 100644
--- a/src/sensorsquick/qmltiltsensor_p.h
+++ b/src/sensorsquick/qmltiltsensor_p.h
@@ -69,8 +69,9 @@ public:
~QmlTiltSensor();
Q_INVOKABLE void calibrate();
-private:
QSensor *sensor() const override;
+
+private:
QTiltSensor *m_sensor;
QmlSensorReading *createReading() const override;
};
@@ -78,8 +79,8 @@ private:
class Q_SENSORSQUICK_PRIVATE_EXPORT QmlTiltSensorReading : public QmlSensorReading
{
Q_OBJECT
- Q_PROPERTY(qreal yRotation READ yRotation NOTIFY yRotationChanged)
- Q_PROPERTY(qreal xRotation READ xRotation NOTIFY xRotationChanged)
+ Q_PROPERTY(qreal yRotation READ yRotation NOTIFY yRotationChanged BINDABLE bindableYRotation)
+ Q_PROPERTY(qreal xRotation READ xRotation NOTIFY xRotationChanged BINDABLE bindableXRotation)
QML_NAMED_ELEMENT(TiltReading)
QML_UNCREATABLE("Cannot create TiltReading")
QML_ADDED_IN_VERSION(5,0)
@@ -88,7 +89,9 @@ public:
~QmlTiltSensorReading();
qreal yRotation() const;
+ QBindable<qreal> bindableYRotation() const;
qreal xRotation() const;
+ QBindable<qreal> bindableXRotation() const;
Q_SIGNALS:
void yRotationChanged();
@@ -98,8 +101,10 @@ private:
QSensorReading *reading() const override;
void readingUpdate() override;
QTiltSensor *m_sensor;
- qreal m_yRotation;
- qreal m_xRotation;
+ Q_OBJECT_BINDABLE_PROPERTY(QmlTiltSensorReading, qreal,
+ m_yRotation, &QmlTiltSensorReading::yRotationChanged)
+ Q_OBJECT_BINDABLE_PROPERTY(QmlTiltSensorReading, qreal,
+ m_xRotation, &QmlTiltSensorReading::xRotationChanged)
};
QT_END_NAMESPACE
diff --git a/tests/auto/common/test_backends.cpp b/tests/auto/common/test_backends.cpp
index 15419b0e..a8ce7f3f 100644
--- a/tests/auto/common/test_backends.cpp
+++ b/tests/auto/common/test_backends.cpp
@@ -62,41 +62,43 @@ void set_test_backend_busy(QSensor* sensor, bool busy)
backend->sensorBusy(busy);
}
-void set_test_backend_reading(QSensor* sensor, const QJsonObject& values)
+void set_test_backend_reading(QSensor* sensor, const QVariantMap& values)
{
Q_ASSERT(sensor->isConnectedToBackend());
QSensorBackend* backend = sensorToBackend.value(sensor);
- backend->reading()->setTimestamp(values["timestamp"].toInt()); // timestamp is common to all
+ // timestamp is common to all readings
+ if (values.contains("timestamp"))
+ backend->reading()->setTimestamp(values["timestamp"].toInt());
if (sensor->type() == "QAccelerometer") {
QAccelerometerReading* reading = static_cast<QAccelerometerReading*>(backend->reading());
- reading->setX(values["x"].toDouble());
- reading->setY(values["y"].toDouble());
- reading->setZ(values["z"].toDouble());
+ if (values.contains("x")) reading->setX(values["x"].value<qreal>());
+ if (values.contains("y")) reading->setY(values["y"].value<qreal>());
+ if (values.contains("z")) reading->setZ(values["z"].value<qreal>());
backend->newReadingAvailable();
} else if (sensor->type() == "QPressureSensor") {
QPressureReading* reading = static_cast<QPressureReading*>(backend->reading());
- reading->setPressure(values["pressure"].toDouble());
- reading->setTemperature(values["temperature"].toDouble());
+ if (values.contains("pressure")) reading->setPressure(values["pressure"].value<qreal>());
+ if (values.contains("temperature")) reading->setTemperature(values["temperature"].value<qreal>());
backend->newReadingAvailable();
} else if (sensor->type() == "QGyroscope") {
QGyroscopeReading* reading = static_cast<QGyroscopeReading*>(backend->reading());
- reading->setX(values["x"].toDouble());
- reading->setY(values["y"].toDouble());
- reading->setZ(values["z"].toDouble());
+ if (values.contains("x")) reading->setX(values["x"].value<qreal>());
+ if (values.contains("y")) reading->setY(values["y"].value<qreal>());
+ if (values.contains("z")) reading->setZ(values["z"].value<qreal>());
backend->newReadingAvailable();
} else if (sensor->type() == "QTapSensor") {
QTapReading* reading = static_cast<QTapReading*>(backend->reading());
- reading->setDoubleTap(values["doubleTap"].toBool());
- reading->setTapDirection(QTapReading::TapDirection(values["tapDirection"].toInt()));
+ if (values.contains("doubleTap")) reading->setDoubleTap(values["doubleTap"].value<bool>());
+ if (values.contains("tapDirection")) reading->setTapDirection(QTapReading::TapDirection(values["tapDirection"].toInt()));
backend->newReadingAvailable();
} else if (sensor->type() == "QCompass") {
QCompassReading* reading = static_cast<QCompassReading*>(backend->reading());
- reading->setAzimuth(values["azimuth"].toDouble());
- reading->setCalibrationLevel(values["calibrationLevel"].toDouble());
+ if (values.contains("azimuth")) reading->setAzimuth(values["azimuth"].value<qreal>());
+ if (values.contains("calibrationLevel")) reading->setCalibrationLevel(values["calibrationLevel"].value<qreal>());
backend->newReadingAvailable();
} else if (sensor->type() == "QProximitySensor") {
QProximityReading* reading = static_cast<QProximityReading*>(backend->reading());
- reading->setClose(values["near"].toBool());
+ reading->setClose(values["near"].value<bool>());
backend->newReadingAvailable();
} else if (sensor->type() == "QOrientationSensor") {
QOrientationReading* reading = static_cast<QOrientationReading*>(backend->reading());
@@ -104,7 +106,7 @@ void set_test_backend_reading(QSensor* sensor, const QJsonObject& values)
backend->newReadingAvailable();
} else if (sensor->type() == "QDistanceSensor") {
QDistanceReading* reading = static_cast<QDistanceReading*>(backend->reading());
- reading->setDistance(values["distance"].toDouble());
+ reading->setDistance(values["distance"].value<qreal>());
backend->newReadingAvailable();
} else if (sensor->type() == "QAmbientLightSensor") {
QAmbientLightReading* reading = static_cast<QAmbientLightReading*>(backend->reading());
@@ -112,49 +114,49 @@ void set_test_backend_reading(QSensor* sensor, const QJsonObject& values)
backend->newReadingAvailable();
} else if (sensor->type() == "QMagnetometer") {
QMagnetometerReading* reading = static_cast<QMagnetometerReading*>(backend->reading());
- reading->setX(values["x"].toDouble());
- reading->setY(values["y"].toDouble());
- reading->setZ(values["z"].toDouble());
- reading->setCalibrationLevel(values["calibrationLevel"].toDouble());
+ if (values.contains("x")) reading->setX(values["x"].value<qreal>());
+ if (values.contains("y")) reading->setY(values["y"].value<qreal>());
+ if (values.contains("z")) reading->setZ(values["z"].value<qreal>());
+ if (values.contains("calibrationLevel")) reading->setCalibrationLevel(values["calibrationLevel"].value<qreal>());
backend->newReadingAvailable();
} else if (sensor->type() == "QLidSensor") {
QLidReading* reading = static_cast<QLidReading*>(backend->reading());
- reading->setBackLidClosed(values["backLidClosed"].toBool());
- reading->setFrontLidClosed(values["frontLidClosed"].toBool());
+ if (values.contains("backLidClosed")) reading->setBackLidClosed(values["backLidClosed"].value<bool>());
+ if (values.contains("frontLidClosed")) reading->setFrontLidClosed(values["frontLidClosed"].value<bool>());
backend->newReadingAvailable();
} else if (sensor->type() == "QTiltSensor") {
QTiltReading* reading = static_cast<QTiltReading*>(backend->reading());
- reading->setYRotation(values["yRotation"].toDouble());
- reading->setXRotation(values["xRotation"].toDouble());
+ if (values.contains("yRotation")) reading->setYRotation(values["yRotation"].value<qreal>());
+ if (values.contains("xRotation")) reading->setXRotation(values["xRotation"].value<qreal>());
backend->newReadingAvailable();
} else if (sensor->type() == "QRotationSensor") {
QRotationReading* reading = static_cast<QRotationReading*>(backend->reading());
- reading->setFromEuler(values["x"].toDouble(), values["y"].toDouble(), values["z"].toDouble());
+ reading->setFromEuler(values["x"].value<qreal>(), values["y"].value<qreal>(), values["z"].value<qreal>());
backend->newReadingAvailable();
} else if (sensor->type() == "QHumiditySensor") {
QHumidityReading* reading = static_cast<QHumidityReading*>(backend->reading());
- reading->setRelativeHumidity(values["relativeHumidity"].toDouble());
- reading->setAbsoluteHumidity(values["absoluteHumidity"].toDouble());
+ if (values.contains("relativeHumidity")) reading->setRelativeHumidity(values["relativeHumidity"].value<qreal>());
+ if (values.contains("absoluteHumidity")) reading->setAbsoluteHumidity(values["absoluteHumidity"].value<qreal>());
backend->newReadingAvailable();
} else if (sensor->type() == "QHolsterSensor") {
QHolsterReading* reading = static_cast<QHolsterReading*>(backend->reading());
- reading->setHolstered(values["holstered"].toBool());
+ reading->setHolstered(values["holstered"].value<bool>());
backend->newReadingAvailable();
} else if (sensor->type() == "QAmbientTemperatureSensor") {
QAmbientTemperatureReading* reading = static_cast<QAmbientTemperatureReading*>(backend->reading());
- reading->setTemperature(values["temperature"].toDouble());
+ reading->setTemperature(values["temperature"].value<qreal>());
backend->newReadingAvailable();
} else if (sensor->type() == "QLightSensor") {
QLightReading* reading = static_cast<QLightReading*>(backend->reading());
- reading->setLux(values["illuminance"].toDouble());
+ reading->setLux(values["illuminance"].value<qreal>());
backend->newReadingAvailable();
} else if (sensor->type() == "QAltimeter") {
QAltimeterReading* reading = static_cast<QAltimeterReading*>(backend->reading());
- reading->setAltitude(values["altitude"].toDouble());
+ reading->setAltitude(values["altitude"].value<qreal>());
backend->newReadingAvailable();
} else if (sensor->type() == "QIRProximitySensor") {
QIRProximityReading* reading = static_cast<QIRProximityReading*>(backend->reading());
- reading->setReflectance(values["reflectance"].toDouble());
+ reading->setReflectance(values["reflectance"].value<qreal>());
backend->newReadingAvailable();
} else {
qWarning() << "Unsupported test sensor backend:" << sensor->type();
diff --git a/tests/auto/common/test_backends.h b/tests/auto/common/test_backends.h
index 66699b5c..80d6913c 100644
--- a/tests/auto/common/test_backends.h
+++ b/tests/auto/common/test_backends.h
@@ -34,7 +34,7 @@
void register_test_backends();
void unregister_test_backends();
-void set_test_backend_reading(QSensor* sensor, const QJsonObject& values);
+void set_test_backend_reading(QSensor* sensor, const QVariantMap& values);
void set_test_backend_busy(QSensor* sensor, bool busy);
#include <qaccelerometer.h>
@@ -89,6 +89,7 @@ void set_test_backend_busy(QSensor* sensor, bool busy);
#endif
PREPARE_SENSORINTERFACE(QAccelerometer, QAccelerometerReading, QAccelerometerFilter, {
+ reading->setTimestamp(1);
reading->setX(1.0);
reading->setY(1.0);
reading->setZ(1.0);
diff --git a/tests/auto/qml/qml_cpp/CMakeLists.txt b/tests/auto/qml/qml_cpp/CMakeLists.txt
index 1ceb7662..45c3230d 100644
--- a/tests/auto/qml/qml_cpp/CMakeLists.txt
+++ b/tests/auto/qml/qml_cpp/CMakeLists.txt
@@ -1,12 +1,12 @@
-
qt_internal_add_test(tst_sensors_qmlcpp
SOURCES
+ ../../common/test_backends.cpp ../../common/test_backends.h
qtemplategestureplugin.cpp qtemplategestureplugin.h
qtemplaterecognizer.cpp qtemplaterecognizer.h
tst_sensors_qmlcpp.cpp
- PUBLIC_LIBRARIES
- Qt::Qml
LIBRARIES
+ Qt::Qml
Qt::SensorsPrivate
Qt::SensorsQuickPrivate
+ Qt::TestPrivate
)
diff --git a/tests/auto/qml/qml_cpp/tst_sensors_qmlcpp.cpp b/tests/auto/qml/qml_cpp/tst_sensors_qmlcpp.cpp
index acc4d924..4b81aad6 100644
--- a/tests/auto/qml/qml_cpp/tst_sensors_qmlcpp.cpp
+++ b/tests/auto/qml/qml_cpp/tst_sensors_qmlcpp.cpp
@@ -30,6 +30,7 @@
#include <QtTest/QSignalSpy>
#include <QtCore/QDebug>
+#include <QtTest/private/qpropertytesthelper_p.h>
#include <QtSensorsQuick/private/qmlsensor_p.h>
#include <QtSensorsQuick/private/qmlsensorgesture_p.h>
@@ -39,6 +40,27 @@
#include <qsensorbackend.h>
#include "qsensormanager.h"
+#include "../../common/test_backends.h"
+#include <QtSensorsQuick/private/qmlaccelerometer_p.h>
+#include <QtSensorsQuick/private/qmlpressuresensor_p.h>
+#include <QtSensorsQuick/private/qmlgyroscope_p.h>
+#include <QtSensorsQuick/private/qmltapsensor_p.h>
+#include <QtSensorsQuick/private/qmlcompass_p.h>
+#include <QtSensorsQuick/private/qmlproximitysensor_p.h>
+#include <QtSensorsQuick/private/qmlorientationsensor_p.h>
+#include <QtSensorsQuick/private/qmldistancesensor_p.h>
+#include <QtSensorsQuick/private/qmlambientlightsensor_p.h>
+#include <QtSensorsQuick/private/qmlmagnetometer_p.h>
+#include <QtSensorsQuick/private/qmllidsensor_p.h>
+#include <QtSensorsQuick/private/qmltiltsensor_p.h>
+#include <QtSensorsQuick/private/qmlrotationsensor_p.h>
+#include <QtSensorsQuick/private/qmlhumiditysensor_p.h>
+#include <QtSensorsQuick/private/qmlholstersensor_p.h>
+#include <QtSensorsQuick/private/qmlambienttemperaturesensor_p.h>
+#include <QtSensorsQuick/private/qmllightsensor_p.h>
+#include <QtSensorsQuick/private/qmlaltimeter_p.h>
+#include <QtSensorsQuick/private/qmlirproximitysensor_p.h>
+
QT_USE_NAMESPACE
QT_BEGIN_NAMESPACE
@@ -49,6 +71,7 @@ class tst_sensors_qmlcpp : public QObject
private slots:
void initTestCase();
+ void testReadingBindings();
void testGesture();
void testSensorRanges();
};
@@ -58,6 +81,132 @@ void tst_sensors_qmlcpp::initTestCase()
qputenv("QT_SENSORS_LOAD_PLUGINS", "0"); // Do not load plugins
}
+template<typename SensorClass, typename ReadingClass, typename ValueType>
+void testSensorReadings(const char* identifier, const QVariantMap& values)
+{
+ SensorClass sensor;
+ sensor.setIdentifier(identifier);
+ sensor.componentComplete();
+ sensor.start();
+
+ for (const auto& key : values.keys()) {
+ ValueType initialValue = values[key].toList()[0].value<ValueType>();
+ ValueType changedValue = values[key].toList()[1].value<ValueType>();
+ QTestPrivate::testReadOnlyPropertyBasics<ReadingClass, ValueType>(
+ *static_cast<ReadingClass*>(sensor.reading()),
+ initialValue, changedValue, key.toStdString().c_str(),
+ [&](){ set_test_backend_reading(sensor.sensor(), {{key, changedValue}}); });
+ if (QTest::currentTestFailed()) {
+ qWarning() << identifier << "::" << key << "test failed.";
+ return;
+ }
+ }
+}
+
+void tst_sensors_qmlcpp::testReadingBindings()
+{
+ register_test_backends();
+
+ testSensorReadings<QmlAccelerometer, QmlAccelerometerReading, qreal>(
+ "QAccelerometer",
+ {{"x", QVariantList{1.0, 2.0}},
+ {"y", QVariantList{1.0, 2.0}},
+ {"z", QVariantList{1.0, 2.0}}});
+ testSensorReadings<QmlAccelerometer, QmlAccelerometerReading, quint64>(
+ "QAccelerometer",
+ {{"timestamp", QVariantList{1.0, 2.0}}});
+ testSensorReadings<QmlAmbientLightSensor, QmlAmbientLightSensorReading, QAmbientLightReading::LightLevel>(
+ "QAmbientLightSensor",
+ {{"lightLevel", QVariantList{QAmbientLightReading::Twilight, QAmbientLightReading::Sunny}}});
+ testSensorReadings<QmlPressureSensor, QmlPressureReading, qreal>(
+ "QPressureSensor",
+ {{"pressure", QVariantList{1.0, 2.0}},
+ {"temperature", QVariantList{1.0, 2.0}}});
+ testSensorReadings<QmlGyroscope, QmlGyroscopeReading, qreal>(
+ "QGyroscope",
+ {{"x", QVariantList{1.0, 2.0}},
+ {"y", QVariantList{1.0, 2.0}},
+ {"z", QVariantList{1.0, 2.0}}});
+ testSensorReadings<QmlTapSensor, QmlTapSensorReading, bool>(
+ "QTapSensor",
+ {{"doubleTap", QVariantList{true, false}}});
+ testSensorReadings<QmlTapSensor, QmlTapSensorReading, QTapReading::TapDirection>(
+ "QTapSensor",
+ {{"tapDirection", QVariantList{QTapReading::Z_Both, QTapReading::X_Both}}});
+ testSensorReadings<QmlCompass, QmlCompassReading, qreal>(
+ "QCompass",
+ {{"azimuth", QVariantList{1.0, 2.0}},
+ {"calibrationLevel", QVariantList{1.0, 2.0}}});
+ testSensorReadings<QmlProximitySensor, QmlProximitySensorReading, bool>(
+ "QProximitySensor",
+ {{"near", QVariantList{true, false}}});
+ testSensorReadings<QmlOrientationSensor, QmlOrientationSensorReading, QOrientationReading::Orientation>(
+ "QOrientationSensor",
+ {{"orientation", QVariantList{QOrientationReading::LeftUp, QOrientationReading::RightUp}}});
+ testSensorReadings<QmlDistanceSensor, QmlDistanceReading, qreal>(
+ "QDistanceSensor",
+ {{"distance", QVariantList{1.0, 2.0}}});
+ testSensorReadings<QmlMagnetometer, QmlMagnetometerReading, qreal>(
+ "QMagnetometer",
+ {{"x", QVariantList{1.0, 2.0}},
+ {"y", QVariantList{1.0, 2.0}},
+ {"z", QVariantList{1.0, 2.0}},
+ {"calibrationLevel", QVariantList{1.0, 2.0}}});
+ testSensorReadings<QmlLidSensor, QmlLidReading, bool>(
+ "QLidSensor",
+ {{"backLidClosed", QVariantList{true, false}},
+ {"frontLidClosed", QVariantList{true, false}}});
+ testSensorReadings<QmlTiltSensor, QmlTiltSensorReading, qreal>(
+ "QTiltSensor",
+ {{"yRotation", QVariantList{1.0, 2.0}},
+ {"xRotation", QVariantList{1.0, 2.0}}});
+ // rotation sensor properties need to be tested separately because the setter function is
+ // not symmetric with getter functions ("setFromEuler()" vs. "x() & y() & z()")
+ testSensorReadings<QmlRotationSensor, QmlRotationSensorReading, qreal>(
+ "QRotationSensor",
+ {{"x", QVariantList{1.0, 2.0}}});
+ testSensorReadings<QmlRotationSensor, QmlRotationSensorReading, qreal>(
+ "QRotationSensor",
+ {{"y", QVariantList{1.0, 2.0}}});
+ testSensorReadings<QmlRotationSensor, QmlRotationSensorReading, qreal>(
+ "QRotationSensor",
+ {{"z", QVariantList{1.0, 2.0}}});
+ testSensorReadings<QmlHumiditySensor, QmlHumidityReading, qreal>(
+ "QHumiditySensor",
+ {{"relativeHumidity", QVariantList{1.0, 2.0}},
+ {"absoluteHumidity", QVariantList{1.0, 2.0}}});
+ testSensorReadings<QmlHolsterSensor, QmlHolsterReading, bool>(
+ "QHolsterSensor",
+ {{"holstered", QVariantList{true, false}}});
+ testSensorReadings<QmlAmbientTemperatureSensor, QmlAmbientTemperatureReading, qreal>(
+ "QAmbientTemperatureSensor",
+ {{"temperature", QVariantList{30.0, 40.0}}});
+ testSensorReadings<QmlLightSensor, QmlLightSensorReading, qreal>(
+ "QLightSensor",
+ {{"illuminance", QVariantList{1.0, 2.0}}});
+ testSensorReadings<QmlAltimeter, QmlAltimeterReading, qreal>(
+ "QAltimeter",
+ {{"altitude", QVariantList{8848, 9959}}});
+ testSensorReadings<QmlIRProximitySensor, QmlIRProximitySensorReading, qreal>(
+ "QIRProximitySensor",
+ {{"reflectance", QVariantList{0.5, 0.6}}});
+
+ // The following tests QmlSensor (the baseclass) 'readingChanged' which is
+ // emitted every time a sensor value changes. For that we instantiate a
+ // concrete sensor. The actual 'reading' value (a QObject pointer) of the
+ // 'readingChanged' property will not change, but rather the
+ // 'readingChanged' is used to indicate that the value it contains has changed.
+ QmlAccelerometer accelerometer;
+ accelerometer.setIdentifier("QAccelerometer");
+ accelerometer.componentComplete();
+ accelerometer.start();
+ QTestPrivate::testReadOnlyPropertyBasics<QmlSensor, QmlSensorReading*>(
+ accelerometer, accelerometer.reading(), accelerometer.reading(), "reading",
+ [&](){ set_test_backend_reading(accelerometer.sensor(), {{"x", 2.0}}); });
+
+ unregister_test_backends();
+}
+
void tst_sensors_qmlcpp::testGesture()
{
QTemplateGesturePlugin* plugin = new QTemplateGesturePlugin();
diff --git a/tests/auto/qml/qml_quick/tst_sensors_basic.qml b/tests/auto/qml/qml_quick/tst_sensors_basic.qml
index 37895ba0..f6553df4 100644
--- a/tests/auto/qml/qml_quick/tst_sensors_basic.qml
+++ b/tests/auto/qml/qml_quick/tst_sensors_basic.qml
@@ -208,7 +208,7 @@ TestCase {
function test_reading_data() {
return [
- {tag: "Accelerometer", initialReading: {timestamp: 0, x: 1.0, y: 1.0, z: 1.0}, newReading: {timestamp: 1, x: 2.0, y: 3.0, z: 4.0}},
+ {tag: "Accelerometer", initialReading: {timestamp: 1, x: 1.0, y: 1.0, z: 1.0}, newReading: {timestamp: 2, x: 2.0, y: 3.0, z: 4.0}},
{tag: "PressureSensor", initialReading: {pressure: 1.0, temperature: 1.0}, newReading: {pressure: 2.0, temperature: 3.0}},
{tag: "Gyroscope", initialReading: {x : 1.0, y: 1.0, z: 1.0}, newReading: {x : 2.0, y: 3.0, z: 4.0}},
{tag: "TapSensor", initialReading: {doubleTap: true, tapDirection: TapReading.Z_Both}, newReading: {doubleTap: false, tapDirection: TapReading.X_Both}},
diff --git a/tests/auto/qml/qml_quick/tst_sensors_qmlquick.cpp b/tests/auto/qml/qml_quick/tst_sensors_qmlquick.cpp
index 8162601d..9bab11f8 100644
--- a/tests/auto/qml/qml_quick/tst_sensors_qmlquick.cpp
+++ b/tests/auto/qml/qml_quick/tst_sensors_qmlquick.cpp
@@ -52,7 +52,7 @@ public slots:
unregister_test_backends();
}
- void setSensorReading(const QmlSensor* qmlSensor, const QJsonObject& values) {
+ void setSensorReading(const QmlSensor* qmlSensor, const QVariantMap& values) {
set_test_backend_reading(qmlSensor->sensor(), values);
}