diff options
198 files changed, 1301 insertions, 3758 deletions
diff --git a/.cmake.conf b/.cmake.conf index 05b80d3a..dc1d7a92 100644 --- a/.cmake.conf +++ b/.cmake.conf @@ -1,4 +1,5 @@ -set(QT_REPO_MODULE_VERSION "6.5.0") +set(QT_REPO_MODULE_VERSION "6.8.0") set(QT_REPO_MODULE_PRERELEASE_VERSION_SEGMENT "alpha1") -# Use cpp-based syncqt -set(QT_USE_SYNCQT_CPP TRUE) +set(QT_EXTRA_INTERNAL_TARGET_DEFINES "QT_NO_AS_CONST=1") +list(APPEND QT_EXTRA_INTERNAL_TARGET_DEFINES "QT_NO_FOREACH=1") +list(APPEND QT_EXTRA_INTERNAL_TARGET_DEFINES "QT_NO_CONTEXTLESS_CONNECT=1") diff --git a/CMakeLists.txt b/CMakeLists.txt index 68a18637..c447bd34 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,5 +17,6 @@ find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Co find_package(Qt6 ${PROJECT_VERSION} CONFIG OPTIONAL_COMPONENTS Xml Gui Widgets Quick Qml Svg DBus QuickTest ) +qt_internal_project_setup() qt_build_repo() diff --git a/coin/axivion/ci_config_linux.json b/coin/axivion/ci_config_linux.json new file mode 100644 index 00000000..f806cff6 --- /dev/null +++ b/coin/axivion/ci_config_linux.json @@ -0,0 +1,44 @@ +{ + "Project": { + "BuildSystemIntegration": { + "child_order": [ + "GCCSetup", + "CMake", + "LinkLibraries" + ] + }, + "CMake": { + "_active": true, + "_copy_from": "CMakeIntegration", + "build_environment": {}, + "build_options": "-j4", + "generate_options": "--fresh", + "generator": "Ninja" + }, + "GCCSetup": { + "_active": true, + "_copy_from": "Command", + "build_command": "gccsetup --cc gcc --cxx g++ --config ../../../axivion/" + }, + "LinkLibraries": { + "_active": true, + "_copy_from": "AxivionLinker", + "input_files": [ + "build/lib/lib*.so*.ir", + "build/qml/*/lib*.so*.ir" + ], + "ir": "build/$(env:TESTED_MODULE_COIN).ir", + "plugin_files": [ + "build/plugins/*/lib*.so*.ir" + ] + } + }, + "_Format": "1.0", + "_Version": "7.6.2", + "_VersionNum": [ + 7, + 6, + 2, + 12725 + ] +} diff --git a/conanfile.py b/conanfile.py deleted file mode 100644 index 863f926a..00000000 --- a/conanfile.py +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright (C) 2021 The Qt Company Ltd. -# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -from conans import ConanFile -import re -from pathlib import Path - - -def _parse_qt_version_by_key(key: str) -> str: - with open(Path(__file__).parent.resolve() / ".cmake.conf") as f: - m = re.search(fr'{key} .*"(.*)"', f.read()) - return m.group(1) if m else "" - - -def _get_qt_minor_version() -> str: - return ".".join(_parse_qt_version_by_key("QT_REPO_MODULE_VERSION").split(".")[:2]) - - -class QtSensors(ConanFile): - name = "qtsensors" - license = "LGPL-3.0, GPL-2.0+, Commercial Qt License Agreement" - author = "The Qt Company <https://www.qt.io/contact-us>" - url = "https://code.qt.io/cgit/qt/qtsensors.git" - description = ( - "The Qt Sensors API provides access to sensor hardware via QML and C++ interfaces. " - ) - topics = "qt", "qt6", "sensor" - settings = "os", "compiler", "arch", "build_type" - # for referencing the version number and prerelease tag and dependencies info - exports = ".cmake.conf", "dependencies.yaml" - exports_sources = "*", "!conan*.*" - python_requires = f"qt-conan-common/{_get_qt_minor_version()}@qt/everywhere" - python_requires_extend = "qt-conan-common.QtLeafModule" diff --git a/config.tests/winrt/main.cpp b/config.tests/winrt/main.cpp index bef9c9d5..556efa61 100644 --- a/config.tests/winrt/main.cpp +++ b/config.tests/winrt/main.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: BSD-3-Clause #include <functional> #include <windows.system.h> diff --git a/dependencies.yaml b/dependencies.yaml index d6a4fbb3..dc08c4af 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -1,7 +1,7 @@ dependencies: ../qtbase: - ref: 6a027a8677888bcc881929f47185603778e4c50e + ref: 0cd5eb895cc96126a495eb3d2d258be47eed193a required: true ../qtdeclarative: - ref: 9d83f81e00264c7054332c2a024b0e6afb710a4c + ref: c63bb2bad5b4e741ed8a1e16d8f1f916c9baf61d required: false diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 0e602a2d..1c5447e6 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,5 +1,5 @@ # Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: BSD-3-Clause +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause qt_examples_build_begin(EXTERNAL_BUILD) diff --git a/examples/sensors/CMakeLists.txt b/examples/sensors/CMakeLists.txt index f1b382a6..bf1120c8 100644 --- a/examples/sensors/CMakeLists.txt +++ b/examples/sensors/CMakeLists.txt @@ -1,13 +1,6 @@ # Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: BSD-3-Clause +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause -if(TARGET Qt::Quick) - qt_internal_add_example(grue) - qt_internal_add_example(maze) - qt_internal_add_example(qmlqtsensors) - qt_internal_add_example(sensor_explorer) - if(TARGET Qt::Svg) - qt_internal_add_example(accelbubble) - qt_internal_add_example(sensorsshowcase) - endif() +if(TARGET Qt::Quick AND TARGET Qt::Svg) + qt_internal_add_example(sensorsshowcase) endif() diff --git a/examples/sensors/accelbubble/CMakeLists.txt b/examples/sensors/accelbubble/CMakeLists.txt deleted file mode 100644 index b5d6507a..00000000 --- a/examples/sensors/accelbubble/CMakeLists.txt +++ /dev/null @@ -1,64 +0,0 @@ -# Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: BSD-3-Clause - -cmake_minimum_required(VERSION 3.16) -project(accelbubble LANGUAGES CXX) - -set(CMAKE_AUTOMOC ON) - -if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") -endif() - -set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/sensors/accelbubble") - -find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick Sensors Svg Xml) - -qt_add_executable(accelbubble - main.cpp -) - -set_target_properties(accelbubble PROPERTIES - WIN32_EXECUTABLE TRUE - MACOSX_BUNDLE TRUE -) - -if(ANDROID) - set_property(TARGET accelbubble PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR - ${CMAKE_CURRENT_SOURCE_DIR}/android) - endif() -if(APPLE) - if(IOS) - set_property(TARGET accelbubble PROPERTY - MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist" - ) - endif() -endif() - -target_link_libraries(accelbubble PUBLIC - Qt::Core - Qt::Gui - Qt::Quick - Qt::Sensors - Qt::Svg - Qt::Xml -) - -# Resources: -set(accelbubble_resource_files - "accelbubble.qml" - "content/Bluebubble.svg" -) - -qt6_add_resources(accelbubble "accelbubble" - PREFIX - "/" - FILES - ${accelbubble_resource_files} -) - -install(TARGETS accelbubble - RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" - BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" - LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" -) diff --git a/examples/sensors/accelbubble/Info.plist b/examples/sensors/accelbubble/Info.plist deleted file mode 100644 index 90725455..00000000 --- a/examples/sensors/accelbubble/Info.plist +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDisplayName</key> - <string>accelbubble</string> - <key>CFBundleExecutable</key> - <string>accelbubble</string> - <key>CFBundleGetInfoString</key> - <string>Created by Qt/QMake</string> - <key>CFBundleIdentifier</key> - <string>com.digia.accelbubble</string> - <key>CFBundleName</key> - <string>accelbubble</string> - <key>CFBundlePackageType</key> - <string>APPL</string> - <key>CFBundleShortVersionString</key> - <string>1.0</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>1.0</string> - <key>LSRequiresIPhoneOS</key> - <true/> - <key>NOTE</key> - <string>This file was generated by Qt/QMake.</string> - <key>UILaunchStoryboardName</key> - <string>LaunchScreen</string> - <key>UISupportedInterfaceOrientations</key> - <array> - <string>UIInterfaceOrientationPortrait</string> - </array> -</dict> -</plist> diff --git a/examples/sensors/accelbubble/accelbubble.pro b/examples/sensors/accelbubble/accelbubble.pro deleted file mode 100644 index d3b20a9d..00000000 --- a/examples/sensors/accelbubble/accelbubble.pro +++ /dev/null @@ -1,28 +0,0 @@ -TEMPLATE = app -TARGET = accelbubble -QT += quick sensors svg xml -SOURCES = main.cpp - -RESOURCES += \ - accelbubble.qrc - -OTHER_FILES = \ - $$files(*.qml) \ - content \ - images \ - android/AndroidManifest.xml - -target.path = $$[QT_INSTALL_EXAMPLES]/sensors/accelbubble -INSTALLS += target - -ios { -QMAKE_INFO_PLIST = Info.plist - -# manual plugin loading needed with older Qt -# QTPLUGIN += qsvg qtsensors_ios qtsensors_generic -} - -ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android - -EXAMPLE_FILES += \ - Info.plist diff --git a/examples/sensors/accelbubble/accelbubble.qml b/examples/sensors/accelbubble/accelbubble.qml deleted file mode 100644 index 65901169..00000000 --- a/examples/sensors/accelbubble/accelbubble.qml +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - - -import QtQuick -import QtQuick.Controls - -//! [0] -import QtSensors -//! [0] - - -ApplicationWindow { - title: "Accelerate Bubble" - id: mainWindow - width: 320 - height: 480 - visible: true - readonly property double radians_to_degrees: 180 / Math.PI - -//! [1] - Accelerometer { - id: accel - dataRate: 100 -//! [1] -//! [2] - active:true -//! [2] - -//! [3] - onReadingChanged: { - var newX = (bubble.x + calcRoll(accel.reading.x, accel.reading.y, accel.reading.z) * .1) - var newY = (bubble.y - calcPitch(accel.reading.x, accel.reading.y, accel.reading.z) * .1) - - if (isNaN(newX) || isNaN(newY)) - return; - - if (newX < 0) - newX = 0 - - if (newX > mainWindow.width - bubble.width) - newX = mainWindow.width - bubble.width - - if (newY < 18) - newY = 18 - - if (newY > mainWindow.height - bubble.height) - newY = mainWindow.height - bubble.height - - bubble.x = newX - bubble.y = newY - } -//! [3] - } - - function calcPitch(x,y,z) { - return -Math.atan2(y, Math.hypot(x, z)) * mainWindow.radians_to_degrees; - } - function calcRoll(x,y,z) { - return -Math.atan2(x, Math.hypot(y, z)) * mainWindow.radians_to_degrees; - } - - Image { - id: bubble - source: "content/Bluebubble.svg" - smooth: true - property real centerX: mainWindow.width / 2 - property real centerY: mainWindow.height / 2 - property real bubbleCenter: bubble.width / 2 - x: centerX - bubbleCenter - y: centerY - bubbleCenter - - Behavior on y { - SmoothedAnimation { - easing.type: Easing.Linear - duration: 100 - } - } - Behavior on x { - SmoothedAnimation { - easing.type: Easing.Linear - duration: 100 - } - } - } -} diff --git a/examples/sensors/accelbubble/accelbubble.qrc b/examples/sensors/accelbubble/accelbubble.qrc deleted file mode 100644 index 5cb6945a..00000000 --- a/examples/sensors/accelbubble/accelbubble.qrc +++ /dev/null @@ -1,6 +0,0 @@ -<RCC> - <qresource prefix="/"> - <file>accelbubble.qml</file> - <file>content/Bluebubble.svg</file> - </qresource> -</RCC> diff --git a/examples/sensors/accelbubble/android/AndroidManifest.xml b/examples/sensors/accelbubble/android/AndroidManifest.xml deleted file mode 100644 index 537c705e..00000000 --- a/examples/sensors/accelbubble/android/AndroidManifest.xml +++ /dev/null @@ -1,47 +0,0 @@ -<?xml version="1.0"?> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="org.qtproject.example.accelbubble" - android:installLocation="auto" - android:versionCode="1" - android:versionName="1.0"> - <!-- The comment below will be replaced with dependencies permissions upon deployment. - Remove the comment if you do not require these default permissions. --> - <!-- %%INSERT_PERMISSIONS --> - - <!-- The comment below will be replaced with dependencies permissions upon deployment. - Remove the comment if you do not require these default features. --> - <!-- %%INSERT_FEATURES --> - - <supports-screens - android:anyDensity="true" - android:largeScreens="true" - android:normalScreens="true" - android:smallScreens="true" /> - <application - android:name="org.qtproject.qt.android.bindings.QtApplication" - android:extractNativeLibs="true" - android:hardwareAccelerated="true" - android:label="-- %%INSERT_APP_NAME%% --" - android:requestLegacyExternalStorage="true"> - <activity - android:name="org.qtproject.qt.android.bindings.QtActivity" - android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density" - android:label="-- %%INSERT_APP_NAME%% --" - android:launchMode="singleTop" - android:screenOrientation="portrait"> - <intent-filter> - <action android:name="android.intent.action.MAIN"/> - <category android:name="android.intent.category.LAUNCHER"/> - </intent-filter> - <meta-data - android:name="android.app.lib_name" - android:value="-- %%INSERT_APP_LIB_NAME%% --" /> - <meta-data - android:name="android.app.background_running" - android:value="false" /> - <meta-data - android:name="android.app.extract_android_style" - android:value="minimal" /> - </activity> - </application> -</manifest> diff --git a/examples/sensors/accelbubble/content/Bluebubble.svg b/examples/sensors/accelbubble/content/Bluebubble.svg deleted file mode 100644 index d9c406c4..00000000 --- a/examples/sensors/accelbubble/content/Bluebubble.svg +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0"?> -<svg xmlns="http://www.w3.org/2000/svg" version="1.2" baseProfile="tiny"> - <defs> - <radialGradient id="grad1" cx="0.5" cy="0.7" r="0.7" fx="0.5" fy="0.4"> - <stop offset="0" style="stop-color:rgb(255,255,255)" /> - <stop offset="1.5" style="stop-color:rgb(0,102,153)" /> - </radialGradient> - </defs> - <circle cx="100" cy="80" r="42" fill="url(#grad1)"/> -</svg> diff --git a/examples/sensors/accelbubble/doc/images/accelbubble.png b/examples/sensors/accelbubble/doc/images/accelbubble.png Binary files differdeleted file mode 100644 index ad4cfc07..00000000 --- a/examples/sensors/accelbubble/doc/images/accelbubble.png +++ /dev/null diff --git a/examples/sensors/accelbubble/doc/src/accelbubble.qdoc b/examples/sensors/accelbubble/doc/src/accelbubble.qdoc deleted file mode 100644 index 527d82fb..00000000 --- a/examples/sensors/accelbubble/doc/src/accelbubble.qdoc +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only - -/*! - \example accelbubble - \title Qt Sensors - Accel Bubble - \brief The AccelBubble example demonstrates the Accelerometer QML type. - \ingroup qtsensors-examples - - \image accelbubble.png - -\section1 Overview - Writing a QML application that uses the Accelerometer QML sensors type requires the following steps: - - Import the Sensors Declarative module. - -\snippet accelbubble/accelbubble.qml 0 - - Add an Accelerometer QML type. - -\snippet accelbubble/accelbubble.qml 1 - - Use the 'active' property to start the sensor - -\snippet accelbubble/accelbubble.qml 2 - - Move the bubble according to a factor of the accelerator sensor - -\snippet accelbubble/accelbubble.qml 3 - -*/ - diff --git a/examples/sensors/accelbubble/main.cpp b/examples/sensors/accelbubble/main.cpp deleted file mode 100644 index ad71fc00..00000000 --- a/examples/sensors/accelbubble/main.cpp +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - - -#include <QtGui/QGuiApplication> -#include <QtQml/QQmlApplicationEngine> - -int main(int argc, char *argv[]) -{ - QGuiApplication app(argc,argv); - QQmlApplicationEngine engine(QUrl("qrc:///accelbubble.qml")); - - return app.exec(); -} diff --git a/examples/sensors/grue/CMakeLists.txt b/examples/sensors/grue/CMakeLists.txt deleted file mode 100644 index acc5da45..00000000 --- a/examples/sensors/grue/CMakeLists.txt +++ /dev/null @@ -1,68 +0,0 @@ -# Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: BSD-3-Clause - -cmake_minimum_required(VERSION 3.16) -project(grue_app LANGUAGES CXX) - -set(CMAKE_AUTOMOC ON) - -if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") -endif() - -set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/sensors/grue") - -find_package(Qt6 REQUIRED COMPONENTS Quick Sensors) - -qt_add_executable(grue_app - main.cpp qmlgruesensor.h qmlgruesensor.cpp -) - -set_target_properties(grue_app PROPERTIES - WIN32_EXECUTABLE TRUE - MACOSX_BUNDLE TRUE -) - -target_link_libraries(grue_app PUBLIC - Qt::Quick - Qt::Sensors -) - -qt6_add_qml_module(grue_app - VERSION 1.0 - URI "QMLGrueSensor" - QML_FILES - grue.qml - RESOURCES - grue.png -) - -add_subdirectory(plugin) - -# Need to link to the plugin manually in a static Qt build. -if(NOT QT6_IS_SHARED_LIBS_BUILD) - target_link_libraries(grue_app PRIVATE qtsensors_grue) - target_sources(grue_app PRIVATE grue_plugin_import_custom.cpp) -endif() - -set(build_console_app TRUE) - -# The console app is not a macos bundle, so the shared library plugin wouldn't be found -if(APPLE AND QT6_IS_SHARED_LIBS_BUILD) - set(build_console_app FALSE) -endif() - -# Gui-less apps don't make sense for these platforms -if(IOS OR EMSCRIPTEN OR ANDROID) - set(build_console_app FALSE) -endif() - -if(build_console_app) - add_subdirectory(console_app) -endif() - -install(TARGETS grue_app - RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" - BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" - LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" -) diff --git a/examples/sensors/grue/console_app/CMakeLists.txt b/examples/sensors/grue/console_app/CMakeLists.txt deleted file mode 100644 index 410de341..00000000 --- a/examples/sensors/grue/console_app/CMakeLists.txt +++ /dev/null @@ -1,47 +0,0 @@ -# Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: BSD-3-Clause - -cmake_minimum_required(VERSION 3.16) -project(detect_grue LANGUAGES CXX) - -set(CMAKE_AUTOMOC ON) - -if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") -endif() - -set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/sensors/grue") - -find_package(Qt6 REQUIRED COMPONENTS Core Sensors) - -qt_add_executable(detect_grue - main.cpp -) - -set_target_properties(detect_grue PROPERTIES - WIN32_EXECUTABLE FALSE - MACOSX_BUNDLE FALSE -) - -if(WIN32 OR (UNIX AND NOT APPLE)) - set_target_properties(detect_grue PROPERTIES - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/.. - ) -endif() - -target_link_libraries(detect_grue PUBLIC - Qt::Core - Qt::Sensors -) - -# Need to link to the plugin manually in a static Qt build. -if(NOT QT6_IS_SHARED_LIBS_BUILD) - target_link_libraries(detect_grue PRIVATE qtsensors_grue) - target_sources(detect_grue PRIVATE ../grue_plugin_import_custom.cpp) -endif() - -install(TARGETS detect_grue - RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" - BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" - LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" -) diff --git a/examples/sensors/grue/console_app/console_app.pro b/examples/sensors/grue/console_app/console_app.pro deleted file mode 100644 index 97021f1d..00000000 --- a/examples/sensors/grue/console_app/console_app.pro +++ /dev/null @@ -1,17 +0,0 @@ -TEMPLATE = app -TARGET = detect_grue -CONFIG += console -CONFIG -= app_bundle -QT = core sensors - -DESTDIR = $$OUT_PWD/.. - -SOURCES = main.cpp - -grue_plugin_base_dir = .. -include(../use_grue_static_plugin.pri) - -target.path = $$[QT_INSTALL_EXAMPLES]/sensors/grue -INSTALLS += target - -CONFIG += install_ok # Do not cargo-cult this! diff --git a/examples/sensors/grue/console_app/main.cpp b/examples/sensors/grue/console_app/main.cpp deleted file mode 100644 index 7de66334..00000000 --- a/examples/sensors/grue/console_app/main.cpp +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#include <QtCore> -#include <qsensor.h> - -class Filter : public QSensorFilter -{ - int lastPercent; -public: - Filter() - : QSensorFilter() - , lastPercent(0) - { - } - - bool filter(QSensorReading *reading) override - { - int percent = reading->property("chanceOfBeingEaten").value<int>(); - if (percent == 0) { - qDebug() << "It is light. You are safe from Grues."; - } else if (lastPercent == 0) { - qDebug() << "It is dark. You are likely to be eaten by a Grue."; - } - if (percent == 100) { - qDebug() << "You have been eaten by a Grue!"; - QCoreApplication::instance()->quit(); - } else if (percent) - qDebug() << "Your chance of being eaten by a Grue:" << percent << "percent."; - lastPercent = percent; - return false; - } -}; - -int main(int argc, char **argv) -{ - QCoreApplication app(argc, argv); - - QSensor sensor("GrueSensor"); - - Filter filter; - sensor.addFilter(&filter); - sensor.start(); - - if (!sensor.isActive()) { - qWarning("The Grue sensor didn't start. You're on your own!"); - return 1; - } - - return app.exec(); -} - diff --git a/examples/sensors/grue/doc/images/qtsensors-examples-grue.png b/examples/sensors/grue/doc/images/qtsensors-examples-grue.png Binary files differdeleted file mode 100644 index f4348271..00000000 --- a/examples/sensors/grue/doc/images/qtsensors-examples-grue.png +++ /dev/null diff --git a/examples/sensors/grue/doc/src/grue.qdoc b/examples/sensors/grue/doc/src/grue.qdoc deleted file mode 100644 index f187865a..00000000 --- a/examples/sensors/grue/doc/src/grue.qdoc +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only - -/*! - \example grue - \title Qt Sensors - Grue Sensor Example - \brief The Qt Sensors - Grue sensor example demonstrates all the steps from - creating a new sensor to using it. - \ingroup qtsensors-examples - - \image qtsensors-examples-grue.png - - The sensor definition and implementation are in a new sensor plugin that client - apps can use for detecting Grues (imaginary monsters that live in the dark). - - \list - \li \l{Grue Sensor Plugin} - \endlist - - The sensor plugin can be used by C++ applications as shown in the console - application example. - - \list - \li \l{Grue Sensor Console Application} - \endlist - - QML applications can use the new sensor by importing the QMLGrueSensor class. - - \list - \li \l{Grue Sensor QML Application} - \endlist - - \section1 Grue Sensor Plugin - - The Grue sensor is defined in a new sensor plugin that applications can use. - - The plugin provides the sensor reading property that describes your chance of - being eaten. This chance is increasing in the dark until it is 100% when - you are eaten by the Grue and at that point the plugin stops further processing. - In case of the plugin receiving light again before that happens the chance of - being eaten resets to 0%. - - This example was created using the make_sensor.pl script which can be found in - src/sensors. As such, it contains some generated code that defines the convenience - classes GrueFilter and GrueSensor. - - \section1 Grue Sensor Implementation - - The Grue sensor implementation lives in the plugin that is loaded by the Qt - Sensors library. The source code is available in the \c{grue/plugin} subdirectory. - - The Grue sensor needs a backend before it can be used. The backend provided - is rather basic and it relies on some kind of light sensor to work but it - gets the job done. If new hardware that can detect the actual presence of Grues - becomes available a backend could be created that supports this hardware and - applications using the Grue sensor would be able to use it without any changes. - - There are a few mandatory parts to a backend. They are the start and stop methods - and the setReading call. The start and stop methods are used to start and stop - any underlying hardware. In the case of this backend they start and stop a - light sensor. In the start method, the backend should call the \c{sensorStopped()} - or \c{sensorBusy()} methods if it cannot start. - - \snippet grue/plugin/gruesensorimpl.cpp start - - The setReading method is needed so that the sensors library knows where the - readings are coming from. This backend has a local copy of the reading so - it passes a pointer to the function. - - \snippet grue/plugin/gruesensorimpl.cpp setReading - - However it is also possible to pass null to the setReading method in which - case the sensors library will create an instance and return a pointer. - - \code - // Create a reading instance for us to use - m_reading = setReading<GrueSensorReading>(0); - \endcode - - The Grue sensor backend also supplies some metadata. - - The backend checks 2 things, how dark it is and how long you have been in the dark. - It uses the \c{readingChanged()} signal to know when to check the light sensor's - value. Once it is dark, it uses a timer to increase your chance of being eaten. - - The Grue sensor backend is delivered as a plugin. The plugin has a factory object - that registers the types available and does the actual instantiation of the backend. - - \section1 Grue Sensor Console Application - - The Grue sensor console application demonstrates use of the Grue sensor. - The source code is available in the \c{grue/console_app} subdirectory. - - This is a simple commandline application. It demonstrates how to use the generic - access feature of Qt Sensors to avoid a link-time dependency on a library. - - \section1 Grue Sensor C++ Class Registration for QML - - The QMLGrueSensor class is registered for QML, so the class name can be used - as an import and the class properties can be accessed from QML. - - \section1 Grue Sensor QML Application - - The Grue sensor QML application demonstrates the use of QMLGrueSensor QML type. - - The application consists of a single QML file and an image. It is built as an - executable with C++ code that runs the QML, but it can also be launched directly - using the \c qmlscene tool. - - \code - qmlscene -I . grue.qml - \endcode -*/ diff --git a/examples/sensors/grue/grue.png b/examples/sensors/grue/grue.png Binary files differdeleted file mode 100644 index 2727d393..00000000 --- a/examples/sensors/grue/grue.png +++ /dev/null diff --git a/examples/sensors/grue/grue.pro b/examples/sensors/grue/grue.pro deleted file mode 100644 index cd23d1f4..00000000 --- a/examples/sensors/grue/grue.pro +++ /dev/null @@ -1,13 +0,0 @@ -TEMPLATE = subdirs - -SUBDIRS += plugin - -# Gui-less apps don't make sense for these platforms -!uikit:!android:!wasm: SUBDIRS += console_app - -# There console app is not a macos bundle, so the shared library plugin wouldn't be found -macos:qtConfig(shared): SUBDIRS -= console_app - -qtHaveModule(quick): SUBDIRS += qml.pro - - diff --git a/examples/sensors/grue/grue.qml b/examples/sensors/grue/grue.qml deleted file mode 100644 index d3a90aa8..00000000 --- a/examples/sensors/grue/grue.qml +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -import QtQuick -import QtSensors -import QtQuick.Layouts -import QMLGrueSensor - -Rectangle { - id: root - anchors.fill: parent - color: "black" - - property int percent: -1 - property string text: "" - property real grueOpacity: 0.0 - - function updateStatus(newPercent, newOpacity, newText) { - if (root.percent === newPercent) - return; - - // Delay updating the visual status to prevent flicker - timer.interval = (newPercent < root.percent) ? 500 : 0; - - root.percent = newPercent; - root.text = newText; - root.grueOpacity = newOpacity; - - timer.start() - } - - Timer { - id: timer - running: false - repeat: false - onTriggered: { - text.text = root.text - grueimg.opacity = root.grueOpacity - } - } - - QMLGrueSensor { - id: sensor - active: true - onReadingChanged: { - var percent = reading.chanceOfBeingEaten; - if (percent === 0) { - updateStatus(percent, 0.0, "It is light.<br>You are safe from Grues."); - } - else if (percent === 100) { - updateStatus(percent, 1.0, "You have been eaten by a Grue!"); - sensor.active = false; - } - else if (percent > 0) { - updateStatus(percent, 0.05 + (percent * 0.001), - "It is dark.<br>You are " + percent +" % " + - "likely to be eaten by a Grue."); - } - } - } - - Text { - id: text - anchors.fill: parent - wrapMode: Text.WordWrap - text: "I can't tell if you're going to be eaten by a Grue or not. You're on your own!" - font.pixelSize: 30 - color: "lightgray" - } - - Image { - id: grueimg - anchors.bottom: parent.bottom - anchors.horizontalCenter: parent.horizontalCenter - source: "grue.png" - opacity: 0.0 - Behavior on opacity { PropertyAnimation { duration: 250 } } - } -} diff --git a/examples/sensors/grue/grue.xcf b/examples/sensors/grue/grue.xcf Binary files differdeleted file mode 100644 index 2837ed7e..00000000 --- a/examples/sensors/grue/grue.xcf +++ /dev/null diff --git a/examples/sensors/grue/grue_plugin_import_custom.cpp b/examples/sensors/grue/grue_plugin_import_custom.cpp deleted file mode 100644 index 0dcf6a1a..00000000 --- a/examples/sensors/grue/grue_plugin_import_custom.cpp +++ /dev/null @@ -1,5 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#include <QtPlugin> -Q_IMPORT_PLUGIN(GrueSensorPlugin) diff --git a/examples/sensors/grue/icon.xcf b/examples/sensors/grue/icon.xcf Binary files differdeleted file mode 100644 index 8416c49f..00000000 --- a/examples/sensors/grue/icon.xcf +++ /dev/null diff --git a/examples/sensors/grue/main.cpp b/examples/sensors/grue/main.cpp deleted file mode 100644 index af119c5a..00000000 --- a/examples/sensors/grue/main.cpp +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#include <QGuiApplication> -#include <QQuickView> - -int main(int argc, char **argv) -{ - QGuiApplication app(argc,argv); - QQuickView view; - view.setSource(QUrl("qrc:/QMLGrueSensor/grue.qml")); - view.show(); - return app.exec(); -} diff --git a/examples/sensors/grue/plugin/CMakeLists.txt b/examples/sensors/grue/plugin/CMakeLists.txt deleted file mode 100644 index 11e8aee8..00000000 --- a/examples/sensors/grue/plugin/CMakeLists.txt +++ /dev/null @@ -1,64 +0,0 @@ -# Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: BSD-3-Clause - -cmake_minimum_required(VERSION 3.16) -project(qtsensors_grue LANGUAGES CXX) - -set(CMAKE_AUTOMOC ON) - -if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") -endif() - -set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/sensors/grue/sensors") - -find_package(Qt6 REQUIRED COMPONENTS Core Sensors) - -qt_add_plugin(qtsensors_grue - PLUGIN_TYPE sensors -) - -target_sources(qtsensors_grue PRIVATE - gruesensorimpl.cpp gruesensorimpl.h - gruesensor.cpp gruesensor.h gruesensor_p.h - main.cpp -) - -set_target_properties(qtsensors_grue PROPERTIES - WIN32_EXECUTABLE TRUE - MACOSX_BUNDLE TRUE -) - -if(WIN32 OR (UNIX AND NOT APPLE)) - set_target_properties(qtsensors_grue PROPERTIES - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../sensors - ) -endif() - -if(APPLE AND QT6_IS_SHARED_LIBS_BUILD) - set_target_properties(qtsensors_grue PROPERTIES - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../grue_app.app/Contents/Plugins/sensors - ) -endif() - -target_link_libraries(qtsensors_grue PUBLIC - Qt::Core - Qt::Sensors -) - -if(ANDROID) - add_custom_target(gruesensorplugin_android_copy ALL - COMMAND "${CMAKE_COMMAND}" - -E copy_if_different - "$<TARGET_FILE:qtsensors_grue>" - "${CMAKE_CURRENT_BINARY_DIR}/../android-build/libs/${CMAKE_ANDROID_ARCH_ABI}/$<TARGET_FILE_NAME:qtsensors_grue>" - COMMENT "Copying sensor plugin lib to grue_app android libs folder.") - - add_dependencies(gruesensorplugin_android_copy qtsensors_grue) -endif() - -install(TARGETS qtsensors_grue - RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" - BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" - LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" -) diff --git a/examples/sensors/grue/plugin/gruesensor.cpp b/examples/sensors/grue/plugin/gruesensor.cpp deleted file mode 100644 index 9bc3784b..00000000 --- a/examples/sensors/grue/plugin/gruesensor.cpp +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#include "gruesensor.h" -#include "gruesensor_p.h" - -IMPLEMENT_READING(GrueSensorReading) - -/* - \omit - \class GrueSensorReading - - \brief The GrueSensorReading class holds readings from the Grue sensor. - - The Grue Sensor informs you of your chance of being eaten by a Grue. - - Grues love the dark so as long as your surroundings are relatively light - you are safe. However the more time you spend in the dark, the higher - your chances are of being eaten by a Grue. -*/ - -/* - \property GrueSensorReading::chanceOfBeingEaten - \brief holds your chance of being eaten. - - The value is the probability (from 0 to 100) that a Grue will eat you. - A probability of 100 means you are currently being eaten. The darker - it is, the more likely you are to be eaten by a Grue. The longer you - stay in a dark area, the more likely you are to be eaten by a Grue. - If you are in a lit room, the probability will be 0 as Grues fear light. - \endomit -*/ - -int GrueSensorReading::chanceOfBeingEaten() const -{ - return d->chanceOfBeingEaten; -} - -void GrueSensorReading::setChanceOfBeingEaten(int chanceOfBeingEaten) -{ - d->chanceOfBeingEaten = chanceOfBeingEaten; -} - -// ===================================================================== - -// begin generated code - -/* - \omit - \class GrueFilter - - \brief The GrueFilter class is a convenience wrapper around QSensorFilter. - - The only difference is that the filter() method features a pointer to GrueSensorReading - instead of QSensorReading. - \endomit -*/ - -/* - \omit - \fn GrueFilter::filter(GrueSensorReading *reading) - - Called when \a reading changes. Returns false to prevent the reading from propagating. - - \sa QSensorFilter::filter() - \endomit -*/ - -char const * const GrueSensor::sensorType("GrueSensor"); - -/* - \omit - \class GrueSensor - - \brief The GrueSensor class is a convenience wrapper around QSensor. - - The only behavioural difference is that this class sets the type properly. - - This class also features a reading() function that returns a GrueSensorReading instead of a QSensorReading. - - For details about how the sensor works, see \l GrueSensorReading. - - \sa GrueSensorReading - \endomit -*/ - -/* - \omit - \fn GrueSensor::GrueSensor(QObject *parent) - - Construct the sensor as a child of \a parent. - \endomit -*/ - -/* - \fn GrueSensor::~GrueSensor() - - Destroy the sensor. Stops the sensor if it has not already been stopped. -*/ - -/* - \omit - \fn GrueSensor::reading() const - - Returns the reading class for this sensor. - - \sa QSensor::reading() - \endomit -*/ -// end generated code - -#include "moc_gruesensor.cpp" diff --git a/examples/sensors/grue/plugin/gruesensor.h b/examples/sensors/grue/plugin/gruesensor.h deleted file mode 100644 index 9677e621..00000000 --- a/examples/sensors/grue/plugin/gruesensor.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#ifndef GRUESENSOR_H -#define GRUESENSOR_H - -#include <qsensor.h> - -class GrueSensorReadingPrivate; - -class GrueSensorReading : public QSensorReading -{ - Q_OBJECT - Q_PROPERTY(int chanceOfBeingEaten READ chanceOfBeingEaten WRITE setChanceOfBeingEaten) - DECLARE_READING(GrueSensorReading) -public: - int chanceOfBeingEaten() const; - void setChanceOfBeingEaten(int chanceOfBeingEaten); -}; - -// begin generated code - -class GrueFilter : public QSensorFilter -{ -public: - virtual bool filter(GrueSensorReading *reading) = 0; -private: - bool filter(QSensorReading *reading) override { return filter(static_cast<GrueSensorReading*>(reading)); } -}; - -class GrueSensor : public QSensor -{ - Q_OBJECT - Q_PROPERTY(GrueSensorReading* reading READ reading) -public: - explicit GrueSensor(QObject *parent = 0) : QSensor(GrueSensor::sensorType, parent) {} - virtual ~GrueSensor() {} - GrueSensorReading *reading() const { return static_cast<GrueSensorReading*>(QSensor::reading()); } - static char const * const sensorType; -}; -// end generated code - -#endif diff --git a/examples/sensors/grue/plugin/gruesensor_p.h b/examples/sensors/grue/plugin/gruesensor_p.h deleted file mode 100644 index 4804f8cf..00000000 --- a/examples/sensors/grue/plugin/gruesensor_p.h +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#ifndef GRUESENSOR_P_H -#define GRUESENSOR_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -class GrueSensorReadingPrivate -{ -public: - GrueSensorReadingPrivate() - : chanceOfBeingEaten(-1) - { - } - - int chanceOfBeingEaten; -}; - -#endif diff --git a/examples/sensors/grue/plugin/gruesensorimpl.cpp b/examples/sensors/grue/plugin/gruesensorimpl.cpp deleted file mode 100644 index 7bfdb092..00000000 --- a/examples/sensors/grue/plugin/gruesensorimpl.cpp +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#include "gruesensorimpl.h" -#include <QDebug> -#include <QTimer> - -char const * const gruesensorimpl::id("grue.gruesensor"); - -gruesensorimpl::gruesensorimpl(QSensor *sensor) - : QSensorBackend(sensor) - , lightLevel(QAmbientLightReading::Undefined) -{ - // We need a light sensor - lightSensor = new QAmbientLightSensor(this); - connect(lightSensor, SIGNAL(readingChanged()), this, SLOT(lightChanged())); - lightSensor->connectToBackend(); - - // We need a timer - darkTimer = new QTimer(this); - darkTimer->setInterval(1000); - connect(darkTimer, SIGNAL(timeout()), this, SLOT(increaseChance())); - - // We use this as our timestamp source - timer.start(); - -//! [setReading] - // Register our reading instance - setReading<GrueSensorReading>(&m_reading); -//! [setReading] - -//! [metadata] - // Supply metadata - // We can run as fast as the light sensor does - setDataRates(lightSensor); - // Only one output range, 0 to 1 in .1 increments - addOutputRange(0, 1, 0.1); - setDescription(QLatin1String("Grue Sensor")); -//! [metadata] -} - -void gruesensorimpl::start() -{ -//! [start] - lightSensor->setDataRate(sensor()->dataRate()); - lightSensor->start(); - // If the light sensor doesn't work we don't work either - if (!lightSensor->isActive()) - sensorStopped(); - if (lightSensor->isBusy()) - sensorBusy(); -//! [start] -} - -void gruesensorimpl::stop() -{ - lightSensor->stop(); -} - -void gruesensorimpl::lightChanged() -{ - if (lightLevel == lightSensor->reading()->lightLevel()) - return; - - lightLevel = lightSensor->reading()->lightLevel(); - - int chance = 0; - darkTimer->stop(); - - switch (lightSensor->reading()->lightLevel()) { - case QAmbientLightReading::Dark: - // It is dark. You are likely to be eaten by a grue. - chance = 10; - darkTimer->start(); - break; - default: - break; - } - - // Only send an update if the value has changed. - if (chance != m_reading.chanceOfBeingEaten() || m_reading.timestamp() == 0) { - m_reading.setTimestamp(timer.elapsed()); - m_reading.setChanceOfBeingEaten(chance); - newReadingAvailable(); - } -} - -void gruesensorimpl::increaseChance() -{ - // The longer you stay in the dark, the higher your chance of being eaten - int chance = m_reading.chanceOfBeingEaten() + 10; - - m_reading.setTimestamp(timer.elapsed()); - m_reading.setChanceOfBeingEaten(chance); - - newReadingAvailable(); - - // No point in using the timer anymore if we've hit 100... you can't get more - // likely to be eaten than 100% - if (chance >= 100) - darkTimer->stop(); -} - diff --git a/examples/sensors/grue/plugin/gruesensorimpl.h b/examples/sensors/grue/plugin/gruesensorimpl.h deleted file mode 100644 index 001af4dd..00000000 --- a/examples/sensors/grue/plugin/gruesensorimpl.h +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#ifndef GRUESENSORIMPL_H -#define GRUESENSORIMPL_H - -#include <qsensorbackend.h> -#include "gruesensor.h" -#include <qambientlightsensor.h> -#include <QElapsedTimer> - -QT_BEGIN_NAMESPACE -class QTimer; -QT_END_NAMESPACE - -class gruesensorimpl : public QSensorBackend -{ - Q_OBJECT -public: - static char const * const id; - - gruesensorimpl(QSensor *sensor); - - void start() override; - void stop() override; - -private Q_SLOTS: - void lightChanged(); - void increaseChance(); - -private: - GrueSensorReading m_reading; - QAmbientLightSensor *lightSensor; - QTimer *darkTimer; - QElapsedTimer timer; - QAmbientLightReading::LightLevel lightLevel; -}; - -#endif - diff --git a/examples/sensors/grue/plugin/main.cpp b/examples/sensors/grue/plugin/main.cpp deleted file mode 100644 index 39b9a585..00000000 --- a/examples/sensors/grue/plugin/main.cpp +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#include "gruesensorimpl.h" -#include <qsensorplugin.h> -#include <qsensorbackend.h> -#include <qsensormanager.h> -#include <QFile> -#include <QDebug> - -class GrueSensorPlugin : public QObject, public QSensorPluginInterface, public QSensorChangesInterface, public QSensorBackendFactory -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID "com.qt-project.Qt.QSensorPluginInterface/1.0" FILE "plugin.json") - Q_INTERFACES(QSensorPluginInterface QSensorChangesInterface) -public: - void registerSensors() override - { - } - - void sensorsChanged() override - { - if (!QSensor::defaultSensorForType(QAmbientLightSensor::sensorType).isEmpty()) { - // There is a light sensor available. Register the backend - if (!QSensorManager::isBackendRegistered(GrueSensor::sensorType, gruesensorimpl::id)) - QSensorManager::registerBackend(GrueSensor::sensorType, gruesensorimpl::id, this); - } else { - if (QSensorManager::isBackendRegistered(GrueSensor::sensorType, gruesensorimpl::id)) - QSensorManager::unregisterBackend(GrueSensor::sensorType, gruesensorimpl::id); - } - } - - QSensorBackend *createBackend(QSensor *sensor) override - { - if (sensor->identifier() == gruesensorimpl::id) - return new gruesensorimpl(sensor); - - return 0; - } -}; - -#include "main.moc" diff --git a/examples/sensors/grue/plugin/plugin.json b/examples/sensors/grue/plugin/plugin.json deleted file mode 100644 index ab372059..00000000 --- a/examples/sensors/grue/plugin/plugin.json +++ /dev/null @@ -1 +0,0 @@ -{ "Keys": [ "grue" ] } diff --git a/examples/sensors/grue/plugin/plugin.pro b/examples/sensors/grue/plugin/plugin.pro deleted file mode 100644 index aa03d6c9..00000000 --- a/examples/sensors/grue/plugin/plugin.pro +++ /dev/null @@ -1,27 +0,0 @@ -TEMPLATE = lib -CONFIG += plugin -TARGET = $$qtLibraryTarget(plugins_sensors_qtsensors_grue) -PLUGIN_TYPE = sensors - -QT = core sensors - -macos:!qtConfig(static): DESTDIR = ../grue_app.app/Contents/MacOS/$$PLUGIN_TYPE -else: DESTDIR = ../$$PLUGIN_TYPE - -HEADERS += gruesensorimpl.h \ - gruesensor.h \ - gruesensor_p.h - -SOURCES += gruesensorimpl.cpp \ - main.cpp \ - gruesensor.cpp - - -# Install the plugin under Grue example directory -target.path=$$[QT_INSTALL_EXAMPLES]/sensors/grue/$$PLUGIN_TYPE -INSTALLS += target - -CONFIG += install_ok # Do not cargo-cult this! - -OTHER_FILES += \ - plugin.json diff --git a/examples/sensors/grue/qml.pro b/examples/sensors/grue/qml.pro deleted file mode 100644 index 6bce739c..00000000 --- a/examples/sensors/grue/qml.pro +++ /dev/null @@ -1,40 +0,0 @@ -TEMPLATE = app -TARGET = grue_app -QT += qml quick sensors - -# Avoid going to release/debug subdirectory -win32: DESTDIR = ./ - -SOURCES = main.cpp \ - qmlgruesensor.cpp - -HEADERS += \ - qmlgruesensor.h - -grue_plugin_base_dir = . -include(use_grue_static_plugin.pri) - -CONFIG += qmltypes -QML_IMPORT_NAME = QMLGrueSensor -QML_IMPORT_MAJOR_VERSION = 1 - -RESOURCES += \ - qml.qrc - -OTHER_FILES = \ - $$files(*.qml) \ - grue.png - -target.path = $$[QT_INSTALL_EXAMPLES]/sensors/grue -INSTALLS += target - -EXAMPLE_FILES += \ - grue.xcf \ - icon.xcf - -android{ - CONFIG += file_copies - COPIES += androidPluginCopy - androidPluginCopy.files = $$OUT_PWD/sensors/libplugins_sensors_qtsensors_grue_armeabi-v7a.so - androidPluginCopy.path = android-build/libs/armeabi-v7a -} diff --git a/examples/sensors/grue/qml.qrc b/examples/sensors/grue/qml.qrc deleted file mode 100644 index 01f4e2bf..00000000 --- a/examples/sensors/grue/qml.qrc +++ /dev/null @@ -1,6 +0,0 @@ -<RCC> - <qresource prefix="/QMLGrueSensor"> - <file>grue.qml</file> - <file>grue.png</file> - </qresource> -</RCC> diff --git a/examples/sensors/grue/qmlgruesensor.cpp b/examples/sensors/grue/qmlgruesensor.cpp deleted file mode 100644 index 312b4968..00000000 --- a/examples/sensors/grue/qmlgruesensor.cpp +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#include "qmlgruesensor.h" - - -QMLGrueSensor::QMLGrueSensor():QSensor("GrueSensor") // QLightSensor -{ - connectToBackend(); - start(); -} diff --git a/examples/sensors/grue/qmlgruesensor.h b/examples/sensors/grue/qmlgruesensor.h deleted file mode 100644 index 9ee14568..00000000 --- a/examples/sensors/grue/qmlgruesensor.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#ifndef QMLGRUESENSOR_H -#define QMLGRUESENSOR_H - -#include <QtQml/qqml.h> -#include <QtSensors/qsensor.h> - -class QMLGrueSensor : public QSensor -{ - Q_OBJECT - QML_ELEMENT - -public: - QMLGrueSensor(); -}; - -#endif // QMLGRUESENSOR_H diff --git a/examples/sensors/grue/use_grue_static_plugin.pri b/examples/sensors/grue/use_grue_static_plugin.pri deleted file mode 100644 index 6ccee1cd..00000000 --- a/examples/sensors/grue/use_grue_static_plugin.pri +++ /dev/null @@ -1,17 +0,0 @@ -# Need to manually link to the plugin when using a static Qt build. -qtConfig(static) { - SOURCES += $$grue_plugin_base_dir/grue_plugin_import_custom.cpp - LIBS += -L$$grue_plugin_base_dir/sensors - # For iOS, xcode takes care of the debug suffix - macx-xcode { - LIBS += -lplugins_sensors_qtsensors_grue$($${QMAKE_XCODE_LIBRARY_SUFFIX_SETTING}) - # For desktop platforms we need to do it per-platform. - } else { - lib_to_link = plugins_sensors_qtsensors_grue - if(!debug_and_release|build_pass):CONFIG(debug, debug|release) { - macos:lib_to_link = $${lib_to_link}_debug - win32:lib_to_link = $${lib_to_link}d - } - LIBS += -l$$lib_to_link - } -} diff --git a/examples/sensors/maze/CMakeLists.txt b/examples/sensors/maze/CMakeLists.txt deleted file mode 100644 index 258291c4..00000000 --- a/examples/sensors/maze/CMakeLists.txt +++ /dev/null @@ -1,77 +0,0 @@ -# Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: BSD-3-Clause - -cmake_minimum_required(VERSION 3.16) -project(maze LANGUAGES CXX) - -set(CMAKE_AUTOMOC ON) - -if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") -endif() - -set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/sensors/maze") - -find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick Sensors) - -qt_add_executable(maze - main.cpp -) - -set_target_properties(maze PROPERTIES - WIN32_EXECUTABLE TRUE - MACOSX_BUNDLE TRUE -) - -if(ANDROID) - set_property(TARGET maze PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR - ${CMAKE_CURRENT_SOURCE_DIR}/android) - endif() -if(APPLE) - if(IOS) - set_property(TARGET maze PROPERTY - MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist" - ) - endif() -endif() - -target_link_libraries(maze PUBLIC - Qt::Core - Qt::Gui - Qt::Quick - Qt::Sensors -) - -# Resources: -set(maze_resource_files - "Congratulation.qml" - "LabyrinthSquare.qml" - "Mouse.qml" - "components/ApplicationWindow.qml" - "components/Button.qml" - "components/images/button_background_disabled.png" - "components/images/button_background_normal.png" - "components/images/button_background_pressed.png" - "content/00.png" - "content/01.png" - "content/cheese.png" - "content/cheeseeating.gif" - "content/congratulations.gif" - "content/mouse_down.gif" - "content/start.png" - "lib.js" - "maze.qml" -) - -qt6_add_resources(maze "maze" - PREFIX - "/" - FILES - ${maze_resource_files} -) - -install(TARGETS maze - RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" - BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" - LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" -) diff --git a/examples/sensors/maze/Congratulation.qml b/examples/sensors/maze/Congratulation.qml deleted file mode 100644 index a1e54ada..00000000 --- a/examples/sensors/maze/Congratulation.qml +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -//Import the declarative plugins -import QtQuick - -//Import the javascript functions for this game -import "lib.js" as Lib - -//Implementation of the Congratulation control -Item { - x: Lib.cellDimension - y: Lib.cellDimension - width: Lib.cellDimension * (Lib.dimension - 2) - height: Lib.cellDimension * (Lib.dimension - 2) - - //Containing a animated gif image - AnimatedImage { - id: img - anchors.fill: parent - visible: true - source: "content/congratulations.gif" - } -} diff --git a/examples/sensors/maze/Info.plist b/examples/sensors/maze/Info.plist deleted file mode 100644 index 2458247c..00000000 --- a/examples/sensors/maze/Info.plist +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDisplayName</key> - <string>maze</string> - <key>CFBundleExecutable</key> - <string>maze</string> - <key>CFBundleGetInfoString</key> - <string>Created by Qt/QMake</string> - <key>CFBundleIdentifier</key> - <string>com.qt.sensorsmaze</string> - <key>CFBundleName</key> - <string>maze</string> - <key>CFBundlePackageType</key> - <string>APPL</string> - <key>CFBundleShortVersionString</key> - <string>1.0</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>1.0</string> - <key>LSRequiresIPhoneOS</key> - <true/> - <key>UILaunchStoryboardName</key> - <string>LaunchScreen</string> - <key>UISupportedInterfaceOrientations</key> - <array> - <string>UIInterfaceOrientationPortrait</string> - </array> -</dict> -</plist> diff --git a/examples/sensors/maze/LabyrinthSquare.qml b/examples/sensors/maze/LabyrinthSquare.qml deleted file mode 100644 index d9e72db7..00000000 --- a/examples/sensors/maze/LabyrinthSquare.qml +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -//Import the declarative plugins -import QtQuick - -//Import the javascript functions for this game -import "lib.js" as Lib - -//Implementation of the Labyrinth square control. -Rectangle { - id: sq - x: 0 - y: 0 - width: Lib.cellDimension - height: Lib.cellDimension - color: "white" - property int val: 0 - property AnimatedImage picture: img - - //Dependent of its position and the labyrinth value a square can be the start, cheese, empty or a wall - AnimatedImage { - id: img - anchors.fill: parent - source: "" - } - - function updateImage() - { - if (sq.val == -1) - sq.picture.source = "content/start.png"; - else if (sq.val == 3) - sq.picture.source = "content/cheese.png"; - else if (sq.val == 4){ - sq.picture.source = "content/cheeseeating.gif"; - sq.picture.playing = true; - } - else if (sq.val == 1) - sq.picture.source = "content/01.png"; - else - sq.picture.source = "content/00.png"; - } -} diff --git a/examples/sensors/maze/Mouse.qml b/examples/sensors/maze/Mouse.qml deleted file mode 100644 index 155f0bd6..00000000 --- a/examples/sensors/maze/Mouse.qml +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -//Import the declarative plugins -import QtQuick - -//Import the javascript functions for this game -import "lib.js" as Lib - -//Implementation of the Mouse control. -Item { - id: mouse - x: 0 - y: 0 - width: Lib.cellDimension - height: Lib.cellDimension - property int angle - readonly property double radians_to_degrees: 180 / Math.PI - - AnimatedImage { - id: img - source: "content/mouse_down.gif" - anchors.fill: parent - visible: true - } - - //Function for moving the mouse - function move(newx, newy) - { - if (mouse.x === newx && mouse.y === newy) - return - // somehow this actually works -//! [0] - var a = newy - mouse.y - var b = newx - mouse.x - angle = Math.atan2(-b, a) * mouse.radians_to_degrees - if (angle < 0) - angle = 360 + angle - - img.rotation = angle - mouse.x = newx; - mouse.y = newy; -//! [0] - } -} diff --git a/examples/sensors/maze/android/AndroidManifest.xml b/examples/sensors/maze/android/AndroidManifest.xml deleted file mode 100644 index 8efe1ed3..00000000 --- a/examples/sensors/maze/android/AndroidManifest.xml +++ /dev/null @@ -1,47 +0,0 @@ -<?xml version="1.0"?> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="org.qtproject.example.maze" - android:installLocation="auto" - android:versionCode="1" - android:versionName="1.0"> - <!-- The comment below will be replaced with dependencies permissions upon deployment. - Remove the comment if you do not require these default permissions. --> - <!-- %%INSERT_PERMISSIONS --> - - <!-- The comment below will be replaced with dependencies permissions upon deployment. - Remove the comment if you do not require these default features. --> - <!-- %%INSERT_FEATURES --> - - <supports-screens - android:anyDensity="true" - android:largeScreens="true" - android:normalScreens="true" - android:smallScreens="true" /> - <application - android:name="org.qtproject.qt.android.bindings.QtApplication" - android:extractNativeLibs="true" - android:hardwareAccelerated="true" - android:label="-- %%INSERT_APP_NAME%% --" - android:requestLegacyExternalStorage="true"> - <activity - android:name="org.qtproject.qt.android.bindings.QtActivity" - android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density" - android:label="-- %%INSERT_APP_NAME%% --" - android:launchMode="singleTop" - android:screenOrientation="portrait"> - <intent-filter> - <action android:name="android.intent.action.MAIN"/> - <category android:name="android.intent.category.LAUNCHER"/> - </intent-filter> - <meta-data - android:name="android.app.lib_name" - android:value="-- %%INSERT_APP_LIB_NAME%% --" /> - <meta-data - android:name="android.app.background_running" - android:value="false" /> - <meta-data - android:name="android.app.extract_android_style" - android:value="minimal" /> - </activity> - </application> -</manifest> diff --git a/examples/sensors/maze/components/ApplicationWindow.qml b/examples/sensors/maze/components/ApplicationWindow.qml deleted file mode 100644 index 3f87d724..00000000 --- a/examples/sensors/maze/components/ApplicationWindow.qml +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -//Import the declarative plugins -import QtQuick - -Rectangle { - id: appWnd - x: 0 - y: 0 - width: 320 - height: 480 - color: "#ececec" -} diff --git a/examples/sensors/maze/components/Button.qml b/examples/sensors/maze/components/Button.qml deleted file mode 100644 index 953424a4..00000000 --- a/examples/sensors/maze/components/Button.qml +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -//Import the declarative plugins -import QtQuick - -//Implementation of the Button control. -Item { - id: button - width: 30 - height: 100 - property alias text: innerText.text - signal clicked - - Image { - id: backgroundImage - anchors.fill: parent - source: (button.enabled ? "images/button_background_normal.png" : "images/button_background_disabled.png") - } - - Text { - id: innerText - anchors.centerIn: parent - color: "white" - font.bold: true - } - - //Mouse area to react on click events - MouseArea { - anchors.fill: button - onClicked: { button.clicked();} - onPressed: { - backgroundImage.source = "images/button_background_pressed.png" } - onReleased: { - backgroundImage.source = (button.enabled ? "images/button_background_normal.png" : "images/button_background_disabled.png") - } - } -} diff --git a/examples/sensors/maze/components/images/button_background_disabled.png b/examples/sensors/maze/components/images/button_background_disabled.png Binary files differdeleted file mode 100644 index 62a00b9a..00000000 --- a/examples/sensors/maze/components/images/button_background_disabled.png +++ /dev/null diff --git a/examples/sensors/maze/components/images/button_background_normal.png b/examples/sensors/maze/components/images/button_background_normal.png Binary files differdeleted file mode 100644 index 1fecad5b..00000000 --- a/examples/sensors/maze/components/images/button_background_normal.png +++ /dev/null diff --git a/examples/sensors/maze/components/images/button_background_pressed.png b/examples/sensors/maze/components/images/button_background_pressed.png Binary files differdeleted file mode 100644 index e0ba0e7a..00000000 --- a/examples/sensors/maze/components/images/button_background_pressed.png +++ /dev/null diff --git a/examples/sensors/maze/content/00.png b/examples/sensors/maze/content/00.png Binary files differdeleted file mode 100644 index 2522be5e..00000000 --- a/examples/sensors/maze/content/00.png +++ /dev/null diff --git a/examples/sensors/maze/content/01.png b/examples/sensors/maze/content/01.png Binary files differdeleted file mode 100644 index 6146b204..00000000 --- a/examples/sensors/maze/content/01.png +++ /dev/null diff --git a/examples/sensors/maze/content/cheese.png b/examples/sensors/maze/content/cheese.png Binary files differdeleted file mode 100644 index c737b9d6..00000000 --- a/examples/sensors/maze/content/cheese.png +++ /dev/null diff --git a/examples/sensors/maze/content/cheeseeating.gif b/examples/sensors/maze/content/cheeseeating.gif Binary files differdeleted file mode 100644 index 6b2cb47f..00000000 --- a/examples/sensors/maze/content/cheeseeating.gif +++ /dev/null diff --git a/examples/sensors/maze/content/congratulations.gif b/examples/sensors/maze/content/congratulations.gif Binary files differdeleted file mode 100644 index 70204176..00000000 --- a/examples/sensors/maze/content/congratulations.gif +++ /dev/null diff --git a/examples/sensors/maze/content/mouse_down.gif b/examples/sensors/maze/content/mouse_down.gif Binary files differdeleted file mode 100644 index 5491c18f..00000000 --- a/examples/sensors/maze/content/mouse_down.gif +++ /dev/null diff --git a/examples/sensors/maze/content/start.png b/examples/sensors/maze/content/start.png Binary files differdeleted file mode 100644 index 581b8c9b..00000000 --- a/examples/sensors/maze/content/start.png +++ /dev/null diff --git a/examples/sensors/maze/doc/src/maze.qdoc b/examples/sensors/maze/doc/src/maze.qdoc deleted file mode 100644 index a6f132f9..00000000 --- a/examples/sensors/maze/doc/src/maze.qdoc +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only - -/*! - \example maze - \title Qt Sensors - Maze QML Example - \ingroup qtsensors-examples - \image maze.png - - \section2 Maze in QML - \brief The Maze example demonstrates the TiltSensor QML type. - - - To write a QML application that will use the TiltSensor QML sensors type - you need to do the following steps: - - To import the Qt Sensors QML types into your application, use the following - import statement in your .qml file: - - \snippet maze/maze.qml 0 - - Then, add the Sensor QML types into your qml file. - - In this example we use the TiltSensor: - - \snippet maze/maze.qml 1 - - The mouse should move by a factor of the tilt value: - - \snippet maze/maze.qml 2 - - The walk direction of the mouse takes into account some collision detection: - - \snippet maze/maze.qml 3 - - The rotation of the mouse image is determined according to the angle that the mouse is moving. - - \snippet maze/Mouse.qml 0 - -*/ - diff --git a/examples/sensors/maze/lib.js b/examples/sensors/maze/lib.js deleted file mode 100644 index 3bae6a86..00000000 --- a/examples/sensors/maze/lib.js +++ /dev/null @@ -1,264 +0,0 @@ -//global variables -var labyrinth = null; -var dimension = 24; -var cellDimension = 13; -var won; -var objectArray = null; -var sec = 0.0 - -//Allocate labyrinth arrays and create labyrinth and way reflected in the labyrinth array -function createLabyrinth() -{ - won = false; - //create the labyrinth matrix - labyrinth = null; - labyrinth = new Array(dimension); - for (var x = 0; x < dimension; x++ ){ - labyrinth[x] = new Array(dimension); - for (var y = 0; y < dimension; y++ ){ - labyrinth[x][y] = 0; - } - } - createWay(); - createLab(); -} - -//Create a way where the mouse can reach the cheese -function createWay() -{ - //Create rnd way to have at least one solution - //A way square is marked as a 2 in the labyrinth array - var x = 0; - var y = 0; - var ox = x; - var oy = y; - labyrinth[0][0] = 2; - while (x < dimension && y < dimension){ - var rnd = Math.floor(Math.random()*5); - if (Math.floor(Math.random()*2) == 1){ - if (rnd == 0) x--; - if (rnd >= 1) x++; - if (x < 0) x++; - if (x >= dimension){ - x = ox; - break; - } - } - else { - if (rnd == 0) y--; - if (rnd >= 1) y++; - if (y < 0) y++; - if (y >= dimension){ - y = oy; - break; - } - } - - /*avoid to have [2]2| - |2|2|*/ - if (x < (dimension - 1) && y < (dimension - 1)){ - if (labyrinth[x + 1][y] == 2 - && labyrinth[x][y + 1] == 2 - && labyrinth[x + 1][y + 1] == 2){ - y = oy; - x = ox; - continue; - } - } - /*avoid to have |2[2] - |2|2|*/ - if (x > 0 && y < (dimension - 1)){ - if (labyrinth[x - 1][y] == 2 - && labyrinth[x][y + 1] == 2 - && labyrinth[x - 1][y + 1] == 2){ - y = oy; - x = ox; - continue; - } - } - /*avoid to have |2|2| - [2]2|*/ - if (x < (dimension - 1) && y > 0){ - if (labyrinth[x + 1][y] == 2 - && labyrinth[x][y - 1] == 2 - && labyrinth[x + 1][y - 1] == 2){ - y = oy; - x = ox; - continue; - } - } - /*avoid to have |2|2| - |2[2]*/ - if (x > 0 && y > 0){ - if (labyrinth[x - 1][y] == 2 - && labyrinth[x][y - 1] == 2 - && labyrinth[x - 1][y - 1] == 2){ - y = oy; - x = ox; - continue; - } - } - - labyrinth[x][y] = 2; - ox = x; - oy = y; - } - //finish way - while (x < (dimension - 1)){ - labyrinth[x][y] = 2; - x++; - } - while (y < (dimension - 1)){ - labyrinth[x][y] = 2; - y++; - } -} - -//Create the labyrinth with rnd values -function createLab() -{ - //A wall square is marked as a 1 in the labyrinth array - //Not a wall square is marked as a 0 in the labyrinth array - //The Cheese square is marked as a 3 in the labyrinth array - //The start is marked as a -1 in the labyrinth array - for (var x = 0; x < dimension; x++ ){ - var rnd = 0; - for (var y = 0; y < dimension; y++){ - //But don't overwrite the way - if (labyrinth[x][y] != 2){ - var rnd = Math.floor(Math.random()*2); - var xy = 0; - var xxy = 0; - var xyy = 0; - var xxyy = 0; - - if (x > 0 && y > 0){ - xy = labyrinth[x - 1][y - 1]; - if (xy == 2) - xy = 0; - - xyy = labyrinth[x - 1][y]; - if (xyy == 2) - xyy = 0; - - xxy = labyrinth[x][y - 1]; - if (xxy == 2) - xxy = 0; - - xxyy = rnd; - if (xxyy == 2) - xxyy = 0; - - //avoid to have to many |0|1| or |1|0| [xy ][xxy ] - // |1[0] |0[1] [xyy ][xxyy] - if (xyy == xxy && xy == xxyy && xy != xxy){ - if (rnd == 1) - rnd = 0; - else rnd = 1; - } - - //avoid to have to many |1|1| or |0|0| - // |1[1] |0[0] - if (xy == xxy && xxy == xxyy && xxyy == xyy){ - if (rnd == 1) - rnd = 0; - else rnd = 1; - } - } - else if (x == 0 && y > 0){ - xy = labyrinth[x][y - 1]; - if (xy == 2) - xy = 0; - - xyy = rnd; - if (xyy == 2) - xyy = 0; - - xxy = labyrinth[x + 1][y - 1]; - if (xxy == 2) - xxy = 0; - - xxyy = labyrinth[x + 1][y]; - if (xxyy == 2) - xxyy = 0; - - //avoid to have to many |1|1| or |0|0| - // |1[1] |0[0] - if (xy == xxy && xxy == xxyy && xxyy == xyy){ - if (rnd == 1) - rnd = 0; - else rnd = 1; - } - - //avoid to have to many |0|1| or |1|0| [xy ][xxy ] - // |1[0] |0[1] [xyy ][xxyy] - if (xyy == xxy && xy == xxyy && xy != xxy){ - if (rnd == 1) - rnd = 0; - else rnd = 1; - } - } - labyrinth[x][y] = rnd; - } - - } - } - //set start and end - labyrinth[0][0] = -1; - labyrinth[0][1] = 0; - labyrinth[1][0] = 0; - labyrinth[1][1] = 0; - - labyrinth[dimension - 2][dimension - 2] = 0; - labyrinth[dimension - 2][dimension - 1] = 0; - labyrinth[dimension - 1][dimension - 2] = 0; - labyrinth[dimension - 1][dimension - 1] = 3; -} - -//Function that checks if the mouse can be moved in x and y -function canMove(x, y) -{ - //Check if movement is allowed - var xcenter = x + (cellDimension / 2); - var ycenter = y + (cellDimension / 2); - //try to get the index - var idx = Math.floor(xcenter / cellDimension); - var idy = Math.floor(ycenter / cellDimension); - var dx = xcenter - (idx * cellDimension + ( cellDimension / 2 )); - var dy = ycenter - (idy * cellDimension + ( cellDimension / 2 )); - - if (dx > 0){ - if (labyrinth[idx][idy] == 1) - return false; - } - if (dx < 0){ - if (labyrinth[idx][idy] == 1) - return false; - } - if (dy > 0){ - if (labyrinth[idx][idy] == 1) - return false; - } - if (dy < 0){ - if (labyrinth[idx][idy] == 1) - return false; - } - //check if won - if (idx == (dimension - 1) && idy == (dimension - 1)) - won = true; - return true; -} - -//Function that prints out the labyrith array values in the console -function printLab() -{ - //for debug purposes print out lab n console - var iy = 0; - for (var y = 0; y < dimension; y++ ){ - var line = ""; - for (var x = 0; x < dimension; x++ ){ - line += labyrinth[x][y]; - } - console.log(line); - } -} diff --git a/examples/sensors/maze/main.cpp b/examples/sensors/maze/main.cpp deleted file mode 100644 index 2dbf1aa1..00000000 --- a/examples/sensors/maze/main.cpp +++ /dev/null @@ -1,5 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#include "../stub.h" -SENSORS_EXAMPLE_MAIN(maze) diff --git a/examples/sensors/maze/maze.pro b/examples/sensors/maze/maze.pro deleted file mode 100644 index f15fa570..00000000 --- a/examples/sensors/maze/maze.pro +++ /dev/null @@ -1,19 +0,0 @@ -TEMPLATE = app -TARGET = maze -QT += quick sensors -SOURCES = main.cpp - -OTHER_FILES = \ - components \ - $$files(*.qml) \ - $$files(*.js) \ - content \ - android/AndroidManifest.xml - -target.path = $$[QT_INSTALL_EXAMPLES]/sensors/maze -INSTALLS += target - -RESOURCES += \ - maze.qrc - -ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android diff --git a/examples/sensors/maze/maze.qml b/examples/sensors/maze/maze.qml deleted file mode 100644 index c28e970b..00000000 --- a/examples/sensors/maze/maze.qml +++ /dev/null @@ -1,251 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -/* Layout - mainWnd - / -------------------------------/ gameRect -| / -|-----------------------------/ -||---------------------------| -||||M| || -||| \ || -||| mouseCtrl || -||| || -||| || -||| Labyrinth || -||| || -||| || -||| cheeseSquare || -||| \ || -||| |C||| -||---------------------------| -|----------------------------- -| -|----------------------------- -|| || | -|----------------------------- -| \ \ -| \ timePlayingLabel -| newGameButton ------------------------------- - -*/ -//Import the declarative plugins -import QtQuick -import "components" - -//! [0] -import QtSensors -//! [0] - -//Import the javascript functions for this game -import "lib.js" as Lib - -ApplicationWindow { - id: mainWnd - property bool gameRunning: false - - Component.onCompleted: { - initializeMaze() - newGame() - } - - function initializeMaze() { - Lib.objectArray = new Array(Lib.dimension * Lib.dimension); - Lib.createLabyrinth(); - var idx = 0; - var component = Qt.createComponent("LabyrinthSquare.qml"); - for (var y = 0; y < Lib.dimension; y++ ) { - for (var x = 0; x < Lib.dimension; x++ ) { - var square = component.createObject(gameRect); - if (!square) { - console.log("error loading labyrinth square: " + component.errorString()) - return - } - square.x = x * square.width; - square.y = y * square.height; - square.val = Lib.labyrinth[x][y]; - Lib.objectArray[idx] = square; - idx++; - } - } - } - - function newGame() { - congratulation.visible = false; - - // Reset game time - timePlayingLabel.text = "--"; - Lib.sec = 0.0; - - // Create new labyrinth - Lib.createLabyrinth(); - // Update maze tiles to match the new labyrinth - var idx = 0; - for (var y = 0; y < Lib.dimension; y++ ) { - for (var x = 0; x < Lib.dimension; x++ ) { - Lib.objectArray[idx].val = Lib.labyrinth[x][y]; - Lib.objectArray[idx].updateImage(); - idx++; - } - } - // Reset mouse position and start the game - mouseCtrl.x = 0; - mouseCtrl.y = 0; - mainWnd.gameRunning = true; - } - - function gameWon() { - // Update the cheese square at the bottom right (win animation) - Lib.objectArray[Lib.dimension * Lib.dimension - 1].val = 4 - Lib.objectArray[Lib.dimension * Lib.dimension - 1].updateImage() - congratulation.visible = true; - mainWnd.gameRunning = false; - } - - Rectangle { - id: gameRect - x: (mainWnd.width - width) / 2 - y: 5 - width: Lib.dimension * Lib.cellDimension - height: Lib.dimension * Lib.cellDimension - color: "transparent" - border.width: 2 - } - - Mouse { - id: mouseCtrl - } - - Congratulation { - id: congratulation - visible: false - } - -//! [1] - TiltSensor { - id: tiltSensor - active: true - } -//! [1] - - //Timer to read out the x and y rotation of the TiltSensor - Timer { - id: tiltTimer - interval: 50 - repeat: true - running: tiltSensor.active && mainWnd.gameRunning - - onTriggered: { - // Update the maze unless game is already won - if (Lib.won === true) { - gameWon() - return - } - Lib.sec += 0.05; - timePlayingLabel.text = Math.floor(Lib.sec) + " seconds"; - - //check if we can move the mouse - var xval = -1; - var yval = -1; - -//! [2] - var xstep = 0; - xstep = tiltSensor.reading.yRotation * 0.1 //acceleration - - var ystep = 0; - ystep = tiltSensor.reading.xRotation * 0.1 //acceleration -//! [2] -//! [3] - if (xstep < 1 && xstep > 0) - xstep = 0 - else if (xstep > -1 && xstep < 0) - xstep = 0 - - if (ystep < 1 && ystep > 0) - ystep = 0; - else if (ystep > -1 && ystep < 0) - ystep = 0; - - if ((xstep < 0 && mouseCtrl.x > 0 - && Lib.canMove(mouseCtrl.x + xstep,mouseCtrl.y))) { - xval = mouseCtrl.x + xstep; - - } else if (xstep > 0 && mouseCtrl.x < (Lib.cellDimension * (Lib.dimension - 1)) - && Lib.canMove(mouseCtrl.x + xstep,mouseCtrl.y)) { - xval = mouseCtrl.x + xstep; - } else - xval = mouseCtrl.x; - - if (ystep < 0 && mouseCtrl.y > 0 - && Lib.canMove(mouseCtrl.x, mouseCtrl.y + ystep)) { - yval = mouseCtrl.y + ystep; - } else if (ystep > 0 && (mouseCtrl.y < (Lib.cellDimension * (Lib.dimension - 1))) - && Lib.canMove(mouseCtrl.x, mouseCtrl.y + ystep)) { - yval = mouseCtrl.y + ystep; - } else - yval = mouseCtrl.y - mouseCtrl.move(xval, yval); -//! [3] - } - } - - //Button to start a new Game - Button{ - id: newGameButton - anchors.left: gameRect.left - anchors.top: gameRect.bottom - anchors.topMargin: 5 - height: 30 - width: 100 - text: qsTr("New game") - onClicked: newGame() - } - Button{ - id: calibrateButton - anchors.left: gameRect.left - anchors.top: newGameButton.bottom - anchors.topMargin: 5 - height: 30 - width: 100 - text: qsTr("Calibrate") - onClicked: tiltSensor.calibrate(); - } - - Text { - id: tiltSensorInfo - visible: tiltSensor.active - anchors.left: gameRect.left - anchors.top: calibrateButton.bottom - anchors.topMargin: 5 - text: qsTr("Tilt sensor ID: ") + tiltSensor.identifier - } - - //Label to print out the game time - Text{ - id: timePlayingLabel - anchors.right: gameRect.right - anchors.top: gameRect.bottom - anchors.topMargin: 5 - } - - Rectangle { - id: tiltSensorMissing - visible: !tiltSensor.active - anchors.fill: parent - color: "#AACCCCCC" // slightly transparent - Text { - anchors.centerIn: parent - text: qsTr("Tilt sensor\nnot found") - font.pixelSize: 24 - font.bold: true - color: "black" - } - MouseArea { - // prevent interaction with the game - anchors.fill: parent - } - } -} - diff --git a/examples/sensors/maze/maze.qrc b/examples/sensors/maze/maze.qrc deleted file mode 100644 index 10916193..00000000 --- a/examples/sensors/maze/maze.qrc +++ /dev/null @@ -1,21 +0,0 @@ -<RCC> - <qresource prefix="/"> - <file>Congratulation.qml</file> - <file>LabyrinthSquare.qml</file> - <file>lib.js</file> - <file>maze.qml</file> - <file>Mouse.qml</file> - <file>components/ApplicationWindow.qml</file> - <file>components/Button.qml</file> - <file>components/images/button_background_disabled.png</file> - <file>components/images/button_background_pressed.png</file> - <file>components/images/button_background_normal.png</file> - <file>content/00.png</file> - <file>content/start.png</file> - <file>content/mouse_down.gif</file> - <file>content/congratulations.gif</file> - <file>content/cheeseeating.gif</file> - <file>content/cheese.png</file> - <file>content/01.png</file> - </qresource> -</RCC> diff --git a/examples/sensors/qmlqtsensors/CMakeLists.txt b/examples/sensors/qmlqtsensors/CMakeLists.txt deleted file mode 100644 index 9c1146cf..00000000 --- a/examples/sensors/qmlqtsensors/CMakeLists.txt +++ /dev/null @@ -1,54 +0,0 @@ -# Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: BSD-3-Clause - -cmake_minimum_required(VERSION 3.16) -project(qmlqtsensors LANGUAGES CXX) - -set(CMAKE_AUTOMOC ON) - -if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") -endif() - -set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/sensors/qmlqtsensors") - -find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick) - -qt_add_executable(qmlqtsensors - main.cpp -) - -set_target_properties(qmlqtsensors PROPERTIES - WIN32_EXECUTABLE TRUE - MACOSX_BUNDLE TRUE -) - -target_link_libraries(qmlqtsensors PUBLIC - Qt::Core - Qt::Gui - Qt::Quick -) - -# Resources: -set(qmlqtsensors_resource_files - "components/ApplicationWindow.qml" - "components/Button.qml" - "components/Divider.qml" - "components/images/button_background_disabled.png" - "components/images/button_background_normal.png" - "components/images/button_background_pressed.png" - "qmlqtsensors.qml" -) - -qt6_add_resources(qmlqtsensors "qmlqtsensors" - PREFIX - "/" - FILES - ${qmlqtsensors_resource_files} -) - -install(TARGETS qmlqtsensors - RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" - BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" - LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" -) diff --git a/examples/sensors/qmlqtsensors/components/ApplicationWindow.qml b/examples/sensors/qmlqtsensors/components/ApplicationWindow.qml deleted file mode 100644 index a2e90655..00000000 --- a/examples/sensors/qmlqtsensors/components/ApplicationWindow.qml +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -//Import the declarative plugins -import QtQuick - -Rectangle { - id: appWnd - width: 320 - height: 480 - color: "#868482" -} diff --git a/examples/sensors/qmlqtsensors/components/Button.qml b/examples/sensors/qmlqtsensors/components/Button.qml deleted file mode 100644 index 953424a4..00000000 --- a/examples/sensors/qmlqtsensors/components/Button.qml +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -//Import the declarative plugins -import QtQuick - -//Implementation of the Button control. -Item { - id: button - width: 30 - height: 100 - property alias text: innerText.text - signal clicked - - Image { - id: backgroundImage - anchors.fill: parent - source: (button.enabled ? "images/button_background_normal.png" : "images/button_background_disabled.png") - } - - Text { - id: innerText - anchors.centerIn: parent - color: "white" - font.bold: true - } - - //Mouse area to react on click events - MouseArea { - anchors.fill: button - onClicked: { button.clicked();} - onPressed: { - backgroundImage.source = "images/button_background_pressed.png" } - onReleased: { - backgroundImage.source = (button.enabled ? "images/button_background_normal.png" : "images/button_background_disabled.png") - } - } -} diff --git a/examples/sensors/qmlqtsensors/components/Divider.qml b/examples/sensors/qmlqtsensors/components/Divider.qml deleted file mode 100644 index 4856d665..00000000 --- a/examples/sensors/qmlqtsensors/components/Divider.qml +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -import QtQuick - -Column { - spacing: 5 - width: parent.width - property alias label: textLabel.text - - Rectangle { - border.width: 1 - height: 2 - width: parent.width - anchors.margins: 20 - border.color: "#2d2b19" - } - Text { - id: textLabel - width: parent.width - horizontalAlignment: Text.AlignHCenter - font.bold: true - } -} diff --git a/examples/sensors/qmlqtsensors/components/images/button_background_disabled.png b/examples/sensors/qmlqtsensors/components/images/button_background_disabled.png Binary files differdeleted file mode 100644 index 62a00b9a..00000000 --- a/examples/sensors/qmlqtsensors/components/images/button_background_disabled.png +++ /dev/null diff --git a/examples/sensors/qmlqtsensors/components/images/button_background_normal.png b/examples/sensors/qmlqtsensors/components/images/button_background_normal.png Binary files differdeleted file mode 100644 index 1fecad5b..00000000 --- a/examples/sensors/qmlqtsensors/components/images/button_background_normal.png +++ /dev/null diff --git a/examples/sensors/qmlqtsensors/components/images/button_background_pressed.png b/examples/sensors/qmlqtsensors/components/images/button_background_pressed.png Binary files differdeleted file mode 100644 index e0ba0e7a..00000000 --- a/examples/sensors/qmlqtsensors/components/images/button_background_pressed.png +++ /dev/null diff --git a/examples/sensors/qmlqtsensors/doc/src/qmlqtsensors.qdoc b/examples/sensors/qmlqtsensors/doc/src/qmlqtsensors.qdoc deleted file mode 100644 index 410fb2c1..00000000 --- a/examples/sensors/qmlqtsensors/doc/src/qmlqtsensors.qdoc +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only - -/*! - \example qmlqtsensors - \title Qt Sensors - QML Example - \ingroup qtsensors-examples - \image qmlqtsensors.png - - \section2 Qt Sensors in QML - \brief The QtSensors - QML example demonstrates the QML sensors types in the QtSensors import. - - - To write a QML application that will use the QML sensors types in the QtSensors import you need to to the following steps: - - Import the QtSensors declarative plugin: - - \snippet qmlqtsensors/qmlqtsensors.qml 0 - - Add the Sensor QML types into your qml file. - - In this example we use the TiltSensor: - - \snippet qmlqtsensors/qmlqtsensors.qml 1 - - The Tilt-, AmbientLight- and the Proximity QML sensor types have the 'enabled' property in common. - To start or stop the sensor set this property to true or false. - - \snippet qmlqtsensors/qmlqtsensors.qml 2 - - Reading the data can be done for each sensor type like following: - - \l {TiltSensor} {TiltSensor} - - \snippet qmlqtsensors/qmlqtsensors.qml 3 - \snippet qmlqtsensors/qmlqtsensors.qml 4 - - \l {AmbientLightSensor} {AmbientLightSensor} - - \snippet qmlqtsensors/qmlqtsensors.qml 5 - - \l {ProximitySensor} {ProximitySensor} - - \snippet qmlqtsensors/qmlqtsensors.qml 6 -*/ - diff --git a/examples/sensors/qmlqtsensors/main.cpp b/examples/sensors/qmlqtsensors/main.cpp deleted file mode 100644 index 48705436..00000000 --- a/examples/sensors/qmlqtsensors/main.cpp +++ /dev/null @@ -1,5 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#include "../stub.h" -SENSORS_EXAMPLE_MAIN(qmlqtsensors) diff --git a/examples/sensors/qmlqtsensors/qmlqtsensors.pro b/examples/sensors/qmlqtsensors/qmlqtsensors.pro deleted file mode 100644 index 4c8e83b3..00000000 --- a/examples/sensors/qmlqtsensors/qmlqtsensors.pro +++ /dev/null @@ -1,16 +0,0 @@ -TEMPLATE = app -TARGET = qmlqtsensors -QT += quick -qtConfig(static):QT += sensors - -SOURCES = main.cpp - -RESOURCES += \ - qmlqtsensors.qrc - -OTHER_FILES = \ - $$files(*.qml) \ - components - -target.path = $$[QT_INSTALL_EXAMPLES]/sensors/qmlqtsensors -INSTALLS += target diff --git a/examples/sensors/qmlqtsensors/qmlqtsensors.qml b/examples/sensors/qmlqtsensors/qmlqtsensors.qml deleted file mode 100644 index 43bf140a..00000000 --- a/examples/sensors/qmlqtsensors/qmlqtsensors.qml +++ /dev/null @@ -1,212 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -/* Layout - mainWnd - / ---------------------------------------------------------------------------------- -|-------------------------------------------------------------------------------- -|| labelTitle | -|-------------------------------------------------------------------------------- -|-------------------------------------------------------------------------------- <---- tiltLine -|-------------------------------------------------------------------------------- -|| labelTilt | -|-------------------------------------------------------------------------------- -| / accuracyRect / speedRect -|-------------------------------------------||----------------------------------| -|| Accuracy <----- textAccuracy || Speed <-----textSpeed | -|| value <- textAccuracyValue || value <- textSpeedValue | -|| ----------------- ------------------ || --------------- ---------------- | -|| | accuracyLower | | accuracyHigher | || | speedLower | | speedHigher | | -|| ----------------- ------------------ || --------------- ---------------- | -|------------------------------------------ ||----------------------------------| -| ----------- -| |Calibrate| <------------------ calibrate -| ----------- -| --------- -| |Degree | <-------------------- useRadian X Rotation: 0 <------------------ xrottext -| --------- -| --------- -| |Start | <-------------------- tiltStart Y Rotation: 0 <------------------ yrottext -| --------- -|-------------------------------------------------------------------------------- <---- ambientlightLine -|-------------------------------------------------------------------------------- -|| labelAmbientLight | -|-------------------------------------------------------------------------------- -| --------- -| |Start | <-------------------- ablStart Ambient light: - <--------------- abltext -| --------- -|-------------------------------------------------------------------------------- <---- proximityLine -|-------------------------------------------------------------------------------- -|| labelProximityLight | -|-------------------------------------------------------------------------------- -| --------- -| |Start | <-------------------- proxiStart Proximity: - <--------------- proxitext -| --------- ------------------------------------------------------------------------------- -*/ - -//Import the declarative plugins -import QtQuick -import "components" - -//! [0] -import QtSensors -//! [0] - -ApplicationWindow { - - anchors.fill: parent - - // Sensor types used - //! [1] - TiltSensor { - id: tilt - active: false - } - //! [1] - - AmbientLightSensor { - id: ambientlight - active: false - //! [5] - onReadingChanged: { - if (reading.lightLevel == AmbientLightReading.Dark) - ambientlighttext.text = "Ambient light: Dark"; - else if (reading.lightLevel == AmbientLightReading.Twilight) - ambientlighttext.text = "Ambient light: Twilight"; - else if (reading.lightLevel == AmbientLightReading.Light) - ambientlighttext.text = "Ambient light: Light"; - else if (reading.lightLevel == AmbientLightReading.Bright) - ambientlighttext.text = "Ambient light: Bright"; - else if (reading.lightLevel == AmbientLightReading.Sunny) - ambientlighttext.text = "Ambient light: Sunny"; - else - ambientlighttext.text = "Ambient light: Unknown"; - } - //! [5] - } - - ProximitySensor { - id: proxi - active: false - } - - Column { - spacing: 10 - anchors.fill: parent - anchors.margins: 5 - - Text { - id: labelTitle - width: parent.width - horizontalAlignment: Text.AlignHCenter - font.pixelSize: 30 - font.bold: true - text: "QML QtSensors" - } - - // Tilt region - Divider { label: "TiltSensor" } - - Row { - spacing: 20 - width: parent.width - anchors.margins: 5 - Button { - id: calibrate - height: 30 - width: 80 - text: "Calibrate" - onClicked: tilt.calibrate(); - } - Text { - id: xrottext - height: 30 - verticalAlignment: Text.AlignVCenter - //! [3] - text: "X Rotation: " + (tilt.reading ? tilt.reading.xRotation.toFixed(2) + "°" : "Unknown") - //! [3] - } - } - Row { - spacing: 20 - width: parent.width - anchors.margins: 5 - Button { - id: tiltStart - height: 30 - width: 80 - text: tilt.active ? "Stop" : "Start" - onClicked: { - //! [2] - tilt.active = (tiltStart.text === "Start"); - //! [2] - } - } - Text { - id: yrottext - height: 30 - verticalAlignment: Text.AlignVCenter - //! [4] - text: "Y Rotation: " + (tilt.reading ? tilt.reading.yRotation.toFixed(2) + "°" : "Unknown") - //! [4] - } - } - - Divider { label: "AmbientLightSensor" } - - Row { - spacing: 20 - width: parent.width - anchors.margins: 5 - - Button{ - id: ambientlightStart - height: 30 - width: 80 - text: ambientlight.active ? "Stop" : "Start" - onClicked: { - ambientlight.active = (ambientlightStart.text === "Start" ? true : false); - } - } - - Text { - id: ambientlighttext - height: 30 - verticalAlignment: Text.AlignVCenter - text: "Ambient light: Unknown" - } - } - - // Proximity region - Divider { label: "ProximitySensor" } - - Row { - spacing: 20 - width: parent.width - anchors.margins: 5 - - Button { - id: proxiStart - height: 30 - width: 80 - text: proxi.active ? "Stop" : "Start" - - onClicked: { - proxi.active = (proxiStart.text === "Start" ? true: false); - } - } - - Text { - id: proxitext - height: 30 - verticalAlignment: Text.AlignVCenter - //! [6] - text: "Proximity: " + - (proxi.active ? (proxi.reading.near ? "Near" : "Far") : "Unknown") - //! [6] - } - } - } -} diff --git a/examples/sensors/qmlqtsensors/qmlqtsensors.qrc b/examples/sensors/qmlqtsensors/qmlqtsensors.qrc deleted file mode 100644 index 4ba06dad..00000000 --- a/examples/sensors/qmlqtsensors/qmlqtsensors.qrc +++ /dev/null @@ -1,11 +0,0 @@ -<RCC> - <qresource prefix="/"> - <file>qmlqtsensors.qml</file> - <file>components/ApplicationWindow.qml</file> - <file>components/Button.qml</file> - <file>components/images/button_background_disabled.png</file> - <file>components/images/button_background_normal.png</file> - <file>components/images/button_background_pressed.png</file> - <file>components/Divider.qml</file> - </qresource> -</RCC> diff --git a/examples/sensors/sensor_explorer/CMakeLists.txt b/examples/sensors/sensor_explorer/CMakeLists.txt deleted file mode 100644 index 33fc7ea8..00000000 --- a/examples/sensors/sensor_explorer/CMakeLists.txt +++ /dev/null @@ -1,44 +0,0 @@ -# Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: BSD-3-Clause - -cmake_minimum_required(VERSION 3.16) -project(sensor_explorer LANGUAGES CXX) - -set(CMAKE_AUTOMOC ON) - -if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") -endif() - -set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/sensors/sensor_explorer") - -find_package(Qt6 REQUIRED COMPONENTS Qml Quick Sensors) - -qt_add_executable(sensor_explorer - main.cpp - sensormodels.cpp sensormodels.h -) - -set_target_properties(sensor_explorer PROPERTIES - WIN32_EXECUTABLE TRUE - MACOSX_BUNDLE TRUE -) - -target_link_libraries(sensor_explorer PUBLIC - Qt::Qml - Qt::Quick - Qt::Sensors -) - -qt_add_qml_module(sensor_explorer - URI SensorModels - VERSION 1.0 - QML_FILES sensor_explorer.qml - NO_RESOURCE_TARGET_PATH -) - -install(TARGETS sensor_explorer - RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" - BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" - LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" -) diff --git a/examples/sensors/sensor_explorer/doc/images/qtsensors-examples-sensor-explorer.png b/examples/sensors/sensor_explorer/doc/images/qtsensors-examples-sensor-explorer.png Binary files differdeleted file mode 100644 index 830f9597..00000000 --- a/examples/sensors/sensor_explorer/doc/images/qtsensors-examples-sensor-explorer.png +++ /dev/null diff --git a/examples/sensors/sensor_explorer/doc/src/sensor_explorer.qdoc b/examples/sensors/sensor_explorer/doc/src/sensor_explorer.qdoc deleted file mode 100644 index f4d7c6bc..00000000 --- a/examples/sensors/sensor_explorer/doc/src/sensor_explorer.qdoc +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only - -/*! - \example sensor_explorer - \title Qt Sensors - Explorer QML Example - \ingroup qtsensors-examples - \brief Demonstrates how to read the meta-data of available sensors. - - \image qtsensors-examples-sensor-explorer.png - - The example is implemented as a typical model-view application. The - models are written with C++ and exposed to QML, and the views are - implemented as QML types in the QML application. - - \section1 Exposing and Importing the Models - - The QML models written in C++ are exposed in the project build files - as a \c SensorModels QML module. - - \e CMake: - \code - qt_add_qml_module(sensor_explorer - URI SensorModels - VERSION 1.0 - ) - \endcode - - \e qmake: - \code - CONFIG += qmltypes - QML_IMPORT_NAME = SensorModels - QML_IMPORT_MAJOR_VERSION = 1 - \endcode - - The individual model elements are exposed as part of the model - code by using the \c QML_ELEMENT macro as illustrated here: - \snippet sensor_explorer/sensormodels.h 0 - - To access the models in the QML application, the module is imported - by the application QML: - \snippet sensor_explorer/sensor_explorer.qml 0 - - \section1 Populating the Model of Available Sensors - - The \c AvailableSensorsModel is a list model that provides information on - available sensors on the device. The model is populated once at the - element's construction time: - - \snippet sensor_explorer/sensormodels.cpp 0 - - The model's \c data() function returns a pointer to the requested sensor - object. - - \snippet sensor_explorer/sensormodels.cpp 1 - - Since the sensor (QSensor) is a QObject, the QML is then able to directly - access all metaproperties and -functions directly. - - \note It would be possible to refresh the sensor list later at will, but for - the simplicity of the example such functionality is not exposed to QML. - - \section1 Populating the Model of Sensor Properties - - The \c SensorPropertyModel is a table model that provides individual - sensor's property-value pairs as columns. The column \c 0 provides the - property's name and the column \c 1 provides the property's value. The - population of the properties is done by reading the metadata of the sensors. - The model reads both the sensor's metadata as well as the sensor's reading's - metadata. The code below illustrates the reading of the \c reading metadata: - - \snippet sensor_explorer/sensormodels.cpp 2 - - This metadata access allows providing the model data for all sensors - without prior compile-time understanding of their properties. - - Once the metadata is set, the code then subscribes to the - QSensor::readingChanged() signal to detect sensor reading changes. - Upon such changes (for example a rotation value changes), the model data - is updated accordingly. - - \section1 Viewing the Models - - The QML application is based on two views. The first view shows the available - sensors as a selectable list. The second view shows the selected sensor's - properties and their values. The delegates for viewing the individual items - are simplistic \e {rectangle and text} items. - - Binding the two views functionally together is done by binding the property - model's \c sensor property to the current selection of the available sensors - model: - - \snippet sensor_explorer/sensor_explorer.qml 1 - - When the selected sensor changes, the \c sensor of the property model changes - accordingly. - - The following snippet illustrates how the property view is implemented. For - more details about QML models and views, please see - \l{Models and Views in Qt Quick}. - - \snippet sensor_explorer/sensor_explorer.qml 3 - - For clarity it should be mentioned that the \c display attribute used by - the text element refers to the Qt::DisplayRole role of the model, which is - provided by default by Qt models. - - \section1 Activating the Sensors - - The example has a button for activating and deactivating the currently - selected sensor. The button is enabled only if a sensor is currently - selected, as illustrated below. - - \snippet sensor_explorer/sensor_explorer.qml 2 - - On clicking the button, the sensor's active property is toggled on/off. - -*/ diff --git a/examples/sensors/sensor_explorer/sensor_explorer.pro b/examples/sensors/sensor_explorer/sensor_explorer.pro deleted file mode 100644 index a27681e2..00000000 --- a/examples/sensors/sensor_explorer/sensor_explorer.pro +++ /dev/null @@ -1,22 +0,0 @@ -TEMPLATE = app -TARGET = sensor_explorer -QT += qml quick sensors - -# Avoid going to release/debug subdirectory -win32: DESTDIR = ./ - -SOURCES = main.cpp sensormodels.cpp -HEADERS = sensormodels.h - -CONFIG += qmltypes -QML_IMPORT_NAME = SensorModels -QML_IMPORT_MAJOR_VERSION = 1 - -OTHER_FILES = \ - sensor_explorer.qml - -target.path = $$[QT_INSTALL_EXAMPLES]/sensors/sensor_explorer -INSTALLS += target - -RESOURCES += \ - qml.qrc diff --git a/examples/sensors/sensors.pro b/examples/sensors/sensors.pro index 1b637bac..d304cbd9 100644 --- a/examples/sensors/sensors.pro +++ b/examples/sensors/sensors.pro @@ -1,16 +1,5 @@ TEMPLATE = subdirs -SUBDIRS += grue - -qtHaveModule(quick) { - SUBDIRS += \ - maze \ - qmlqtsensors \ - sensor_explorer - - qtHaveModule(svg): SUBDIRS += \ - accelbubble +qtHaveModule(quick): qtHaveModule(svg): { + SUBDIRS += sensorsshowcase } - -EXAMPLE_FILES += \ - stub.h diff --git a/examples/sensors/sensorsshowcase/Accelerometer.qml b/examples/sensors/sensorsshowcase/Accelerometer.qml new file mode 100644 index 00000000..a22e1404 --- /dev/null +++ b/examples/sensors/sensorsshowcase/Accelerometer.qml @@ -0,0 +1,70 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +pragma ComponentBehavior: Bound +import QtQuick +import QtQuick.Layouts +import QtSensors + +Item { + id: root + + required property int fontSize + required property int imageSize + + //! [0] + Accelerometer { + id: accelerometer + + property real x: 0 + property real y: 0 + property real z: 0 + + active: true + dataRate: 25 + + onReadingChanged: { + x = (reading as AccelerometerReading).x + y = (reading as AccelerometerReading).y + z = (reading as AccelerometerReading).z + imageTranslation.x = -x * 10 + imageTranslation.y = y * 10 + } + } + //! [0] + ColumnLayout { + id: layout + + anchors.fill: parent + spacing: 10 + + Image { + id: image + + Layout.alignment: Qt.AlignCenter + Layout.preferredHeight: root.imageSize + Layout.preferredWidth: root.imageSize + fillMode: Image.PreserveAspectFit + source: "images/qt_logo.png" + + transform: [ + Translate { + id: imageTranslation + + x: 0 + y: 0 + } + ] + } + + ProgressXYZBar { + Layout.fillWidth: true + fontSize: root.fontSize + xText: "X: " + accelerometer.x.toFixed(2) + xValue: 0.5 + (accelerometer.x / 100) + yText: "Y: " + accelerometer.y.toFixed(2) + yValue: 0.5 + (accelerometer.y / 100) + zText: "Z: " + accelerometer.z.toFixed(2) + zValue: 0.5 + (accelerometer.z / 100) + } + } +} diff --git a/examples/sensors/sensorsshowcase/CMakeLists.txt b/examples/sensors/sensorsshowcase/CMakeLists.txt index eb27f7ef..b949213a 100644 --- a/examples/sensors/sensorsshowcase/CMakeLists.txt +++ b/examples/sensors/sensorsshowcase/CMakeLists.txt @@ -1,18 +1,16 @@ -# Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: BSD-3-Clause +# Copyright (C) 2023 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause cmake_minimum_required(VERSION 3.16) project(sensorsshowcase LANGUAGES CXX) -set(CMAKE_AUTOMOC ON) - if(NOT DEFINED INSTALL_EXAMPLESDIR) set(INSTALL_EXAMPLESDIR "examples") endif() set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/sensors/sensorsshowcase") - -find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick Sensors Svg) +find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick Svg Sensors) +qt_standard_project_setup(REQUIRES 6.5) qt_add_executable(sensorsshowcase main.cpp @@ -26,43 +24,47 @@ set_target_properties(sensorsshowcase PROPERTIES if(ANDROID) set_property(TARGET sensorsshowcase PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/android) - endif() -if(APPLE) - if(IOS) - set_property(TARGET sensorsshowcase PROPERTY - MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist" - ) - endif() endif() -target_link_libraries(sensorsshowcase PUBLIC - Qt::Core - Qt::Gui - Qt::Quick - Qt::Sensors - Qt::Svg -) +if(APPLE AND IOS) + set_property(TARGET sensorsshowcase PROPERTY + MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist" + ) +else() + # default search path for the config file is "qrc:/" + qt_add_resources(sensorsshowcase "resources" + FILES qtquickcontrols2.conf) +endif() -# Resources: -set(sensorsshowcase_resource_files - "sensorsshowcase.qml" - "accelerometer.qml" - "proximity.qml" - "compass.qml" - "magnetometer.qml" - "gyroscope.qml" - "images/magnet.svg" - "images/compass.svg" - "images/qt_logo.png" +qt_add_qml_module(sensorsshowcase + URI SensorShowcaseModule + VERSION 1.0 + QML_FILES + "Main.qml" + "Accelerometer.qml" + "Compass.qml" + "Gyroscope.qml" + "Magnetometer.qml" + "Proximity.qml" + "ProgressXYZBar.qml" + RESOURCES + "images/compass.svg" + "images/magnet.svg" + "images/qt_logo.png" + SOURCES + sensorsupport.h ) -qt6_add_resources(sensorsshowcase "sensorsshowcase" - PREFIX - "/" - FILES - ${sensorsshowcase_resource_files} +target_link_libraries(sensorsshowcase + PRIVATE + Qt::Core + Qt::Gui + Qt::Quick + Qt::Svg + Qt::Sensors ) + install(TARGETS sensorsshowcase RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" diff --git a/examples/sensors/sensorsshowcase/Compass.qml b/examples/sensors/sensorsshowcase/Compass.qml new file mode 100644 index 00000000..b4bc5ff1 --- /dev/null +++ b/examples/sensors/sensorsshowcase/Compass.qml @@ -0,0 +1,61 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +pragma ComponentBehavior: Bound +import QtQuick +import QtQuick.Layouts +import QtSensors + +Item { + id: root + + required property int fontSize + required property int imageSize + property alias isActive: compass.active + + property real azimuth: 30 + + Compass { + id: compass + active: true + dataRate: 7 + onReadingChanged: root.azimuth = -(reading as CompassReading).azimuth + } + + ColumnLayout { + id: layout + + anchors.fill: parent + spacing: 10 + + Image { + id: arrow + + Layout.alignment: Qt.AlignHCenter + Layout.preferredWidth: root.imageSize * 1.25 + Layout.fillHeight: true + + source: "images/compass.svg" + fillMode: Image.PreserveAspectFit + rotation: root.azimuth + } + + Rectangle { + id: separator + + Layout.topMargin: 10 + Layout.preferredWidth: parent.width * 0.75 + Layout.preferredHeight: 1 + Layout.alignment: Qt.AlignHCenter + color: "black" + } + + Text { + id: info + Layout.fillWidth: true + Layout.fillHeight: true + Layout.topMargin: 10 + text: "Azimuth: " + root.azimuth.toFixed(2) + "°" + font.pixelSize: root.fontSize + } + } +} diff --git a/examples/sensors/sensorsshowcase/Gyroscope.qml b/examples/sensors/sensorsshowcase/Gyroscope.qml new file mode 100644 index 00000000..9f0ffd2f --- /dev/null +++ b/examples/sensors/sensorsshowcase/Gyroscope.qml @@ -0,0 +1,128 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +pragma ComponentBehavior: Bound +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts +import QtSensors + +Item { + id: root + + required property int fontSize + required property int imageSize + + function resetRotations() : void + { + imageXRotation.angle = 0 + imageYRotation.angle = 0 + imageZRotation.angle = 0 + } + + //! [0] + Gyroscope { + id: gyroscope + + property var lastTimeStamp: 0 + property real x: 0 + property real y: 0 + property real z: 0 + + active: true + dataRate: 25 + + onReadingChanged: { + x = (reading as GyroscopeReading).x + y = (reading as GyroscopeReading).y + z = (reading as GyroscopeReading).z + let firstCall = false + if (lastTimeStamp == 0) { + firstCall = true + } + let timeSinceLast = reading.timestamp - lastTimeStamp + lastTimeStamp = reading.timestamp + + //Skipping the initial time jump from 0 + if (firstCall === true) + return + let normalizedX = x * (timeSinceLast / 1000000) + imageXRotation.angle += normalizedX + let normalizedY = y * (timeSinceLast / 1000000) + imageYRotation.angle -= normalizedY + let normalizedZ = z * (timeSinceLast / 1000000) + imageZRotation.angle += normalizedZ + } + } + //! [0] + ColumnLayout { + id: layout + + anchors.fill: parent + spacing: 10 + + Image { + id: image + + Layout.alignment: Qt.AlignHCenter + Layout.fillHeight: true + Layout.preferredWidth: root.imageSize + fillMode: Image.PreserveAspectFit + source: "images/qt_logo.png" + + transform: [ + Rotation { + id: imageXRotation + + angle: 0 + axis.x: 1 + axis.y: 0 + axis.z: 0 + origin.x: layout.width / 2 + origin.y: layout.height / 3 + }, + Rotation { + id: imageYRotation + + angle: 0 + axis.x: 0 + axis.y: 1 + axis.z: 0 + origin.x: layout.width / 2 + origin.y: layout.height / 3 + }, + Rotation { + id: imageZRotation + + angle: 0 + axis.x: 0 + axis.y: 0 + axis.z: 1 + origin.x: layout.width / 2 + origin.y: layout.height / 3 + } + ] + } + + ProgressXYZBar { + Layout.fillWidth: true + Layout.topMargin: 20 + fontSize: root.fontSize + xText: "X: " + gyroscope.x.toFixed(2) + xValue: 0.5 + (gyroscope.x / 1000) + yText: "Y: " + gyroscope.y.toFixed(2) + yValue: 0.5 + (gyroscope.y / 1000) + zText: "Z: " + gyroscope.z.toFixed(2) + zValue: 0.5 + (gyroscope.z / 1000) + } + + Button { + Layout.alignment: Qt.AlignHCenter + Layout.topMargin: 20 + Layout.bottomMargin: 10 + Layout.preferredWidth: parent.width / 2 + Layout.preferredHeight: 60 + onClicked: root.resetRotations() + text: "Reset rotation" + } + } +} diff --git a/examples/sensors/sensorsshowcase/Magnetometer.qml b/examples/sensors/sensorsshowcase/Magnetometer.qml new file mode 100644 index 00000000..551f8627 --- /dev/null +++ b/examples/sensors/sensorsshowcase/Magnetometer.qml @@ -0,0 +1,68 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +pragma ComponentBehavior: Bound +import QtQuick +import QtQuick.Layouts +import QtSensors + +Item { + id: root + + required property int fontSize + required property int imageSize + + property real magnetRotation: 40 + property real magnetometerX: 0 + property real magnetometerY: 0 + property real magnetometerZ: 0 + property int barScaleFactor: 10000 + + //! [0] + Magnetometer { + id: magnetometer + active: true + dataRate: 25 + onReadingChanged: { + root.magnetometerX = (reading as MagnetometerReading).x + root.magnetometerY = (reading as MagnetometerReading).y + root.magnetometerZ = (reading as MagnetometerReading).z + root.magnetRotation = + ((Math.atan2(root.magnetometerX, root.magnetometerY) / Math.PI) * 180) + } + } + //! [0] + + ColumnLayout { + id: layout + + anchors.fill: parent + spacing: 10 + + Image { + id: image + + Layout.alignment: Qt.AlignHCenter + Layout.bottomMargin: 20 + Layout.preferredWidth: root.imageSize * 0.9 + Layout.preferredHeight: root.imageSize * 0.9 + + source: "images/magnet.svg" + fillMode: Image.PreserveAspectFit + rotation: root.magnetRotation + } + + ProgressXYZBar { + Layout.fillWidth: true + fontSize: root.fontSize + + xText: "X: " + root.magnetometerX.toFixed(9) + xValue: 0.5 + (root.magnetometerX * root.barScaleFactor) + + yText: "Y: " + root.magnetometerY.toFixed(9) + yValue: 0.5 + (root.magnetometerY * root.barScaleFactor) + + zText: "Z: " + root.magnetometerZ.toFixed(9) + zValue: 0.5 + (root.magnetometerZ * root.barScaleFactor) + } + } +} diff --git a/examples/sensors/sensorsshowcase/Main.qml b/examples/sensors/sensorsshowcase/Main.qml new file mode 100644 index 00000000..4587ba21 --- /dev/null +++ b/examples/sensors/sensorsshowcase/Main.qml @@ -0,0 +1,116 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +pragma ComponentBehavior: Bound + +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts + +ApplicationWindow { + id: root + + readonly property int defaultFontSize: 22 + readonly property int imageSize: width / 2 + + width: 420 + height: 760 + visible: true + title: "Sensors Showcase" + + header : ToolBar { + RowLayout { + anchors.fill: parent + anchors.leftMargin: 10 + anchors.rightMargin: 10 + ToolButton { + id: back + text: qsTr("Back") + font.pixelSize: root.defaultFontSize - 4 + visible: stack.depth > 1 + onClicked: { + stack.pop(); + heading.text = root.title; + } + Layout.alignment: Qt.AlignLeft + } + Label { + id: heading + text: root.title + font.pixelSize: root.defaultFontSize + font.weight: Font.Medium + verticalAlignment: Qt.AlignVCenter + Layout.alignment: Qt.AlignCenter + Layout.preferredHeight: 55 + } + Item { + visible: back.visible + Layout.preferredWidth: back.width + } + } + } + + StackView { + id: stack + + // Pushes the object and forwards the properties + function pusher(object : string) : void { + // Trim the suffix and set it as new heading + heading.text = object.split(".")[0] + return stack.push(object, { + fontSize: root.defaultFontSize, + imageSize: root.imageSize + }) + } + + anchors.fill: parent + anchors.margins: width / 12 + + initialItem: Item { + ColumnLayout { + id: initialItem + + anchors.fill: parent + anchors.topMargin: 20 + anchors.bottomMargin: 20 + spacing: 5 + + component CustomButton: Button { + highlighted: true + font.pixelSize: root.defaultFontSize + font.letterSpacing: 1.5 + + Layout.alignment: Qt.AlignCenter + Layout.fillHeight: true + Layout.fillWidth: true + } + + CustomButton { + text: "Accelerometer" + onClicked: stack.pusher("Accelerometer.qml") + enabled: SensorSupport.hasAccelerometer() + } + CustomButton { + text: "Proximity" + onClicked: stack.pusher("Proximity.qml") + enabled: SensorSupport.hasProximity() + } + CustomButton { + text: "Compass" + onClicked: stack.pusher("Compass.qml") + enabled: SensorSupport.hasCompass() + } + CustomButton { + text: "Magnetometer" + onClicked: stack.pusher("Magnetometer.qml") + enabled: SensorSupport.hasMagnetometer() + } + CustomButton { + text: "Gyroscope" + onClicked: stack.pusher("Gyroscope.qml") + enabled: SensorSupport.hasGyroscope() + } + } + } + } + +} diff --git a/examples/sensors/sensorsshowcase/ProgressXYZBar.qml b/examples/sensors/sensorsshowcase/ProgressXYZBar.qml new file mode 100644 index 00000000..be7bf7ae --- /dev/null +++ b/examples/sensors/sensorsshowcase/ProgressXYZBar.qml @@ -0,0 +1,45 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +pragma ComponentBehavior: Bound +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts + +ColumnLayout { + id: root + spacing: 0 + + required property int fontSize + property alias xText: xBar.text + property alias xValue: xBar.value + property alias yText: yBar.text + property alias yValue: yBar.value + property alias zText: zBar.text + property alias zValue: zBar.value + + component NamedProgressBar: ColumnLayout { + property alias text: axes.text + property alias value: bar.value + Text { + id: axes + font.pixelSize: root.fontSize + Layout.fillWidth: true + } + ProgressBar { + id: bar + Layout.fillWidth: true + } + } + + NamedProgressBar { + id: xBar + } + + NamedProgressBar { + id: yBar + } + + NamedProgressBar { + id: zBar + } +} diff --git a/examples/sensors/sensorsshowcase/Proximity.qml b/examples/sensors/sensorsshowcase/Proximity.qml new file mode 100644 index 00000000..41121983 --- /dev/null +++ b/examples/sensors/sensorsshowcase/Proximity.qml @@ -0,0 +1,55 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +pragma ComponentBehavior: Bound +import QtQuick +import QtQuick.Layouts +import QtSensors + +Item { + id: root + + required property int imageSize + required property int fontSize + + property bool near: false + + ProximitySensor { + id: proximity + onReadingChanged: root.near = (reading as ProximityReading).near + active: true + } + + ColumnLayout { + id: layout + + anchors.fill: parent + spacing: 10 + + Image { + id: image + + Layout.alignment: Qt.AlignHCenter + Layout.preferredWidth: root.near ? root.imageSize : root.imageSize * 0.75 + Layout.fillHeight: true + + source: "images/qt_logo.png" + fillMode: Image.PreserveAspectFit + } + + Rectangle { + id: separator + Layout.topMargin: 10 + Layout.bottomMargin: 10 + Layout.preferredWidth: parent.width * 0.75 + Layout.preferredHeight: 1 + Layout.alignment: Qt.AlignHCenter + color: "black" + } + + Text { + Layout.fillHeight: true + font.pixelSize: root.fontSize + text: "Near: " + root.near + } + } +} diff --git a/examples/sensors/sensorsshowcase/accelerometer.qml b/examples/sensors/sensorsshowcase/accelerometer.qml deleted file mode 100644 index e4f6e39b..00000000 --- a/examples/sensors/sensorsshowcase/accelerometer.qml +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -import QtQuick -import QtQuick.Controls -import QtQuick.Layouts -import QtSensors - -Rectangle { - id: root - color: "dimgray" - - function resetRotations() { - imageXRotation.angle = 0 - imageYRotation.angle = 0 - imageZRotation.angle = 0 - } - -//! [0] - Accelerometer { - id: accelerometer - active: true - dataRate: 25 - - property real x: 0 - property real y: 0 - property real z: 0 - - onReadingChanged: { - x = reading.x - y = reading.y - z = reading.z - - imageTranslation.x = -reading.x * 10 - imageTranslation.y = reading.y * 10 - } - } -//! [0] - - ColumnLayout { - anchors.fill: parent - id: layout - - Text { - Layout.topMargin: titleTopMargin - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter - Layout.preferredHeight: textHeight - color: "White" - text: "Accelerometer" - font.pixelSize: titleFontSize - } - - Image { - id: image - Layout.alignment: Qt.AlignCenter - Layout.fillHeight: true - Layout.preferredWidth: root.width/2 - Layout.preferredHeight: root.height/3 - source: "qrc:/images/qt_logo.png" - fillMode: Image.PreserveAspectFit - - transform: [ - Translate { - id: imageTranslation - x: 0 - y: 0 - } - ] - } - - Text { - Layout.preferredWidth: root.width - Layout.preferredHeight: textHeight - Layout.leftMargin: layout.spacing - color: "White" - text: "X: " + accelerometer.x.toFixed(2) - font.pixelSize: textFontSize - } - - ProgressBar { - id: xbar - value: 0.5 + (accelerometer.x / 100) - Layout.preferredWidth: root.width - } - - Text { - Layout.preferredWidth: root.width - Layout.preferredHeight: textHeight - Layout.leftMargin: layout.spacing - color: "White" - text: "Y: " + accelerometer.y.toFixed(2) - font.pixelSize: textFontSize - } - ProgressBar { - id: ybar - value: 0.5 + (accelerometer.y / 100) - Layout.preferredWidth: root.width - } - Text { - Layout.preferredWidth: root.width - Layout.preferredHeight: textHeight - Layout.leftMargin: layout.spacing - color: "White" - text: "Z: " + accelerometer.z.toFixed(2) - font.pixelSize: textFontSize - } - ProgressBar { - id: zbar - value: 0.5 + (accelerometer.z / 100) - Layout.preferredWidth: root.width - } - Button { - Layout.alignment: Qt.AlignBottom - Layout.preferredWidth: root.width - Layout.preferredHeight: buttonHeight - text:"Back" - font.pixelSize: buttonFontSize - onClicked:stack.pop() - } - } -} - diff --git a/examples/sensors/sensorsshowcase/android/AndroidManifest.xml b/examples/sensors/sensorsshowcase/android/AndroidManifest.xml index 3c152a90..359c0114 100644 --- a/examples/sensors/sensorsshowcase/android/AndroidManifest.xml +++ b/examples/sensors/sensorsshowcase/android/AndroidManifest.xml @@ -11,7 +11,6 @@ <!-- The comment below will be replaced with dependencies permissions upon deployment. Remove the comment if you do not require these default features. --> <!-- %%INSERT_FEATURES --> - <supports-screens android:anyDensity="true" android:largeScreens="true" @@ -22,26 +21,37 @@ android:extractNativeLibs="true" android:hardwareAccelerated="true" android:label="-- %%INSERT_APP_NAME%% --" - android:requestLegacyExternalStorage="true"> + android:requestLegacyExternalStorage="true" + android:allowNativeHeapPointerTagging="false" + android:allowBackup="true" + android:fullBackupOnly="false" + android:icon="@drawable/icon"> <activity android:name="org.qtproject.qt.android.bindings.QtActivity" android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density" android:label="-- %%INSERT_APP_NAME%% --" android:launchMode="singleTop" - android:screenOrientation="portrait"> + android:screenOrientation="portrait" + android:exported="true"> <intent-filter> - <action android:name="android.intent.action.MAIN"/> - <category android:name="android.intent.category.LAUNCHER"/> + <action android:name="android.intent.action.MAIN" /> + <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> + <meta-data android:name="android.app.lib_name" android:value="-- %%INSERT_APP_LIB_NAME%% --" /> - <meta-data - android:name="android.app.background_running" - android:value="false" /> + + <meta-data android:name="android.app.arguments" + android:value="" /> + <meta-data android:name="android.app.extract_android_style" android:value="minimal" /> + + <meta-data + android:name="android.app.background_running" + android:value="false" /> </activity> </application> </manifest> diff --git a/examples/sensors/sensorsshowcase/android/res/drawable-hdpi/icon.png b/examples/sensors/sensorsshowcase/android/res/drawable-hdpi/icon.png Binary files differnew file mode 100644 index 00000000..5f61088b --- /dev/null +++ b/examples/sensors/sensorsshowcase/android/res/drawable-hdpi/icon.png diff --git a/examples/sensors/sensorsshowcase/android/res/drawable-ldpi/icon.png b/examples/sensors/sensorsshowcase/android/res/drawable-ldpi/icon.png Binary files differnew file mode 100644 index 00000000..605497de --- /dev/null +++ b/examples/sensors/sensorsshowcase/android/res/drawable-ldpi/icon.png diff --git a/examples/sensors/sensorsshowcase/android/res/drawable-mdpi/icon.png b/examples/sensors/sensorsshowcase/android/res/drawable-mdpi/icon.png Binary files differnew file mode 100644 index 00000000..3eb10832 --- /dev/null +++ b/examples/sensors/sensorsshowcase/android/res/drawable-mdpi/icon.png diff --git a/examples/sensors/sensorsshowcase/android/res/drawable-xhdpi/icon.png b/examples/sensors/sensorsshowcase/android/res/drawable-xhdpi/icon.png Binary files differnew file mode 100644 index 00000000..a9e39f88 --- /dev/null +++ b/examples/sensors/sensorsshowcase/android/res/drawable-xhdpi/icon.png diff --git a/examples/sensors/sensorsshowcase/android/res/drawable-xxhdpi/icon.png b/examples/sensors/sensorsshowcase/android/res/drawable-xxhdpi/icon.png Binary files differnew file mode 100644 index 00000000..b489d81e --- /dev/null +++ b/examples/sensors/sensorsshowcase/android/res/drawable-xxhdpi/icon.png diff --git a/examples/sensors/sensorsshowcase/android/res/drawable-xxxhdpi/icon.png b/examples/sensors/sensorsshowcase/android/res/drawable-xxxhdpi/icon.png Binary files differnew file mode 100644 index 00000000..9443da63 --- /dev/null +++ b/examples/sensors/sensorsshowcase/android/res/drawable-xxxhdpi/icon.png diff --git a/examples/sensors/sensorsshowcase/compass.qml b/examples/sensors/sensorsshowcase/compass.qml deleted file mode 100644 index 65ea3543..00000000 --- a/examples/sensors/sensorsshowcase/compass.qml +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -import QtQuick -import QtQuick.Controls -import QtQuick.Layouts -import QtSensors - -Rectangle { - id: root - color: "dimgray" - property real azimuth: 30 - readonly property real buttonHeight: height/8 - - Compass { - id: compass - active: true - dataRate: 7 - onReadingChanged: { - root.azimuth = -reading.azimuth - } - } - - ColumnLayout { - anchors.fill: parent - id: layout - - Text { - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter - Layout.preferredHeight: titleHeight - Layout.topMargin: titleTopMargin - verticalAlignment: Text.AlignVCenter - color: "White" - text: "Compass" - font.pixelSize: titleFontSize - } - Image { - Layout.alignment: Qt.AlignCenter - Layout.fillHeight: true - Layout.preferredWidth: root.width - Layout.preferredHeight: root.height - id: arrow - source: "qrc:/images/compass.svg" - fillMode: Image.PreserveAspectFit - rotation:root.azimuth - } - Text { - Layout.preferredWidth: root.width - Layout.preferredHeight: textHeight - Layout.leftMargin: layout.spacing - color: "White" - text: "Azimuth: " + root.azimuth.toFixed(2) + "°" - font.pixelSize: textFontSize - } - Button { - Layout.alignment: Qt.AlignBottom - Layout.preferredWidth: root.width - Layout.preferredHeight: buttonHeight - text:"Back" - font.pixelSize: buttonFontSize - onClicked:stack.pop() - } - } -} diff --git a/examples/sensors/sensorsshowcase/doc/images/sensorsshowcase-gyroscope.png b/examples/sensors/sensorsshowcase/doc/images/sensorsshowcase-gyroscope.png Binary files differdeleted file mode 100644 index b26aa459..00000000 --- a/examples/sensors/sensorsshowcase/doc/images/sensorsshowcase-gyroscope.png +++ /dev/null diff --git a/examples/sensors/sensorsshowcase/doc/images/sensorsshowcase-gyroscope.webp b/examples/sensors/sensorsshowcase/doc/images/sensorsshowcase-gyroscope.webp Binary files differnew file mode 100644 index 00000000..0ff45403 --- /dev/null +++ b/examples/sensors/sensorsshowcase/doc/images/sensorsshowcase-gyroscope.webp diff --git a/examples/sensors/sensorsshowcase/doc/images/sensorsshowcase-mainview.png b/examples/sensors/sensorsshowcase/doc/images/sensorsshowcase-mainview.png Binary files differdeleted file mode 100644 index 838b39c9..00000000 --- a/examples/sensors/sensorsshowcase/doc/images/sensorsshowcase-mainview.png +++ /dev/null diff --git a/examples/sensors/sensorsshowcase/doc/images/sensorsshowcase-mainview.webp b/examples/sensors/sensorsshowcase/doc/images/sensorsshowcase-mainview.webp Binary files differnew file mode 100644 index 00000000..b045b7ba --- /dev/null +++ b/examples/sensors/sensorsshowcase/doc/images/sensorsshowcase-mainview.webp diff --git a/examples/sensors/sensorsshowcase/doc/src/sensorsshowcase.qdoc b/examples/sensors/sensorsshowcase/doc/src/sensorsshowcase.qdoc index b2971f01..d3d31c34 100644 --- a/examples/sensors/sensorsshowcase/doc/src/sensorsshowcase.qdoc +++ b/examples/sensors/sensorsshowcase/doc/src/sensorsshowcase.qdoc @@ -1,13 +1,15 @@ -// Copyright (C) 2021 The Qt Company Ltd. +// Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only /*! \example sensorsshowcase - \title Qt Sensors - Sensors Showcase + \title Sensors Showcase \brief The Sensors Showcase example demonstrates sensor usage with visual examples. + \meta tag {sensors,quick,mobile} \ingroup qtsensors-examples + \examplecategory {Mobile} - \image sensorsshowcase-mainview.png + \image sensorsshowcase-mainview.webp \section1 Overview @@ -17,9 +19,14 @@ \section1 Main Menu - The main view shows the title with the name of the application and a button for each - subview laid out evenly by a \c ColumnLayout. The navigation between the subviews - and the main menu is managed by a \c StackView. + The main view shows the title with the name of the application and a button + for each subview laid out evenly by a \c ColumnLayout. A \c StackView + manages the navigation between the subviews and the main menu. The + application checks the availability of the sensors during startup and + disables the buttons for the sensors that are not available. + + \note To simplify the example, the sensor availability is checked only once + during the startup. \section1 Accelerometer View @@ -29,7 +36,7 @@ Moving around the image happens in the accelerometer \c onReadingChanged method. - \snippet sensorsshowcase/accelerometer.qml 0 + \snippet sensorsshowcase/Accelerometer.qml 0 Whenever there is a new accelerometer value the image translation coordinates are updated accordingly. @@ -52,11 +59,11 @@ case of how the magnetometer readings can be used. Since the magnetometer provides readings along all three axes, there is more freedom with how these readings can be used. - \snippet sensorsshowcase/magnetometer.qml 0 + \snippet sensorsshowcase/Magnetometer.qml 0 \section1 Gyroscope View - \image sensorsshowcase-gyroscope.png + \image sensorsshowcase-gyroscope.webp The gyroscope view also shows an image that is rotated around three axes with an amount that is calculated from the gyroscope readings. Since the gyroscope provides relative @@ -64,7 +71,7 @@ can vary, the time of the readings are stored and the rotational change is normalized based on the time passed between reading updates. - \snippet sensorsshowcase/gyroscope.qml 0 + \snippet sensorsshowcase/Gyroscope.qml 0 By pressing the reset button the image rotation is reset to 0. */ diff --git a/examples/sensors/sensorsshowcase/gyroscope.qml b/examples/sensors/sensorsshowcase/gyroscope.qml deleted file mode 100644 index 39252c0e..00000000 --- a/examples/sensors/sensorsshowcase/gyroscope.qml +++ /dev/null @@ -1,174 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -import QtQuick -import QtQuick.Controls -import QtQuick.Layouts -import QtSensors - -Rectangle { - id: root - color: "dimgray" - - function resetRotations() { - imageXRotation.angle = 0 - imageYRotation.angle = 0 - imageZRotation.angle = 0 - } - -//! [0] - Gyroscope { - id: gyroscope - active: true - dataRate: 25 - - property variant lastTimeStamp: 0 - - property real x: 0 - property real y: 0 - property real z: 0 - - onReadingChanged: { - - x = reading.x - y = reading.y - z = reading.z - - var firstCall = false - if (lastTimeStamp == 0) { - firstCall = true - } - - var timeSinceLast = reading.timestamp - lastTimeStamp - lastTimeStamp = reading.timestamp - - //Skipping the initial time jump from 0 - if (firstCall === true) return - - var normalizedX = reading.x * (timeSinceLast/1000000) - imageXRotation.angle += normalizedX - - var normalizedY = reading.y * (timeSinceLast/1000000) - imageYRotation.angle -= normalizedY - - var normalizedZ = reading.z * (timeSinceLast/1000000) - imageZRotation.angle += normalizedZ - } - } -//! [0] - - ColumnLayout { - anchors.fill: parent - id: layout - - Text { - Layout.topMargin: titleTopMargin - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter - Layout.preferredHeight: textHeight - color: "White" - text: "Gyroscope" - font.pixelSize: titleFontSize - } - - Image { - id: image - Layout.alignment: Qt.AlignCenter - Layout.fillHeight: true - Layout.preferredWidth: root.height/3 - Layout.preferredHeight: root.height/3 - source: "qrc:/images/qt_logo.png" - fillMode: Image.PreserveAspectFit - - transform: [ - Rotation { - id: imageXRotation - origin.x: layout.width/2 - origin.y: layout.height/3 - axis.x: 1 - axis.y: 0 - axis.z: 0 - angle: 0 - }, - Rotation { - id: imageYRotation - origin.x: layout.width/2 - origin.y: layout.height/3 - axis.x: 0 - axis.y: 1 - axis.z: 0 - angle: 0 - }, - Rotation { - id: imageZRotation - origin.x: layout.width/2 - origin.y: layout.height/3 - axis.x: 0 - axis.y: 0 - axis.z: 1 - angle: 0 - } - ] - } - - Text { - Layout.preferredWidth: root.width - Layout.preferredHeight: textHeight - Layout.leftMargin: layout.spacing - color: "White" - text: "X: " + gyroscope.x.toFixed(2) - font.pixelSize: textFontSize - } - - ProgressBar { - id: xbar - value: 0.5 + (gyroscope.x / 1000) - Layout.preferredWidth: root.width - } - - Text { - Layout.preferredWidth: root.width - Layout.preferredHeight: textHeight - Layout.leftMargin: layout.spacing - color: "White" - text: "Y: " + gyroscope.y.toFixed(2) - font.pixelSize: textFontSize - } - ProgressBar { - id: ybar - value: 0.5 + (gyroscope.y / 1000) - Layout.preferredWidth: root.width - } - Text { - Layout.preferredWidth: root.width - Layout.preferredHeight: textHeight - Layout.leftMargin: layout.spacing - color: "White" - text: "Z: " + gyroscope.z.toFixed(2) - font.pixelSize: textFontSize - } - ProgressBar { - id: zbar - value: 0.5 + (gyroscope.z / 1000) - Layout.preferredWidth: root.width - } - Button { - Layout.alignment: Qt.AlignBottom - Layout.preferredWidth: root.width - Layout.preferredHeight: buttonHeight - text:"Reset rotation" - font.pixelSize: buttonFontSize - onClicked: { - resetRotations() - } - } - Button { - Layout.alignment: Qt.AlignBottom - Layout.preferredWidth: root.width - Layout.preferredHeight: buttonHeight - text:"Back" - font.pixelSize: buttonFontSize - onClicked:stack.pop() - } - } -} - diff --git a/examples/sensors/sensorsshowcase/images/qt_logo.png b/examples/sensors/sensorsshowcase/images/qt_logo.png Binary files differindex 30c621c9..3a75e10c 100644 --- a/examples/sensors/sensorsshowcase/images/qt_logo.png +++ b/examples/sensors/sensorsshowcase/images/qt_logo.png diff --git a/examples/sensors/sensorsshowcase/magnetometer.qml b/examples/sensors/sensorsshowcase/magnetometer.qml deleted file mode 100644 index c40bb867..00000000 --- a/examples/sensors/sensorsshowcase/magnetometer.qml +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -import QtQuick -import QtQuick.Controls -import QtQuick.Layouts -import QtSensors - -Rectangle { - id: root - color: "dimgray" - - property real magnetRotation: 40 - property real magnetometerX: 0 - property real magnetometerY: 0 - property real magnetometerZ: 0 - property int barScaleFactor: 10000 - -//! [0] - Magnetometer { - id: magnetometer - active: true - dataRate: 25 - onReadingChanged: { - root.magnetometerX = reading.x - root.magnetometerY = reading.y - root.magnetometerZ = reading.z - root.magnetRotation = ((Math.atan2(reading.x, reading.y) / Math.PI) * 180) - } - } -//! [0] - - ColumnLayout { - anchors.fill: parent - id: layout - - Text { - Layout.topMargin: titleTopMargin - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter - Layout.preferredHeight: titleHeight - verticalAlignment: Text.AlignVCenter - color: "White" - text: "Magnetometer" - font.pixelSize: titleFontSize - } - Image { - Layout.alignment: Qt.AlignCenter - Layout.fillHeight: true - Layout.preferredWidth: root.width / 2 - Layout.preferredHeight: root.height / 2 - source: "qrc:/images/magnet.svg" - fillMode: Image.PreserveAspectFit - rotation: magnetRotation - } - Text { - Layout.preferredWidth: root.width - Layout.preferredHeight: textHeight - Layout.leftMargin: layout.spacing - color: "White" - text: "X: " + root.magnetometerX.toFixed(9) - font.pixelSize: textFontSize - } - ProgressBar { - id: xbar - value: 0.5 + (root.magnetometerX * barScaleFactor) - Layout.preferredWidth: root.width - } - Text { - Layout.preferredWidth: root.width - Layout.preferredHeight: textHeight - Layout.leftMargin: layout.spacing - color: "White" - text: "Y: " + root.magnetometerY.toFixed(9) - font.pixelSize: textFontSize - } - ProgressBar { - id: ybar - value: 0.5 + (root.magnetometerY * barScaleFactor) - Layout.preferredWidth: root.width - } - Text { - Layout.preferredWidth: root.width - Layout.preferredHeight: textHeight - Layout.leftMargin: layout.spacing - color: "White" - text: "Z: " + root.magnetometerZ.toFixed(9) - font.pixelSize: textFontSize - } - ProgressBar { - id: zbar - value: 0.5 + (root.magnetometerZ * barScaleFactor) - Layout.preferredWidth: root.width - } - Button { - Layout.alignment: Qt.AlignBottom - Layout.preferredWidth: root.width - Layout.preferredHeight: buttonHeight - text:"Back" - font.pixelSize: buttonFontSize - onClicked:stack.pop() - } - } -} diff --git a/examples/sensors/sensorsshowcase/main.cpp b/examples/sensors/sensorsshowcase/main.cpp index 52e27a06..4a7bd285 100644 --- a/examples/sensors/sensorsshowcase/main.cpp +++ b/examples/sensors/sensorsshowcase/main.cpp @@ -1,14 +1,18 @@ -// Copyright (C) 2021 The Qt Company Ltd. +// Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - - -#include <QtGui/QGuiApplication> -#include <QtQml/QQmlApplicationEngine> +#include <QGuiApplication> +#include <QQmlApplicationEngine> int main(int argc, char *argv[]) { QGuiApplication app(argc,argv); - QQmlApplicationEngine engine(QUrl("qrc:///sensorsshowcase.qml")); + QGuiApplication::setOrganizationName("QtProject"); + QGuiApplication::setApplicationName("Sensors Showcase"); + + QQmlApplicationEngine engine; + engine.loadFromModule("SensorShowcaseModule", "Main"); + if (engine.rootObjects().isEmpty()) + return -1; return app.exec(); } diff --git a/examples/sensors/sensorsshowcase/proximity.qml b/examples/sensors/sensorsshowcase/proximity.qml deleted file mode 100644 index 7e4f6486..00000000 --- a/examples/sensors/sensorsshowcase/proximity.qml +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -import QtQuick -import QtQuick.Controls -import QtQuick.Layouts -import QtSensors - -Rectangle { - id: root - color: "dimgray" - property bool near: false - - ProximitySensor { - id: proximity - active: true - onReadingChanged: { - root.near = reading.near - } - } - - ColumnLayout { - anchors.fill: parent - id: layout - - Text { - Layout.topMargin: titleTopMargin - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter - Layout.preferredHeight: textHeight - color: "White" - text: "Proximity" - font.pixelSize: titleFontSize - } - Image { - Layout.alignment: Qt.AlignCenter - Layout.fillHeight: true - Layout.preferredWidth: root.near ? root.height/3 : root.height/4 - Layout.preferredHeight: root.near ? root.height/3 : root.height/4 - source: "qrc:/images/qt_logo.png" - fillMode: Image.PreserveAspectFit - } - Text { - visible: !proximity - Layout.preferredWidth: root.width - Layout.preferredHeight: textHeight - Layout.leftMargin: layout.spacing - font.pixelSize: textFontSize - verticalAlignment: Text.AlignVCenter - wrapMode: Text.WordWrap - color: "White" - text: "The proximity sensor is not available on this device!" - } - Text { -// visible: typeof proximity.available !== 'undefined' - Layout.preferredWidth: root.width - Layout.preferredHeight: textHeight - Layout.leftMargin: layout.spacing - color: "White" - text: "Near: " + root.near - font.pixelSize: textFontSize - } - Button { - Layout.alignment: Qt.AlignBottom - Layout.preferredWidth: root.width - Layout.preferredHeight: buttonHeight - text:"Back" - font.pixelSize: buttonFontSize - onClicked:stack.pop() - } - } -} diff --git a/examples/sensors/sensorsshowcase/qmldir b/examples/sensors/sensorsshowcase/qmldir new file mode 100644 index 00000000..76e61cdf --- /dev/null +++ b/examples/sensors/sensorsshowcase/qmldir @@ -0,0 +1,9 @@ +module SensorShowcaseModule +prefer :/qt/qml/SensorShowcaseModule/ +Main 1.0 Main.qml +Accelerometer 1.0 Accelerometer.qml +Compass 1.0 Compass.qml +Gyroscope 1.0 Gyroscope.qml +Magnetometer 1.0 Magnetometer.qml +Proximity 1.0 Proximity.qml +ProgressXYZBar 1.0 ProgressXYZBar.qml diff --git a/examples/sensors/sensorsshowcase/qtquickcontrols2.conf b/examples/sensors/sensorsshowcase/qtquickcontrols2.conf new file mode 100644 index 00000000..76439328 --- /dev/null +++ b/examples/sensors/sensorsshowcase/qtquickcontrols2.conf @@ -0,0 +1,6 @@ +[Controls] +Style=Material + +[Material] +Background=#eafcf3 +Accent=#28c878 diff --git a/examples/sensors/sensorsshowcase/sensorsshowcase.pro b/examples/sensors/sensorsshowcase/sensorsshowcase.pro index f57733f5..cded9071 100644 --- a/examples/sensors/sensorsshowcase/sensorsshowcase.pro +++ b/examples/sensors/sensorsshowcase/sensorsshowcase.pro @@ -1,27 +1,46 @@ -TEMPLATE = app -TARGET = sensorsshowcase +# Copyright (C) 2023 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + QT += quick sensors svg + +TARGET = sensorsshowcase +TEMPLATE = app + SOURCES = main.cpp -RESOURCES += \ - sensorsshowcase.qrc +qml_resources.files = \ + qmldir \ + Main.qml \ + Accelerometer.qml \ + Compass.qml \ + Gyroscope.qml \ + Magnetometer.qml \ + Proximity.qml \ + ProgressXYZBar.qml \ + images/compass.svg \ + images/magnet.svg \ + images/qt_logo.png -OTHER_FILES = \ - $$files(*.qml) \ - images \ - android/AndroidManifest.xml +qml_resources.prefix = /qt/qml/SensorShowcaseModule -target.path = $$[QT_INSTALL_EXAMPLES]/sensors/sensorsshowcase -INSTALLS += target +data_resources.files = \ + qtquickcontrols2.conf -ios { -QMAKE_INFO_PLIST = Info.plist +data_resources.prefix = / + +RESOURCES += \ + qml_resources \ + data_resources -# manual plugin loading needed with older Qt -# QTPLUGIN += qsvg qtsensors_ios qtsensors_generic +android { + OTHER_FILES = android/AndroidManifest.xml + ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android } -ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android +ios { + QMAKE_INFO_PLIST = Info.plist + EXAMPLE_FILES += Info.plist +} -EXAMPLE_FILES += \ - Info.plist +target.path = $$[QT_INSTALL_EXAMPLES]/sensors/sensorsshowcase +INSTALLS += target diff --git a/examples/sensors/sensorsshowcase/sensorsshowcase.qml b/examples/sensors/sensorsshowcase/sensorsshowcase.qml deleted file mode 100644 index e0fbd944..00000000 --- a/examples/sensors/sensorsshowcase/sensorsshowcase.qml +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -import QtQuick -import QtQuick.Controls -import QtQuick.Layouts -import QtSensors - -ApplicationWindow { - title: "Sensors Showcase" - id: mainWindow - width: 540 - height: 1200 - visible: true - color: "dimgray" - - property int titleHeight: height/7 - readonly property real buttonHeight: height/7 - property int textHeight: height/24 - readonly property int buttonFontSize: 30 - readonly property int textFontSize: 20 - readonly property int titleFontSize: 35 - readonly property int titleTopMargin: mainWindow.height/24 - - StackView { - id: stack - anchors.fill: parent - initialItem: ColumnLayout { - width: stack.width - Text { - Layout.topMargin: mainWindow.height/12 - Layout.alignment: Qt.AlignCenter - Layout.preferredHeight: titleHeight - text: "Sensors Showcase" - color: "White" - font.pixelSize: titleFontSize - } - - Button { - Layout.fillHeight: true - Layout.preferredWidth: stack.width - text: "Accelerometer" - font.pixelSize: buttonFontSize - onClicked: stack.push("qrc:/accelerometer.qml") - } - Button { - Layout.fillHeight: true - Layout.preferredWidth: stack.width - text: "Proximity" - font.pixelSize: buttonFontSize - onClicked: stack.push("qrc:/proximity.qml") - } - Button { - Layout.fillHeight: true - Layout.preferredWidth: stack.width - text: "Compass" - font.pixelSize: buttonFontSize - onClicked: stack.push("qrc:/compass.qml") - } - Button { - Layout.fillHeight: true - Layout.preferredWidth: stack.width - text: "Magnetometer" - font.pixelSize: buttonFontSize - onClicked: stack.push("qrc:/magnetometer.qml") - } - Button { - Layout.fillHeight: true - Layout.preferredWidth: stack.width - text: "Gyroscope" - font.pixelSize: buttonFontSize - onClicked: stack.push("qrc:/gyroscope.qml") - } - } - } -} diff --git a/examples/sensors/sensorsshowcase/sensorsshowcase.qrc b/examples/sensors/sensorsshowcase/sensorsshowcase.qrc deleted file mode 100644 index e647c384..00000000 --- a/examples/sensors/sensorsshowcase/sensorsshowcase.qrc +++ /dev/null @@ -1,13 +0,0 @@ -<RCC> - <qresource prefix="/"> - <file>sensorsshowcase.qml</file> - <file>accelerometer.qml</file> - <file>proximity.qml</file> - <file>compass.qml</file> - <file>magnetometer.qml</file> - <file>gyroscope.qml</file> - <file>images/magnet.svg</file> - <file>images/compass.svg</file> - <file>images/qt_logo.png</file> - </qresource> -</RCC> diff --git a/examples/sensors/sensorsshowcase/sensorsupport.h b/examples/sensors/sensorsshowcase/sensorsupport.h new file mode 100644 index 00000000..915157f8 --- /dev/null +++ b/examples/sensors/sensorsshowcase/sensorsupport.h @@ -0,0 +1,41 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +#ifndef SENSORSUPPORT_H +#define SENSORSUPPORT_H + +#include <QObject> +#include <QtQmlIntegration> +#include <QtSensors/QtSensors> + +class SensorSupport : public QObject +{ + Q_OBJECT + QML_ELEMENT + QML_SINGLETON + QML_UNCREATABLE("SensorSupport is a utility class") +public: + explicit SensorSupport(QObject *parent = nullptr) : QObject(parent) { } + + Q_INVOKABLE static bool hasAccelerometer() + { + return !QSensor::sensorsForType(QAccelerometer::sensorType).empty(); + } + Q_INVOKABLE static bool hasCompass() + { + return !QSensor::sensorsForType(QCompass::sensorType).empty(); + } + Q_INVOKABLE static bool hasGyroscope() + { + return !QSensor::sensorsForType(QGyroscope::sensorType).empty(); + } + Q_INVOKABLE static bool hasMagnetometer() + { + return !QSensor::sensorsForType(QMagnetometer::sensorType).empty(); + } + Q_INVOKABLE static bool hasProximity() + { + return !QSensor::sensorsForType(QProximitySensor::sensorType).empty(); + } +}; + +#endif // SENSORSUPPORT_H diff --git a/examples/sensors/stub.h b/examples/sensors/stub.h deleted file mode 100644 index 0bee2026..00000000 --- a/examples/sensors/stub.h +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#include <QGuiApplication> -#include <QQuickView> -#include <QLoggingCategory> - -#define SENSORS_EXAMPLE_MAIN(NAME) int main(int argc, char **argv) \ -{\ - QGuiApplication app(argc,argv);\ - QQuickView view;\ - view.setSource(QUrl("qrc:///" #NAME ".qml"));\ - view.show();\ - return app.exec();\ -} diff --git a/licenseRule.json b/licenseRule.json new file mode 100644 index 00000000..c411c733 --- /dev/null +++ b/licenseRule.json @@ -0,0 +1,89 @@ +[ + { + "comment" : ["file_pattern_ending: strings matched against the end of a file name.", + "location keys: regular expression matched against the beginning of", + "the file path (relative to the git submodule root).", + "spdx: list of SPDX-License-Expression's allowed in the matching files.", + "-------------------------------------------------------", + "Files with the following endings are Build System licensed,", + "unless they are examples", + "Files with other endings can also be build system files" + ], + "file_pattern_ending" : ["CMakeLists.txt", ".cmake", ".pro", ".pri", ".prf", + "configure", "configure.bat", "cmake.in", "plist.in", "CMakeLists.txt.in"], + "location" : { + "" : { + "comment" : "Default", + "file type" : "build system", + "spdx" : ["BSD-3-Clause"] + }, + "(.*)(examples/|snippets/)" : { + "comment" : "Example takes precedence", + "file type" : "examples and snippets", + "spdx" : ["LicenseRef-Qt-Commercial OR BSD-3-Clause"] + } + } + }, + { + "comments" : ["Files with the following endings are Tool licensed,", + "unless they are examples.", + "Files with other endings can also be tool files."], + "file_pattern_ending" : [".sh", ".py", ".pl", ".bat", ".ps1"], + "location" :{ + "" : { + "comment" : "Default", + "file type" : "tools and utils", + "spdx" : ["LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0"] + }, + "(.*)(examples/|snippets/)" : { + "comment" : "Example takes precedence", + "file type" : "examples and snippets", + "spdx" : ["LicenseRef-Qt-Commercial OR BSD-3-Clause"] + } + } + }, + { + "comment" : "Files with the following endings are Documentation licensed.", + "file_pattern_ending" : [".qdoc", ".qdocinc" , ".qdocconf", ".txt", "README", "qt_attribution.json"], + "location" :{ + "" : { + "comment" : "", + "file type" : "documentation", + "spdx" : ["LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only"] + } + } + }, + { + "comment" : ["All other files", + "The licensing is defined only by the file location in the Qt module repository.", + "NO <file_pattern_ending> key for this case!", + "This needs to be the last entry of the file."], + "location" : { + "" : { + "comment" : "Default", + "file type" : "module and plugin", + "spdx" : ["LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only"] + }, + "src/" : { + "comment" : "Default", + "file type" : "module and plugin", + "spdx" : ["LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only"] + }, + "tests/" : { + "comment" : "Default", + "file type" : "test", + "spdx" : ["LicenseRef-Qt-Commercial OR GPL-3.0-only"] + }, + "(.*)(examples/|snippets/)" : { + "comment" : "Default", + "file type" : "examples and snippets", + "spdx" : ["LicenseRef-Qt-Commercial OR BSD-3-Clause"] + }, + "config\\.tests/" : { + "comment" : "Default", + "file type" : "build system", + "spdx" : ["BSD-3-Clause"] + } + } + } +] diff --git a/src/plugins/sensors/CMakeLists.txt b/src/plugins/sensors/CMakeLists.txt index be45afb9..e7527d8f 100644 --- a/src/plugins/sensors/CMakeLists.txt +++ b/src/plugins/sensors/CMakeLists.txt @@ -25,6 +25,6 @@ if(LINUX AND TARGET Qt::DBus AND NOT SENSORS_PLUGINS OR "iio-sensor-proxy" IN_LI add_subdirectory(iio-sensor-proxy) endif() -if(NOT SENSORS_PLUGINS OR "dummy" IN_LIST SENSORS_PLUGINS) +if("dummy" IN_LIST SENSORS_PLUGINS) add_subdirectory(dummy) endif() diff --git a/src/plugins/sensors/android/sensormanager.cpp b/src/plugins/sensors/android/sensormanager.cpp index 96d3cf1c..755b6109 100644 --- a/src/plugins/sensors/android/sensormanager.cpp +++ b/src/plugins/sensors/android/sensormanager.cpp @@ -3,11 +3,12 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #include "sensormanager.h" #include <QtCore/qcoreapplication.h> +#include <QtCore/qjnitypes.h> #include <dlfcn.h> Q_DECLARE_JNI_CLASS(AndroidContext, "android/content/Context") -Q_DECLARE_JNI_TYPE(Sensor, "Landroid/hardware/Sensor;") +Q_DECLARE_JNI_CLASS(Sensor, "android/hardware/Sensor") SensorManager::SensorManager() { diff --git a/src/plugins/sensors/iio-sensor-proxy/CMakeLists.txt b/src/plugins/sensors/iio-sensor-proxy/CMakeLists.txt index 040d2128..83093e11 100644 --- a/src/plugins/sensors/iio-sensor-proxy/CMakeLists.txt +++ b/src/plugins/sensors/iio-sensor-proxy/CMakeLists.txt @@ -14,6 +14,12 @@ qt_internal_add_plugin(IIOSensorProxySensorPlugin iiosensorproxyorientationsensor.cpp iiosensorproxyorientationsensor.h iiosensorproxysensorbase.cpp iiosensorproxysensorbase.h main.cpp + NO_UNITY_BUILD_SOURCES + # Duplicate symbol definition between, iiosensorproxycompass.cpp, and + # the followings + # TODO: dbusPath() can probably be implemented as a static data member + iiosensorproxylightsensor.cpp + iiosensorproxyorientationsensor.cpp DBUS_INTERFACE_SOURCES org.freedesktop.DBus.Properties.xml net.hadess.SensorProxy.xml diff --git a/src/plugins/sensors/winrt/winrtgyroscope.cpp b/src/plugins/sensors/winrt/winrtgyroscope.cpp index 479e9d89..c5fff500 100644 --- a/src/plugins/sensors/winrt/winrtgyroscope.cpp +++ b/src/plugins/sensors/winrt/winrtgyroscope.cpp @@ -14,7 +14,7 @@ using namespace Microsoft::WRL::Wrappers; using namespace ABI::Windows::Foundation; using namespace ABI::Windows::Devices::Sensors; -typedef ITypedEventHandler<Gyrometer *, GyrometerReadingChangedEventArgs *> InclinometerReadingHandler; +typedef ITypedEventHandler<Gyrometer *, GyrometerReadingChangedEventArgs *> GyrometerReadingHandler; QT_USE_NAMESPACE @@ -129,8 +129,8 @@ void WinRtGyroscope::start() if (d->token.value) return; - ComPtr<InclinometerReadingHandler> callback = - Callback<InclinometerReadingHandler>(d, &WinRtGyroscopePrivate::readingChanged); + ComPtr<GyrometerReadingHandler> callback = + Callback<GyrometerReadingHandler>(d, &WinRtGyroscopePrivate::readingChanged); HRESULT hr = d->sensor->add_ReadingChanged(callback.Get(), &d->token); if (FAILED(hr)) { diff --git a/src/sensors/CMakeLists.txt b/src/sensors/CMakeLists.txt index 34f9b976..6d883696 100644 --- a/src/sensors/CMakeLists.txt +++ b/src/sensors/CMakeLists.txt @@ -77,7 +77,7 @@ qt_internal_add_module(Sensors if(ANDROID) set_property(TARGET Sensors APPEND PROPERTY QT_ANDROID_LIB_DEPENDENCIES - plugins/sensors/libplugins_sensors_qtsensors_android.so + ${INSTALL_PLUGINSDIR}/sensors/libplugins_sensors_qtsensors_android.so ) endif() diff --git a/src/sensors/configure.cmake b/src/sensors/configure.cmake index 1573cca0..04eb0e30 100644 --- a/src/sensors/configure.cmake +++ b/src/sensors/configure.cmake @@ -45,7 +45,10 @@ if (LINUX) # src/plugins/sensors/CMakeLists.txt and fix any potential errors. qt_configure_add_summary_entry(ARGS "sensorfw") qt_configure_add_summary_entry(ARGS "sensorfw_enabled_with_cmake") - qt_configure_add_report(MESSAGE "SensorFW support currently not enabled with cmake") + qt_configure_add_report_entry( + TYPE WARNING + MESSAGE "SensorFW support currently not enabled with cmake" + ) endif() if (WIN32) diff --git a/src/sensors/doc/qtsensors.qdocconf b/src/sensors/doc/qtsensors.qdocconf index be4bd6ea..b7569927 100644 --- a/src/sensors/doc/qtsensors.qdocconf +++ b/src/sensors/doc/qtsensors.qdocconf @@ -45,9 +45,9 @@ imagedirs += images depends += qtcore qtdoc qtgui qtquick qtcmake +# Highlighted examples +manifestmeta.highlighted.names = "QtSensors/Sensors Showcase" + navigation.landingpage = "Qt Sensors" navigation.cppclassespage = "Qt Sensors C++ Classes" navigation.qmltypespage = "Qt Sensors QML Types" - -# Fail the documentation build if there are more warnings than the limit -warninglimit = 0 diff --git a/src/sensors/doc/snippets/sensors/CMakeLists.txt b/src/sensors/doc/snippets/sensors/CMakeLists.txt index 16c4bea1..27480020 100644 --- a/src/sensors/doc/snippets/sensors/CMakeLists.txt +++ b/src/sensors/doc/snippets/sensors/CMakeLists.txt @@ -1,5 +1,5 @@ # Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: BSD-3-Clause +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause cmake_minimum_required(VERSION 3.16) project(sensorsdocsnippet LANGUAGES CXX) @@ -17,6 +17,7 @@ qt_add_executable(sensorsdocsnippet main.cpp mybackend.h plugin.cpp + start.cpp ) target_link_libraries(sensorsdocsnippet PUBLIC diff --git a/src/sensors/doc/snippets/sensors/creating.cpp b/src/sensors/doc/snippets/sensors/creating.cpp index 09ad9555..4c99066f 100644 --- a/src/sensors/doc/snippets/sensors/creating.cpp +++ b/src/sensors/doc/snippets/sensors/creating.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include <QObject> #include <qaccelerometer.h> diff --git a/src/sensors/doc/snippets/sensors/main.cpp b/src/sensors/doc/snippets/sensors/main.cpp index d53eb039..fb6724d5 100644 --- a/src/sensors/doc/snippets/sensors/main.cpp +++ b/src/sensors/doc/snippets/sensors/main.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause int main(int /*argc*/, char ** /*argv*/) { diff --git a/src/sensors/doc/snippets/sensors/mybackend.h b/src/sensors/doc/snippets/sensors/mybackend.h index befcbc67..b964e747 100644 --- a/src/sensors/doc/snippets/sensors/mybackend.h +++ b/src/sensors/doc/snippets/sensors/mybackend.h @@ -1,5 +1,5 @@ // Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #ifndef MYBACKEND_H #define MYBACKEND_H diff --git a/src/sensors/doc/snippets/sensors/plugin.cpp b/src/sensors/doc/snippets/sensors/plugin.cpp index e8611176..27f50d72 100644 --- a/src/sensors/doc/snippets/sensors/plugin.cpp +++ b/src/sensors/doc/snippets/sensors/plugin.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include "mybackend.h" #include <qsensorplugin.h> diff --git a/src/sensors/doc/snippets/sensors/start.cpp b/src/sensors/doc/snippets/sensors/start.cpp index 2ff9c89c..18c87d06 100644 --- a/src/sensors/doc/snippets/sensors/start.cpp +++ b/src/sensors/doc/snippets/sensors/start.cpp @@ -1,7 +1,9 @@ // Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause -#include <qsensor.h> +#include <QtSensors/qsensor.h> +#include <QtCore/QMetaObject> +#include <QtCore/QMetaproperty> void start() { @@ -19,3 +21,39 @@ qreal y = reading->value(1).value<qreal>(); Q_UNUSED(x); Q_UNUSED(y); } + +class MyObject : public QObject +{ + void findSensors() + { + //! [Find sensors] + QList<QSensor*> mySensorList; + for (const QByteArray &type : QSensor::sensorTypes()) { + qDebug() << "Found a sensor type:" << type; + for (const QByteArray &identifier : QSensor::sensorsForType(type)) { + qDebug() << " " << "Found a sensor of that type:" << identifier; + QSensor* sensor = new QSensor(type, this); + sensor->setIdentifier(identifier); + mySensorList.append(sensor); + } + } + //! [Find sensors] + //! [Print reading properties] + for (QSensor* sensor : mySensorList) { + const int firstProperty = QSensorReading::staticMetaObject.propertyOffset(); + // Connect to backend first in case start() hasn't been called yet + if (!sensor->connectToBackend()) + continue; + qDebug() << "Sensor" << sensor->identifier() << "reading properties:"; + QSensorReading *reading = sensor->reading(); + if (reading) { + const QMetaObject *mo = reading->metaObject(); + for (int i = firstProperty; i < mo->propertyCount(); ++i) { + QByteArray name = mo->property(i).name(); + qDebug() << " " << name << reading->property(name).toByteArray(); + } + } + } + //! [Print reading properties] + } +}; diff --git a/src/sensors/doc/snippets/sensors/tutorial.cpp b/src/sensors/doc/snippets/sensors/tutorial.cpp new file mode 100644 index 00000000..e8714961 --- /dev/null +++ b/src/sensors/doc/snippets/sensors/tutorial.cpp @@ -0,0 +1,25 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +//! [MySensor] +class MyReadingPrivate; + +class MyReading : public QSensorReading + { + Q_OBJECT + Q_PROPERTY(qreal myprop READ myprop) + DECLARE_READING(MyReading) +public: + qreal myprop() const; + void setMyprop(qreal myprop); + }; + +class MySensor : public QSensor +{ + Q_OBJECT +public: + explicit MySensor(QObject *parent = 0); + MyReading *reading() const; + static char const * const sensorType; + }; +//! [MySensor] diff --git a/src/sensors/doc/src/compatmap.qdoc b/src/sensors/doc/src/compatmap.qdoc index 1f90d1ee..41f91a73 100644 --- a/src/sensors/doc/src/compatmap.qdoc +++ b/src/sensors/doc/src/compatmap.qdoc @@ -136,6 +136,135 @@ \endraw + \raw DocBook +<db:informaltable cellpadding="2" cellspacing="1" border="1" width="90%"> + <db:tbody> + <db:tr> + <db:td>Color</db:td> + <db:td>Explanation</db:td> + </db:tr> + <db:tr> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td>The sensor is supported.</db:td> + </db:tr> + <db:tr> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + <db:td>The sensor is not supported.</db:td> + </db:tr> + </db:tbody> + </db:informaltable> + + + <db:informaltable cellpadding="2" cellspacing="1" border="1" rules="all" width="90%"> + <db:tbody> + <db:tr> + <db:td><db:emphasis role="bold">Feature</db:emphasis></db:td> + <db:td><db:emphasis role="bold">Android</db:emphasis></db:td> + <db:td><db:emphasis role="bold">Linux</db:emphasis></db:td> + <db:td><db:emphasis role="bold">iOS</db:emphasis></db:td> + <db:td><db:emphasis role="bold">Windows</db:emphasis></db:td> + <db:td><db:emphasis role="bold">Generic</db:emphasis></db:td> + </db:tr> + <db:tr> + <db:td>Accelerometer</db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + </db:tr> + <db:tr> + <db:td>Ambient Light Sensor</db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + </db:tr> + <db:tr> + <db:td>Ambient Temperature Sensor</db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + </db:tr> + <db:tr> + <db:td>Compass</db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + </db:tr> + <db:tr> + <db:td>Gyroscope</db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + </db:tr> + <db:tr> + <db:td>Light Sensor</db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + </db:tr> + <db:tr> + <db:td>Magnetometer</db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + </db:tr> + <db:tr> + <db:td>Orientation Sensor</db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + </db:tr> + <db:tr> + <db:td>Pressure Sensor</db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + </db:tr> + <db:tr> + <db:td>Proximity Sensor</db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + </db:tr> + <db:tr> + <db:td>Rotation Sensor</db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + </db:tr> + <db:tr> + <db:td>Tilt Sensor</db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + <db:td class="bgcolor-gray" ><?dbhtml bgcolor="gray" ?><?dbfo bgcolor="gray" ?></db:td> + <db:td class="bgcolor-green" ><?dbhtml bgcolor="green" ?><?dbfo bgcolor="green" ?></db:td> + </db:tr> + </db:tbody> + </db:informaltable> + \endraw + In addition to the table above, each sensor type might support specific features. For example, a magnetometer might support returning geo values. See QSensor::isFeatureSupported() for additional details. diff --git a/src/sensors/doc/src/qtsensors-cpp.qdoc b/src/sensors/doc/src/qtsensors-cpp.qdoc index 2251289c..b70f8276 100644 --- a/src/sensors/doc/src/qtsensors-cpp.qdoc +++ b/src/sensors/doc/src/qtsensors-cpp.qdoc @@ -5,6 +5,7 @@ \page qtsensors-cpp.html \title Qt Sensors C++ Overview \brief Explains how to use the Qt Sensors C++ API. +\ingroup explanation \tableofcontents @@ -79,8 +80,18 @@ This code does not require any compile-time links to \l QAccelerometer or \snippet sensors/start.cpp Starting a sensor -You can discover all of this information at runtime too. The sensor_explorer example -shows you information about available sensors. +You can discover all of this information at runtime too. + +\section1 Discovering Sensors And Reading Properties At Runtime + +Sometimes it may be that the available sensors are not known at development time. +It is possible to find out which sensors are available as illustrated below: + +\snippet sensors/start.cpp Find sensors + +Furthermore it is possible to discover the reading details for these sensors, as illustrated below: + +\snippet sensors/start.cpp Print reading properties \section1 Front End, Back End diff --git a/src/sensors/doc/src/qtsensors-tutorial.qdoc b/src/sensors/doc/src/qtsensors-tutorial.qdoc new file mode 100644 index 00000000..147b8504 --- /dev/null +++ b/src/sensors/doc/src/qtsensors-tutorial.qdoc @@ -0,0 +1,36 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only + +/*! + \page qtsensors-tutorial.html + \title How to create your own Sensor + \brief Steps for creating your own sensors + + The Qt Sensors module provides access to sensor hardware via QML and C++ + interfaces. + + The API is supported on \l{Qt for Android}{Android}, \l{Qt for iOS}{iOS}, and + \l {Qt for Windows}{Windows (MSVC)}. + + \section1 Creating your own sensor using C++ API + + Using a Qt module's C++ API requires linking against the module library, either + directly or through other dependencies. + \section2 Creating a sensor + + To create your own sensor you can use the following steps: + + \list + \li Create your own MySensor and MySensorReading classes + \snippet sensors/tutorial.cpp MySensor + \li Create a MySensorBackend by inheriting from QSensorBackend + \li Create MySensorBackendFactory factory class for instantiating that + backend by inheriting a class QSensorBackendFactory + \li Register the backend factory by calling + QSensorManager::registerBackend ("MySensorType", "MySensorId", &myfactory) + \li Instantiate the new MySensor and start using it + \endlist + + As an another option the sensors are put into a \l {Creating a sensor plugin} + that you can use on demand. +*/ diff --git a/src/sensors/doc/src/qtsensors.qdoc b/src/sensors/doc/src/qtsensors.qdoc index 8ff6c2e0..62959fbd 100644 --- a/src/sensors/doc/src/qtsensors.qdoc +++ b/src/sensors/doc/src/qtsensors.qdoc @@ -38,13 +38,13 @@ \li \l {Generic Backend} {Generic Backend} \li \l {Qt Sensors Backend} \li \l {Compatibility Map} {Compatibility Map} + \li \l {How to create your own Sensor} \endlist \section1 Examples \list \li \l {Qt Sensors Examples} {Examples} - \li \l {Qt Sensors - Grue Sensor Example} \endlist \section1 API Reference diff --git a/src/sensors/doc/src/sensor-examples.qdoc b/src/sensors/doc/src/sensor-examples.qdoc index a3d56ffe..8e8d8d75 100644 --- a/src/sensors/doc/src/sensor-examples.qdoc +++ b/src/sensors/doc/src/sensor-examples.qdoc @@ -5,7 +5,6 @@ \group qtsensors-examples \title Qt Sensors Examples \brief Examples for the Qt Sensors module - \ingroup all-examples These are the Qt Sensors examples. diff --git a/src/sensors/make_sensor.pl b/src/sensors/make_sensor.pl index c314c1bd..74213f09 100755 --- a/src/sensors/make_sensor.pl +++ b/src/sensors/make_sensor.pl @@ -1,6 +1,6 @@ #!/usr/bin/perl # Copyright (C) 2021 The Qt Company Ltd. -# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 # About this script # @@ -82,7 +82,7 @@ QT_BEGIN_NAMESPACE class '.$sensor.'; -class Q_SENSORSQUICK_PRIVATE_EXPORT '.$qmlsensor.' : public QmlSensor +class Q_SENSORSQUICK_EXPORT '.$qmlsensor.' : public QmlSensor { Q_OBJECT QML_NAMED_ELEMENT('.$no_q_sensor.') @@ -99,7 +99,7 @@ private: '.$sensor.' *m_sensor; }; -class Q_SENSORSQUICK_PRIVATE_EXPORT '.$qmlreading.' : public QmlSensorReading +class Q_SENSORSQUICK_EXPORT '.$qmlreading.' : public QmlSensorReading { Q_OBJECT Q_PROPERTY(qreal myprop READ myprop NOTIFY mypropChanged BINDABLE bindableMyprop) diff --git a/src/sensors/qsensor.cpp b/src/sensors/qsensor.cpp index fbd94e76..72c58fe8 100644 --- a/src/sensors/qsensor.cpp +++ b/src/sensors/qsensor.cpp @@ -244,7 +244,7 @@ void QSensorPrivate::init(const QByteArray &sensorType) Only use this constructor if there is no derived sensor class available. Note that all built-in sensors have a derived class, so using this constructor should only be necessary - when implementing custom sensors, like in the \l {Qt Sensors - Grue Sensor Example}{Grue sensor example}. + when implementing custom sensors. */ QSensor::QSensor(const QByteArray &type, QObject *parent) : QObject(*new QSensorPrivate, parent) @@ -527,9 +527,6 @@ void QSensor::setSkipDuplicates(bool skipDuplicates) continuous range of rates. A discrete rate is noted by having both values the same. - See the sensor_explorer example for an example of how to interpret and use - this information. - Note that this information is not mandatory as not all sensors have a rate at which they run. In such cases, the list will be empty. diff --git a/src/sensorsquick/CMakeLists.txt b/src/sensorsquick/CMakeLists.txt index 29552a81..b8ae9f57 100644 --- a/src/sensorsquick/CMakeLists.txt +++ b/src/sensorsquick/CMakeLists.txt @@ -36,5 +36,4 @@ qt_internal_add_qml_module(SensorsQuick LIBRARIES Qt::CorePrivate GENERATE_CPP_EXPORTS - GENERATE_PRIVATE_CPP_EXPORTS ) diff --git a/src/sensorsquick/qmlaccelerometer_p.h b/src/sensorsquick/qmlaccelerometer_p.h index 862aadde..aae90879 100644 --- a/src/sensorsquick/qmlaccelerometer_p.h +++ b/src/sensorsquick/qmlaccelerometer_p.h @@ -21,7 +21,7 @@ QT_BEGIN_NAMESPACE class QAccelerometer; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlAccelerometer : public QmlSensor +class Q_SENSORSQUICK_EXPORT QmlAccelerometer : public QmlSensor { Q_OBJECT Q_PROPERTY(AccelerationMode accelerationMode READ accelerationMode WRITE setAccelerationMode @@ -53,7 +53,7 @@ private: QmlSensorReading *createReading() const override; }; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlAccelerometerReading : public QmlSensorReading +class Q_SENSORSQUICK_EXPORT QmlAccelerometerReading : public QmlSensorReading { Q_OBJECT Q_PROPERTY(qreal x READ x NOTIFY xChanged BINDABLE bindableX) diff --git a/src/sensorsquick/qmlambientlightsensor_p.h b/src/sensorsquick/qmlambientlightsensor_p.h index 5c41f56b..83bcd60c 100644 --- a/src/sensorsquick/qmlambientlightsensor_p.h +++ b/src/sensorsquick/qmlambientlightsensor_p.h @@ -22,7 +22,7 @@ QT_BEGIN_NAMESPACE class QAmbientLightSensor; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlAmbientLightSensor : public QmlSensor +class Q_SENSORSQUICK_EXPORT QmlAmbientLightSensor : public QmlSensor { Q_OBJECT QML_NAMED_ELEMENT(AmbientLightSensor) @@ -39,7 +39,7 @@ private: }; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlAmbientLightSensorReading : public QmlSensorReading +class Q_SENSORSQUICK_EXPORT QmlAmbientLightSensorReading : public QmlSensorReading { Q_OBJECT Q_PROPERTY(QAmbientLightReading::LightLevel lightLevel READ lightLevel diff --git a/src/sensorsquick/qmlambienttemperaturesensor_p.h b/src/sensorsquick/qmlambienttemperaturesensor_p.h index 9d17983a..898c0617 100644 --- a/src/sensorsquick/qmlambienttemperaturesensor_p.h +++ b/src/sensorsquick/qmlambienttemperaturesensor_p.h @@ -20,7 +20,7 @@ QT_BEGIN_NAMESPACE class QAmbientTemperatureSensor; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlAmbientTemperatureSensor : public QmlSensor +class Q_SENSORSQUICK_EXPORT QmlAmbientTemperatureSensor : public QmlSensor { Q_OBJECT QML_NAMED_ELEMENT(AmbientTemperatureSensor) @@ -37,7 +37,7 @@ private: QAmbientTemperatureSensor *m_sensor; }; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlAmbientTemperatureReading : public QmlSensorReading +class Q_SENSORSQUICK_EXPORT QmlAmbientTemperatureReading : public QmlSensorReading { Q_OBJECT Q_PROPERTY(qreal temperature READ temperature diff --git a/src/sensorsquick/qmlcompass_p.h b/src/sensorsquick/qmlcompass_p.h index 77f401ef..312bf13c 100644 --- a/src/sensorsquick/qmlcompass_p.h +++ b/src/sensorsquick/qmlcompass_p.h @@ -21,7 +21,7 @@ QT_BEGIN_NAMESPACE class QCompass; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlCompass : public QmlSensor +class Q_SENSORSQUICK_EXPORT QmlCompass : public QmlSensor { Q_OBJECT QML_NAMED_ELEMENT(Compass) @@ -37,7 +37,7 @@ private: QmlSensorReading *createReading() const override; }; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlCompassReading : public QmlSensorReading +class Q_SENSORSQUICK_EXPORT QmlCompassReading : public QmlSensorReading { Q_OBJECT Q_PROPERTY(qreal azimuth READ azimuth NOTIFY azimuthChanged BINDABLE bindableAzimuth) diff --git a/src/sensorsquick/qmlgyroscope_p.h b/src/sensorsquick/qmlgyroscope_p.h index b4e508cf..02697718 100644 --- a/src/sensorsquick/qmlgyroscope_p.h +++ b/src/sensorsquick/qmlgyroscope_p.h @@ -21,7 +21,7 @@ QT_BEGIN_NAMESPACE class QGyroscope; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlGyroscope : public QmlSensor +class Q_SENSORSQUICK_EXPORT QmlGyroscope : public QmlSensor { Q_OBJECT QML_NAMED_ELEMENT(Gyroscope) @@ -37,7 +37,7 @@ private: QmlSensorReading *createReading() const override; }; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlGyroscopeReading : public QmlSensorReading +class Q_SENSORSQUICK_EXPORT QmlGyroscopeReading : public QmlSensorReading { Q_OBJECT Q_PROPERTY(qreal x READ x NOTIFY xChanged BINDABLE bindableX) diff --git a/src/sensorsquick/qmlhumiditysensor_p.h b/src/sensorsquick/qmlhumiditysensor_p.h index c4f57152..e01b0dc3 100644 --- a/src/sensorsquick/qmlhumiditysensor_p.h +++ b/src/sensorsquick/qmlhumiditysensor_p.h @@ -21,7 +21,7 @@ QT_BEGIN_NAMESPACE class QHumiditySensor; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlHumiditySensor : public QmlSensor +class Q_SENSORSQUICK_EXPORT QmlHumiditySensor : public QmlSensor { Q_OBJECT @@ -39,7 +39,7 @@ private: QHumiditySensor *m_sensor; }; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlHumidityReading : public QmlSensorReading +class Q_SENSORSQUICK_EXPORT QmlHumidityReading : public QmlSensorReading { Q_OBJECT Q_PROPERTY(qreal relativeHumidity READ relativeHumidity diff --git a/src/sensorsquick/qmlirproximitysensor_p.h b/src/sensorsquick/qmlirproximitysensor_p.h index 5684641e..b1f97d5d 100644 --- a/src/sensorsquick/qmlirproximitysensor_p.h +++ b/src/sensorsquick/qmlirproximitysensor_p.h @@ -21,7 +21,7 @@ QT_BEGIN_NAMESPACE class QIRProximitySensor; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlIRProximitySensor : public QmlSensor +class Q_SENSORSQUICK_EXPORT QmlIRProximitySensor : public QmlSensor { Q_OBJECT QML_NAMED_ELEMENT(IRProximitySensor) @@ -37,7 +37,7 @@ private: QmlSensorReading *createReading() const override; }; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlIRProximitySensorReading : public QmlSensorReading +class Q_SENSORSQUICK_EXPORT QmlIRProximitySensorReading : public QmlSensorReading { Q_OBJECT Q_PROPERTY(qreal reflectance READ reflectance diff --git a/src/sensorsquick/qmllidsensor_p.h b/src/sensorsquick/qmllidsensor_p.h index 2453ac43..1ddf60a9 100644 --- a/src/sensorsquick/qmllidsensor_p.h +++ b/src/sensorsquick/qmllidsensor_p.h @@ -20,7 +20,7 @@ QT_BEGIN_NAMESPACE class QLidSensor; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlLidSensor : public QmlSensor +class Q_SENSORSQUICK_EXPORT QmlLidSensor : public QmlSensor { Q_OBJECT QML_NAMED_ELEMENT(LidSensor) @@ -37,7 +37,7 @@ private: QLidSensor *m_sensor; }; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlLidReading : public QmlSensorReading +class Q_SENSORSQUICK_EXPORT QmlLidReading : public QmlSensorReading { Q_OBJECT Q_PROPERTY(bool backLidClosed READ backLidClosed diff --git a/src/sensorsquick/qmllightsensor_p.h b/src/sensorsquick/qmllightsensor_p.h index b9c27fb6..6758ffba 100644 --- a/src/sensorsquick/qmllightsensor_p.h +++ b/src/sensorsquick/qmllightsensor_p.h @@ -21,7 +21,7 @@ QT_BEGIN_NAMESPACE class QLightSensor; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlLightSensor : public QmlSensor +class Q_SENSORSQUICK_EXPORT QmlLightSensor : public QmlSensor { Q_OBJECT Q_PROPERTY(qreal fieldOfView READ fieldOfView NOTIFY fieldOfViewChanged) @@ -42,7 +42,7 @@ private: QmlSensorReading *createReading() const override; }; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlLightSensorReading : public QmlSensorReading +class Q_SENSORSQUICK_EXPORT QmlLightSensorReading : public QmlSensorReading { Q_OBJECT Q_PROPERTY(qreal illuminance READ illuminance diff --git a/src/sensorsquick/qmlmagnetometer_p.h b/src/sensorsquick/qmlmagnetometer_p.h index ffd65825..9080f3e7 100644 --- a/src/sensorsquick/qmlmagnetometer_p.h +++ b/src/sensorsquick/qmlmagnetometer_p.h @@ -21,7 +21,7 @@ QT_BEGIN_NAMESPACE class QMagnetometer; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlMagnetometer : public QmlSensor +class Q_SENSORSQUICK_EXPORT QmlMagnetometer : public QmlSensor { Q_OBJECT Q_PROPERTY(bool returnGeoValues READ returnGeoValues WRITE setReturnGeoValues NOTIFY returnGeoValuesChanged) @@ -44,7 +44,7 @@ private: QmlSensorReading *createReading() const override; }; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlMagnetometerReading : public QmlSensorReading +class Q_SENSORSQUICK_EXPORT QmlMagnetometerReading : public QmlSensorReading { Q_OBJECT Q_PROPERTY(qreal x READ x NOTIFY xChanged BINDABLE bindableX) diff --git a/src/sensorsquick/qmlorientationsensor_p.h b/src/sensorsquick/qmlorientationsensor_p.h index 3097c448..9be7b7e5 100644 --- a/src/sensorsquick/qmlorientationsensor_p.h +++ b/src/sensorsquick/qmlorientationsensor_p.h @@ -22,7 +22,7 @@ QT_BEGIN_NAMESPACE class QOrientationSensor; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlOrientationSensor : public QmlSensor +class Q_SENSORSQUICK_EXPORT QmlOrientationSensor : public QmlSensor { Q_OBJECT QML_NAMED_ELEMENT(OrientationSensor) @@ -38,7 +38,7 @@ private: QmlSensorReading *createReading() const override; }; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlOrientationSensorReading : public QmlSensorReading +class Q_SENSORSQUICK_EXPORT QmlOrientationSensorReading : public QmlSensorReading { Q_OBJECT Q_PROPERTY(QOrientationReading::Orientation orientation READ orientation diff --git a/src/sensorsquick/qmlpressuresensor_p.h b/src/sensorsquick/qmlpressuresensor_p.h index 5c94cf47..8b531fba 100644 --- a/src/sensorsquick/qmlpressuresensor_p.h +++ b/src/sensorsquick/qmlpressuresensor_p.h @@ -20,7 +20,7 @@ QT_BEGIN_NAMESPACE class QPressureSensor; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlPressureSensor : public QmlSensor +class Q_SENSORSQUICK_EXPORT QmlPressureSensor : public QmlSensor { Q_OBJECT QML_NAMED_ELEMENT(PressureSensor) @@ -37,7 +37,7 @@ private: QPressureSensor *m_sensor; }; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlPressureReading : public QmlSensorReading +class Q_SENSORSQUICK_EXPORT QmlPressureReading : public QmlSensorReading { Q_OBJECT Q_PROPERTY(qreal pressure READ pressure NOTIFY pressureChanged BINDABLE bindablePressure) diff --git a/src/sensorsquick/qmlproximitysensor_p.h b/src/sensorsquick/qmlproximitysensor_p.h index 570d24c5..8ce4fdb8 100644 --- a/src/sensorsquick/qmlproximitysensor_p.h +++ b/src/sensorsquick/qmlproximitysensor_p.h @@ -23,7 +23,7 @@ QT_BEGIN_NAMESPACE class QProximitySensor; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlProximitySensor : public QmlSensor +class Q_SENSORSQUICK_EXPORT QmlProximitySensor : public QmlSensor { Q_OBJECT QML_NAMED_ELEMENT(ProximitySensor) @@ -39,7 +39,7 @@ private: QmlSensorReading *createReading() const override; }; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlProximitySensorReading : public QmlSensorReading +class Q_SENSORSQUICK_EXPORT QmlProximitySensorReading : public QmlSensorReading { Q_OBJECT Q_PROPERTY(bool near READ near NOTIFY nearChanged BINDABLE bindableNear) diff --git a/src/sensorsquick/qmlrotationsensor_p.h b/src/sensorsquick/qmlrotationsensor_p.h index 6699ec17..1ef008b8 100644 --- a/src/sensorsquick/qmlrotationsensor_p.h +++ b/src/sensorsquick/qmlrotationsensor_p.h @@ -21,7 +21,7 @@ QT_BEGIN_NAMESPACE class QRotationSensor; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlRotationSensor : public QmlSensor +class Q_SENSORSQUICK_EXPORT QmlRotationSensor : public QmlSensor { Q_OBJECT Q_PROPERTY(bool hasZ READ hasZ NOTIFY hasZChanged) @@ -42,7 +42,7 @@ private: QmlSensorReading *createReading() const override; }; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlRotationSensorReading : public QmlSensorReading +class Q_SENSORSQUICK_EXPORT QmlRotationSensorReading : public QmlSensorReading { Q_OBJECT Q_PROPERTY(qreal x READ x NOTIFY xChanged BINDABLE bindableX) diff --git a/src/sensorsquick/qmlsensor.cpp b/src/sensorsquick/qmlsensor.cpp index 1e375415..d507e919 100644 --- a/src/sensorsquick/qmlsensor.cpp +++ b/src/sensorsquick/qmlsensor.cpp @@ -277,6 +277,21 @@ QBindable<QmlSensorReading*> QmlSensor::bindableReading() const } /*! + \qmlmethod bool Sensor::isFeatureSupported(feature) + \since QtSensors 6.7 + Checks if a specific feature is supported by the backend. + Returns \c true if the \a feature is supported, and \c false otherwise. + For feature descriptions see \l {QSensor::Feature}. + + Please see QSensor::isFeatureSupported for information. +*/ + +bool QmlSensor::isFeatureSupported(Feature feature) const +{ + return sensor()->isFeatureSupported(static_cast<QSensor::Feature>(feature)); +} + +/*! \qmlproperty Sensor::AxesOrientationMode Sensor::axesOrientationMode \since QtSensors 5.1 This property holds the mode that affects how the screen orientation changes reading values. diff --git a/src/sensorsquick/qmlsensor_p.h b/src/sensorsquick/qmlsensor_p.h index 6e1460a4..d08d797f 100644 --- a/src/sensorsquick/qmlsensor_p.h +++ b/src/sensorsquick/qmlsensor_p.h @@ -22,6 +22,8 @@ #include <QQmlParserStatus> #include <QtQml/qqml.h> #include <QQmlListProperty> +#include <QtSensors/QSensor> + #include "qmlsensorrange_p.h" QT_BEGIN_NAMESPACE @@ -32,7 +34,7 @@ class QSensorReading; class QmlSensorReading; class QmlSensorPrivate; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlSensor : public QObject, public QQmlParserStatus +class Q_SENSORSQUICK_EXPORT QmlSensor : public QObject, public QQmlParserStatus { Q_OBJECT Q_DECLARE_PRIVATE(QmlSensor) @@ -62,6 +64,19 @@ class Q_SENSORSQUICK_PRIVATE_EXPORT QmlSensor : public QObject, public QQmlParse QML_UNCREATABLE("Cannot create Sensor") QML_ADDED_IN_VERSION(5,0) public: + // Keep in sync with QSensor::Feature + enum Feature : int { + Buffering = QSensor::Buffering, + AlwaysOn = QSensor::AlwaysOn, + GeoValues = QSensor::GeoValues, + FieldOfView = QSensor::FieldOfView, + AccelerationMode = QSensor::AccelerationMode, + SkipDuplicates = QSensor::SkipDuplicates, + AxesOrientation = QSensor::AxesOrientation, + PressureSensorTemperature = QSensor::PressureSensorTemperature + }; + Q_ENUM(Feature) + // Keep in sync with QSensor::AxesOrientationMode enum AxesOrientationMode { FixedOrientation, @@ -105,6 +120,8 @@ public: QmlSensorReading *reading() const; QBindable<QmlSensorReading*> bindableReading() const; + Q_INVOKABLE Q_REVISION(6, 7) bool isFeatureSupported(Feature feature) const; + AxesOrientationMode axesOrientationMode() const; void setAxesOrientationMode(AxesOrientationMode axesOrientationMode); @@ -163,7 +180,7 @@ private: m_reading, nullptr) }; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlSensorReading : public QObject +class Q_SENSORSQUICK_EXPORT QmlSensorReading : public QObject { Q_OBJECT Q_PROPERTY(quint64 timestamp READ timestamp NOTIFY timestampChanged BINDABLE bindableTimestamp) diff --git a/src/sensorsquick/qmlsensorglobal_p.h b/src/sensorsquick/qmlsensorglobal_p.h index 007a8f2a..8b5214a2 100644 --- a/src/sensorsquick/qmlsensorglobal_p.h +++ b/src/sensorsquick/qmlsensorglobal_p.h @@ -24,7 +24,7 @@ QT_BEGIN_NAMESPACE class QSensor; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlSensorGlobal : public QObject +class Q_SENSORSQUICK_EXPORT QmlSensorGlobal : public QObject { Q_OBJECT public: diff --git a/src/sensorsquick/qmlsensorrange_p.h b/src/sensorsquick/qmlsensorrange_p.h index e03f9f67..324c24db 100644 --- a/src/sensorsquick/qmlsensorrange_p.h +++ b/src/sensorsquick/qmlsensorrange_p.h @@ -21,7 +21,7 @@ QT_BEGIN_NAMESPACE -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlSensorRange : public QObject +class Q_SENSORSQUICK_EXPORT QmlSensorRange : public QObject { Q_OBJECT Q_PROPERTY(int minimum READ minimum) @@ -45,7 +45,7 @@ private: int max; }; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlSensorOutputRange : public QObject +class Q_SENSORSQUICK_EXPORT QmlSensorOutputRange : public QObject { Q_OBJECT Q_PROPERTY(qreal minimum READ minimum) diff --git a/src/sensorsquick/qmltapsensor_p.h b/src/sensorsquick/qmltapsensor_p.h index 3bb25812..7537c5db 100644 --- a/src/sensorsquick/qmltapsensor_p.h +++ b/src/sensorsquick/qmltapsensor_p.h @@ -22,7 +22,7 @@ QT_BEGIN_NAMESPACE class QTapSensor; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlTapSensor : public QmlSensor +class Q_SENSORSQUICK_EXPORT QmlTapSensor : public QmlSensor { Q_OBJECT Q_PROPERTY(bool returnDoubleTapEvents READ returnDoubleTapEvents WRITE setReturnDoubleTapEvents NOTIFY returnDoubleTapEventsChanged) @@ -45,7 +45,7 @@ private: QmlSensorReading *createReading() const override; }; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlTapSensorReading : public QmlSensorReading +class Q_SENSORSQUICK_EXPORT QmlTapSensorReading : public QmlSensorReading { Q_OBJECT Q_PROPERTY(QTapReading::TapDirection tapDirection READ tapDirection diff --git a/src/sensorsquick/qmltiltsensor_p.h b/src/sensorsquick/qmltiltsensor_p.h index c86866a3..d660229d 100644 --- a/src/sensorsquick/qmltiltsensor_p.h +++ b/src/sensorsquick/qmltiltsensor_p.h @@ -22,7 +22,7 @@ QT_BEGIN_NAMESPACE class QTiltSensor; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlTiltSensor : public QmlSensor +class Q_SENSORSQUICK_EXPORT QmlTiltSensor : public QmlSensor { Q_OBJECT QML_NAMED_ELEMENT(TiltSensor) @@ -40,7 +40,7 @@ private: QmlSensorReading *createReading() const override; }; -class Q_SENSORSQUICK_PRIVATE_EXPORT QmlTiltSensorReading : public QmlSensorReading +class Q_SENSORSQUICK_EXPORT QmlTiltSensorReading : public QmlSensorReading { Q_OBJECT Q_PROPERTY(qreal yRotation READ yRotation NOTIFY yRotationChanged BINDABLE bindableYRotation) diff --git a/src/sensorsquick/qsensorsquickglobal_p.h b/src/sensorsquick/qsensorsquickglobal_p.h index 91c41c54..4826ed82 100644 --- a/src/sensorsquick/qsensorsquickglobal_p.h +++ b/src/sensorsquick/qsensorsquickglobal_p.h @@ -16,8 +16,8 @@ // #include <QtCore/qglobal.h> -#include <QtSensorsQuick/private/qtsensorsquickexports_p.h> +#include <QtSensorsQuick/qtsensorsquickexports.h> -void Q_SENSORSQUICK_PRIVATE_EXPORT qml_register_types_QtSensors(); +void Q_SENSORSQUICK_EXPORT qml_register_types_QtSensors(); #endif // QSENSORSQUICKGLOBALS_P_H diff --git a/sync.profile b/sync.profile deleted file mode 100644 index 2839a357..00000000 --- a/sync.profile +++ /dev/null @@ -1,6 +0,0 @@ -%modules = ( # path to module name map - "QtSensors" => "$basedir/src/sensors", - "QtSensorsQuick" => "$basedir/src/sensorsquick", -); -%moduleheaders = ( # restrict the module headers to those found in relative path -); diff --git a/tests/auto/common/test_backends.cpp b/tests/auto/common/test_backends.cpp index ca8be3d8..92e69bb3 100644 --- a/tests/auto/common/test_backends.cpp +++ b/tests/auto/common/test_backends.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QtCore/QList> #include <QtCore/QMap> diff --git a/tests/auto/common/test_backends.h b/tests/auto/common/test_backends.h index 1aff64e5..06d827b7 100644 --- a/tests/auto/common/test_backends.h +++ b/tests/auto/common/test_backends.h @@ -1,5 +1,5 @@ // Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #ifndef TEST_BACKENDS_H #define TEST_BACKENDS_H @@ -36,6 +36,7 @@ void set_test_backend_busy(QSensor* sensor, bool busy); SensorClass ## _impl(QSensor *sensor);\ void start() override;\ void stop() override;\ + bool isFeatureSupported(QSensor::Feature feature) const override;\ };\ class SensorClass ## _testfilter : public FilterClass { bool filter(ReadingClass *) override; }; @@ -47,6 +48,11 @@ void set_test_backend_busy(QSensor* sensor, bool busy); newReadingAvailable();\ }\ void SensorClass ##_impl::stop() {}\ + bool SensorClass ##_impl::isFeatureSupported(QSensor::Feature feature) const { \ + if (feature == QSensor::Feature::SkipDuplicates) \ + return true; \ + return false; \ + } \ bool SensorClass ## _testfilter::filter(ReadingClass *) { return true; }\ static QSensorBackend *create_ ## SensorClass ## _impl(QSensor *sensor) { return new SensorClass ## _impl(sensor); }\ static bool registered_ ## SensorClass = registerTestBackend(#SensorClass, create_ ## SensorClass ## _impl); diff --git a/tests/auto/qml/qml_cpp/tst_sensors_qmlcpp.cpp b/tests/auto/qml/qml_cpp/tst_sensors_qmlcpp.cpp index 9a6fdf35..32d82348 100644 --- a/tests/auto/qml/qml_cpp/tst_sensors_qmlcpp.cpp +++ b/tests/auto/qml/qml_cpp/tst_sensors_qmlcpp.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QtTest/QtTest> #include <QtTest/QSignalSpy> diff --git a/tests/auto/qml/qml_quick/tst_sensors_basic.qml b/tests/auto/qml/qml_quick/tst_sensors_basic.qml index 687382ee..bcb21232 100644 --- a/tests/auto/qml/qml_quick/tst_sensors_basic.qml +++ b/tests/auto/qml/qml_quick/tst_sensors_basic.qml @@ -1,5 +1,5 @@ // Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only import QtTest import QtSensors @@ -201,4 +201,26 @@ TestCase { {tag: "IRProximitySensor", initialReading: {reflectance: 0.5}, newReading: {reflectance: 0.6}} ]; } + + function test_SupportedFeatures() + { + var sensor = Qt.createQmlObject("import QtSensors; Accelerometer \ + {identifier: \"QAccelerometer\"}", + testCase); + verify(sensor.start()) + verify(sensor.connectedToBackend) + + // According to isFeatureSupported() override implementation in test_backends.h, + // only SkipDuplicates should be supported afterwards + verify(!sensor.isFeatureSupported(Sensor.Buffering)) + verify(!sensor.isFeatureSupported(Sensor.AlwaysOn)) + verify(!sensor.isFeatureSupported(Sensor.GeoValues)) + verify(!sensor.isFeatureSupported(Sensor.FieldOfView)) + verify(!sensor.isFeatureSupported(Sensor.AccelerationMode)) + verify(sensor.isFeatureSupported(Sensor.SkipDuplicates)) + verify(!sensor.isFeatureSupported(Sensor.AxesOrientation)) + verify(!sensor.isFeatureSupported(Sensor.PressureSensorTemperature)) + + sensor.destroy() + } } diff --git a/tests/auto/qml/qml_quick/tst_sensors_qmlquick.cpp b/tests/auto/qml/qml_quick/tst_sensors_qmlquick.cpp index 302843fb..08bba9a5 100644 --- a/tests/auto/qml/qml_quick/tst_sensors_qmlquick.cpp +++ b/tests/auto/qml/qml_quick/tst_sensors_qmlquick.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QtQuickTest> #include <QtQml/QQmlEngine> diff --git a/tests/auto/qsensor/test_sensor.cpp b/tests/auto/qsensor/test_sensor.cpp index 30e390f6..3c36b595 100644 --- a/tests/auto/qsensor/test_sensor.cpp +++ b/tests/auto/qsensor/test_sensor.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include "test_sensor.h" #include "test_sensor_p.h" diff --git a/tests/auto/qsensor/test_sensor.h b/tests/auto/qsensor/test_sensor.h index ed5a7482..f75db083 100644 --- a/tests/auto/qsensor/test_sensor.h +++ b/tests/auto/qsensor/test_sensor.h @@ -1,5 +1,5 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #ifndef TEST_SENSOR_H #define TEST_SENSOR_H diff --git a/tests/auto/qsensor/test_sensor2.cpp b/tests/auto/qsensor/test_sensor2.cpp index 6c1b2e0a..e72c62d2 100644 --- a/tests/auto/qsensor/test_sensor2.cpp +++ b/tests/auto/qsensor/test_sensor2.cpp @@ -1,31 +1,9 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include "test_sensor2.h" #include "test_sensor2_p.h" -#undef IMPLEMENT_READING -#undef IMPLEMENT_READING_D - -#define IMPLEMENT_READING(classname)\ - IMPLEMENT_READING_D(classname, classname ## Private) - -#define IMPLEMENT_READING_D(classname, pclassname)\ - classname::classname(QObject *parent)\ - : QSensorReading(parent, new pclassname)\ - , d(d_ptr())\ - {}\ - classname::~classname() {}\ - void classname::copyValuesFrom(QSensorReading *_other)\ - {\ - /* No need to verify types, only called by QSensorBackend */\ - classname *other = static_cast<classname *>(_other);\ - pclassname *my_ptr = static_cast<pclassname*>(d_ptr()->data());\ - pclassname *other_ptr = static_cast<pclassname*>(other->d_ptr()->data());\ - /* Do a direct copy of the private class */\ - *(my_ptr) = *(other_ptr);\ - } - IMPLEMENT_READING(TestSensor2Reading) int TestSensor2Reading::test() const diff --git a/tests/auto/qsensor/test_sensor2.h b/tests/auto/qsensor/test_sensor2.h index 83d1926f..c5716001 100644 --- a/tests/auto/qsensor/test_sensor2.h +++ b/tests/auto/qsensor/test_sensor2.h @@ -1,43 +1,11 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #ifndef TEST_SENSOR2_H #define TEST_SENSOR2_H #include "qsensor.h" -#undef DECLARE_READING -#undef DECLARE_READING_D - -template <typename T> -class qTypedWrapper -{ -public: - qTypedWrapper(QScopedPointer<QSensorReadingPrivate> *_ptr) - : ptr(_ptr) - { - } - - T *operator->() const - { - return static_cast<T*>(ptr->data()); - } - -private: - QScopedPointer<QSensorReadingPrivate> *ptr; -}; - -#define DECLARE_READING(classname)\ - DECLARE_READING_D(classname, classname ## Private) - -#define DECLARE_READING_D(classname, pclassname)\ - public:\ - classname(QObject *parent = 0);\ - virtual ~classname();\ - void copyValuesFrom(QSensorReading *other) override;\ - private:\ - qTypedWrapper<pclassname> d; - class TestSensor2ReadingPrivate; class TestSensor2Reading : public QSensorReading diff --git a/tests/auto/qsensor/test_sensor2_p.h b/tests/auto/qsensor/test_sensor2_p.h index 31f10eb3..8ad4e495 100644 --- a/tests/auto/qsensor/test_sensor2_p.h +++ b/tests/auto/qsensor/test_sensor2_p.h @@ -1,5 +1,5 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #ifndef TEST_SENSOR2_P_H #define TEST_SENSOR2_P_H diff --git a/tests/auto/qsensor/test_sensor2impl.cpp b/tests/auto/qsensor/test_sensor2impl.cpp index 10b0a04b..795b1a00 100644 --- a/tests/auto/qsensor/test_sensor2impl.cpp +++ b/tests/auto/qsensor/test_sensor2impl.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include "test_sensor2impl.h" #include <qaccelerometer.h> diff --git a/tests/auto/qsensor/test_sensor2impl.h b/tests/auto/qsensor/test_sensor2impl.h index 80711470..269d1184 100644 --- a/tests/auto/qsensor/test_sensor2impl.h +++ b/tests/auto/qsensor/test_sensor2impl.h @@ -1,5 +1,5 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #ifndef TEST_SENSOR2IMPL_H #define TEST_SENSOR2IMPL_H diff --git a/tests/auto/qsensor/test_sensor_p.h b/tests/auto/qsensor/test_sensor_p.h index 0ab4268a..9737e292 100644 --- a/tests/auto/qsensor/test_sensor_p.h +++ b/tests/auto/qsensor/test_sensor_p.h @@ -1,5 +1,5 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #ifndef TEST_SENSOR_P_H #define TEST_SENSOR_P_H diff --git a/tests/auto/qsensor/test_sensorimpl.cpp b/tests/auto/qsensor/test_sensorimpl.cpp index 8e8e33f9..206b1786 100644 --- a/tests/auto/qsensor/test_sensorimpl.cpp +++ b/tests/auto/qsensor/test_sensorimpl.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include "test_sensorimpl.h" #include <QDebug> diff --git a/tests/auto/qsensor/test_sensorimpl.h b/tests/auto/qsensor/test_sensorimpl.h index ed353e7d..9d52e33f 100644 --- a/tests/auto/qsensor/test_sensorimpl.h +++ b/tests/auto/qsensor/test_sensorimpl.h @@ -1,5 +1,5 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #ifndef TEST_SENSORIMPL_H #define TEST_SENSORIMPL_H diff --git a/tests/auto/qsensor/test_sensorplugin.cpp b/tests/auto/qsensor/test_sensorplugin.cpp index dd5a4466..1734d3a9 100644 --- a/tests/auto/qsensor/test_sensorplugin.cpp +++ b/tests/auto/qsensor/test_sensorplugin.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include "test_sensorimpl.h" #include "test_sensor2impl.h" diff --git a/tests/auto/qsensor/tst_qsensor.cpp b/tests/auto/qsensor/tst_qsensor.cpp index 528fca31..261f81f9 100644 --- a/tests/auto/qsensor/tst_qsensor.cpp +++ b/tests/auto/qsensor/tst_qsensor.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only //TESTED_COMPONENT=src/sensors diff --git a/tests/manual/CMakeLists.txt b/tests/manual/CMakeLists.txt index a23fbcd8..8686f854 100644 --- a/tests/manual/CMakeLists.txt +++ b/tests/manual/CMakeLists.txt @@ -2,8 +2,9 @@ # SPDX-License-Identifier: BSD-3-Clause if(TARGET Qt::Widgets) - add_subdirectory(sensor_explorer) + add_subdirectory(sensor_explorer_widgets) endif() if (TARGET Qt::Quick) add_subdirectory(sensorclerk) + add_subdirectory(sensor_explorer_qml) endif() diff --git a/tests/manual/sensor_explorer_qml/CMakeLists.txt b/tests/manual/sensor_explorer_qml/CMakeLists.txt new file mode 100644 index 00000000..e68fce62 --- /dev/null +++ b/tests/manual/sensor_explorer_qml/CMakeLists.txt @@ -0,0 +1,32 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +cmake_minimum_required(VERSION 3.16) +project(tst_manual_sensor_explorer_qml LANGUAGES CXX) + +set(CMAKE_AUTOMOC ON) + +find_package(Qt6 REQUIRED COMPONENTS Qml Quick Sensors) + +qt_add_executable(tst_manual_sensor_explorer_qml + main.cpp + sensormodels.cpp sensormodels.h +) + +set_target_properties(tst_manual_sensor_explorer_qml PROPERTIES + WIN32_EXECUTABLE TRUE + MACOSX_BUNDLE TRUE +) + +target_link_libraries(tst_manual_sensor_explorer_qml PUBLIC + Qt::Qml + Qt::Quick + Qt::Sensors +) + +qt_add_qml_module(tst_manual_sensor_explorer_qml + URI SensorModels + VERSION 1.0 + QML_FILES sensor_explorer.qml + NO_RESOURCE_TARGET_PATH +) diff --git a/examples/sensors/sensor_explorer/main.cpp b/tests/manual/sensor_explorer_qml/main.cpp index 4eeaa147..604a6d36 100644 --- a/examples/sensors/sensor_explorer/main.cpp +++ b/tests/manual/sensor_explorer_qml/main.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QtQml> #include <QtQuick/QQuickWindow> diff --git a/examples/sensors/sensor_explorer/qml.qrc b/tests/manual/sensor_explorer_qml/qml.qrc index df6160ae..df6160ae 100644 --- a/examples/sensors/sensor_explorer/qml.qrc +++ b/tests/manual/sensor_explorer_qml/qml.qrc diff --git a/examples/sensors/sensor_explorer/sensor_explorer.qml b/tests/manual/sensor_explorer_qml/sensor_explorer.qml index 9fe59baa..e80fb0a4 100644 --- a/examples/sensors/sensor_explorer/sensor_explorer.qml +++ b/tests/manual/sensor_explorer_qml/sensor_explorer.qml @@ -1,14 +1,12 @@ // Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only import QtQuick import QtQuick.Window import QtQuick.Controls import QtQuick.Layouts -//! [0] import SensorModels -//! [0] Window { id: window @@ -74,14 +72,11 @@ Window { } } - //! [1] SensorPropertyModel { id: propertyModel sensor: availableSensorsModel.get(sensorsView.currentIndex) } - //! [1] - //! [2] Button { id: activateButton Layout.preferredHeight: 30 @@ -92,7 +87,6 @@ Window { : qsTr("Activate sensor")) onClicked: propertyModel.sensor.active = !propertyModel.sensor.active } - //! [2] GroupBox { title: qsTr("Selected sensor's properties") @@ -101,7 +95,6 @@ Window { Layout.margins: 2 enabled: sensorsView.currentIndex != -1 - //! [3] TableView { id: propertyView anchors.fill: parent @@ -121,7 +114,6 @@ Window { } } } - //! [3] } } } diff --git a/examples/sensors/sensor_explorer/sensormodels.cpp b/tests/manual/sensor_explorer_qml/sensormodels.cpp index f9ed4d90..36de4412 100644 --- a/examples/sensors/sensor_explorer/sensormodels.cpp +++ b/tests/manual/sensor_explorer_qml/sensormodels.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include "sensormodels.h" #include "qsensor.h" @@ -51,7 +51,6 @@ AvailableSensorsModel::AvailableSensorsModel(QObject* parent) : QAbstractListMod */ void AvailableSensorsModel::loadSensors() { - //! [0] beginResetModel(); m_availableSensors.clear(); @@ -66,7 +65,6 @@ void AvailableSensorsModel::loadSensors() } } endResetModel(); - //! [0] } int AvailableSensorsModel::rowCount(const QModelIndex&) const @@ -74,14 +72,12 @@ int AvailableSensorsModel::rowCount(const QModelIndex&) const return m_availableSensors.size(); } -//! [1] QVariant AvailableSensorsModel::data(const QModelIndex &index, int role) const { if (role != Qt::DisplayRole) return QVariant(); return QVariant::fromValue<QSensor*>(m_availableSensors.at(index.row())); } -//! [1] QSensor* AvailableSensorsModel::get(int index) const { @@ -134,7 +130,6 @@ void SensorPropertyModel::setSensor(QSensor *sensor) // available sensors without knowing their properties in advance / compile-time. // 1. Read properties of the 'reading' object if available - //! [2] int firstProperty = QSensorReading::staticMetaObject.propertyOffset(); QSensorReading *reading = m_sensor->reading(); if (reading) { @@ -145,7 +140,6 @@ void SensorPropertyModel::setSensor(QSensor *sensor) (name, reading->property(name).toByteArray())); } } - //! [2] // 2. Read properties of the 'sensor' object const QMetaObject *mo1 = m_sensor->metaObject(); diff --git a/examples/sensors/sensor_explorer/sensormodels.h b/tests/manual/sensor_explorer_qml/sensormodels.h index 02de2a8e..4f16d6fd 100644 --- a/examples/sensors/sensor_explorer/sensormodels.h +++ b/tests/manual/sensor_explorer_qml/sensormodels.h @@ -1,5 +1,5 @@ // Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #ifndef QSEONSOREXPLORER_H #define QSEONSOREXPLORER_H @@ -12,12 +12,10 @@ QT_BEGIN_NAMESPACE -//! [0] class AvailableSensorsModel: public QAbstractListModel { Q_OBJECT QML_ELEMENT -//! [0] public: explicit AvailableSensorsModel(QObject* parent = nullptr); int rowCount(const QModelIndex & = QModelIndex()) const override; diff --git a/tests/manual/sensor_explorer/CMakeLists.txt b/tests/manual/sensor_explorer_widgets/CMakeLists.txt index 2f32dc91..357eb02e 100644 --- a/tests/manual/sensor_explorer/CMakeLists.txt +++ b/tests/manual/sensor_explorer_widgets/CMakeLists.txt @@ -5,7 +5,7 @@ ## sensor_explorer Binary: ##################################################################### -qt_internal_add_manual_test(tst_manual_sensor_explorer +qt_internal_add_manual_test(tst_manual_sensor_explorer_widgets GUI SOURCES explorer.cpp explorer.h explorer.ui diff --git a/tests/manual/sensor_explorer/explorer.cpp b/tests/manual/sensor_explorer_widgets/explorer.cpp index e6353c01..16a4582b 100644 --- a/tests/manual/sensor_explorer/explorer.cpp +++ b/tests/manual/sensor_explorer_widgets/explorer.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include "explorer.h" #include <QTimer> diff --git a/tests/manual/sensor_explorer/explorer.h b/tests/manual/sensor_explorer_widgets/explorer.h index 92aa6f47..05e200f3 100644 --- a/tests/manual/sensor_explorer/explorer.h +++ b/tests/manual/sensor_explorer_widgets/explorer.h @@ -1,5 +1,5 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #ifndef EXPLORER_H #define EXPLORER_H diff --git a/tests/manual/sensor_explorer/explorer.ui b/tests/manual/sensor_explorer_widgets/explorer.ui index 166e9c36..166e9c36 100644 --- a/tests/manual/sensor_explorer/explorer.ui +++ b/tests/manual/sensor_explorer_widgets/explorer.ui diff --git a/tests/manual/sensor_explorer/main.cpp b/tests/manual/sensor_explorer_widgets/main.cpp index 0e2ea93d..005ec17d 100644 --- a/tests/manual/sensor_explorer/main.cpp +++ b/tests/manual/sensor_explorer_widgets/main.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include "explorer.h" diff --git a/tests/manual/sensorclerk/collector.cpp b/tests/manual/sensorclerk/collector.cpp index 1a8ab457..4ebc7203 100644 --- a/tests/manual/sensorclerk/collector.cpp +++ b/tests/manual/sensorclerk/collector.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2017 Lorn Potter. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QtQml/qqml.h> #include <QtCore/QFile> diff --git a/tests/manual/sensorclerk/collector.h b/tests/manual/sensorclerk/collector.h index 25cd2373..0f1098c9 100644 --- a/tests/manual/sensorclerk/collector.h +++ b/tests/manual/sensorclerk/collector.h @@ -1,5 +1,5 @@ // Copyright (C) 2017 Lorn Potter. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #ifndef COLLECTOR_H #define COLLECTOR_H diff --git a/tests/manual/sensorclerk/main.cpp b/tests/manual/sensorclerk/main.cpp index 19028e9f..468f1d88 100644 --- a/tests/manual/sensorclerk/main.cpp +++ b/tests/manual/sensorclerk/main.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2017 Lorn Potter. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QGuiApplication> #include <QtQuick/QQuickView> diff --git a/tests/manual/sensorclerk/qml/main.qml b/tests/manual/sensorclerk/qml/main.qml index a7c5cd88..0853599c 100644 --- a/tests/manual/sensorclerk/qml/main.qml +++ b/tests/manual/sensorclerk/qml/main.qml @@ -1,5 +1,5 @@ // Copyright (C) 2017 Lorn Potter. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only import QtQuick import QtQuick.Controls import Collector |