Добавил:
Только когда поступишь в технический вуз поймешь на сколько ты гуманитарий Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Разработка приложений на C++_Практическая работа №15

.pdf
Скачиваний:
0
Добавлен:
07.06.2025
Размер:
654.84 Кб
Скачать

Модуль 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".

Таким образом, при запуске приложения пользователю будет показана текущая широта и долгота устройства, которые будут обновляться при изменении местоположения.