
Разработка приложений на C++_Практическая работа №15
.pdf
Модуль 4 Тема 4.6 Практика

1. Доработать компонент SensorsListPage для вывода списка доступных типов датчиков по типам.
.cpp
#include <QtSensors>
.spec
Requires:
-qt5-qtdeclarative-import-sensors
-qt5-qtsensors
import QtQuick 2.0 import Sailfish.Silica 1.0 import Sensors 1.0
import QtSensors 5.0 as Sensors
Page {
SilicaListView {
header: PageHeader { title: "Available sensor types" } anchors.fill: parent
delegate: ListItem { Label {
text: modelData
anchors.verticalCenter: parent.verticalCenter x: Theme.horizontalPageMargin
}
}
// Заполняем модель списком доступных типов сенсоров model: Sensors.QmlSensors.sensorTypes()

}
}
2. Доработать компонент QProximitySensorPage, разместив в центре страницы переключатель, который становится активным только при поднесении объектов к датчику приближения. Для масштабирования размеров переключателя использовать: scale: 10
import QtQuick 2.6 import Sailfish.Silica 1.0 import QtSensors 5.2
Page {
property alias sensorIdentifier: proximitySensor.identifier
ProximitySensor { id: proximitySensor active: true
}
PageHeader { title: qsTr("Proximity Sensor") }
Switch {
anchors.centerIn: parent enabled: proximitySensor.active
checked: proximitySensor.active && proximitySensor.reading.near automaticCheck: false
scale: 10
}
}

И с помощью управлением эмуляцией смотрим, как реагирует датчик
приближения.
3. Доработать компонент QAmbientLightSensorPage, разместив в центре страницы элемент типа Column, содержащий ячейки с названиями, отображающие текущий уровень освещённости.
import QtQuick 2.6 import Sailfish.Silica 1.0 import QtSensors 5.2
Page {
property alias sensorIdentifier: ambientLightSensor.identifier
AmbientLightSensor { id: ambientLightSensor active: true
}
PageHeader { title: qsTr("Ambient Light Sensor") }
Column {
width: parent.width - 2 * Theme.horizontalPageMargin anchors.centerIn: parent
spacing: Theme.paddingMedium
Repeater {
model: [
{name: qsTr("Sunny"), lightLevel: AmbientLightReading.Sunny },
{name: qsTr("Bright"), lightLevel: AmbientLightReading.Bright },
{name: qsTr("Light"), lightLevel: AmbientLightReading.Light },

{ name: qsTr("Twilight"), lightLevel: AmbientLightReading.Twilight
},
{ name: qsTr("Dark"), lightLevel: AmbientLightReading.Dark }
]
delegate: Rectangle {
color: modelData.lightLevel <= ambientLightSensor.reading.lightLevel
?
Theme.rgba(Theme.highlightBackgroundColor,
Theme.highlightBackgroundOpacity) :
"transparent" width: parent.width
height: Theme.itemSizeMedium
Label {
anchors.centerIn: parent text: modelData.name color: Theme.highlightColor
}
}
}
}
}
И с помощью управлением эмуляцией смотрим, как реагирует датчик освещенности.

4. Доработать компонент QLightSensorPage, разместив в центре страницы значение освещённости в люксах. Если данные датчика не доступны, выводить: qsTr("Unknown")
import QtQuick 2.6 import Sailfish.Silica 1.0 import QtSensors 5.2
Page {
property alias sensorIdentifier: lightSensor.identifier
LightSensor { id: lightSensor active: true
}
PageHeader { title: qsTr("Light Sensor") }
Label {
anchors.centerIn: parent text: lightSensor.reading ?
qsTr("%1 lux").arg(lightSensor.reading.illuminance) : qsTr("Unknown")
font.pixelSize: Theme.fontSizeExtraLarge color: Theme.highlightColor
}
}
И с помощью вкладки “Управление эмуляцией” смотрим, как реагирует датчик освещенности.

Модуль 4 Тема 4.7 Практика
Создать приложение с выводом координат с помощью gpsтрека

В .cpp файл добавить:
#include <QGeoRoute>
#include <QGeoCoordinate>
В файле .pro должно быть добавлено ключевое слово location и positioning:
QT += location \ positioning
В .spek-файл в секцию Requires нужно добавить зависимости:
Requires: qt5-qtdeclarative-import-positioning
Requires: qt5-qtdeclarative-import-location
Requires: qt5-plugin-geoservices-webtiles
В .desktop файле нужно проверить разрешения:
Permissions=Location
Для эмуляции местоположения нужно использовать файл GPS-трека с расширением .nmea.
Национальная Ассоциация Морской Электроники (National Marine Electronics Association - NMEA)
import QtQuick 2.0
import Sailfish.Silica 1.0
import QtPositioning 5.0
import QtLocation 5.0

Page {
property double latitude: 0 property double longitude: 0
PositionSource {
id: positionSource active: true
nmeaSource: "path.nmea" onPositionChanged: {
latitude = position.coordinate.latitude longitude = position.coordinate.longitude
}
}
Column {
id: column
anchors.fill: parent
spacing: Theme.paddingLarge
Text {
text: "Latitude: " + latitude.toFixed(6)
}
Text {
text: "Longitude: " + longitude.toFixed(6)
}
}
}

Вданном коде создается интерфейс приложения, отображающий текущие координаты широты и долготы.
Вданном коде задаются свойства "latitude" и "longitude" для хранения текущих координат.
Далее, добавляется компонент PositionSource, который отвечает за получение данных о текущем местоположении устройства. В
данном случае, используется источник данных NMEA из файла
"path.nmea". Когда изменяются координаты, обработчик события
"onPositionChanged" обновляет значения свойств "latitude" и
"longitude".
Таким образом, при запуске приложения пользователю будет показана текущая широта и долгота устройства, которые будут обновляться при изменении местоположения.