diff options
author | Indivara Weerasuriya <indivara.weerasuriya@qt.io> | 2024-07-30 19:47:24 +0900 |
---|---|---|
committer | Jan-Simon Moeller <jsmoeller@linuxfoundation.org> | 2024-11-20 13:35:26 +0000 |
commit | 59ae0b13d2bb14fbf12117f2f55bfcb6f06f104b (patch) | |
tree | ba38354db9033675bde1ad07700d796160450f8f | |
parent | a37e8ed0c8f997e13d719c7e5d956b5febc9cfa5 (diff) |
Migrate demo app recipes and patch apps to Qt 6
Bug-AGL: SPEC-5294
Change-Id: I6b9ff940745f88af9a3b69e29917082e52b25f88
Signed-off-by: Indivara Weerasuriya <indivara.weerasuriya@qt.io>
Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl-demo/+/30141
Reviewed-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
Tested-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
32 files changed, 2268 insertions, 63 deletions
diff --git a/recipes-demo/cluster-dashboard/cluster-dashboard_git.bb b/recipes-demo/cluster-dashboard/cluster-dashboard_git.bb index ddf259ad0..c5a56f434 100644 --- a/recipes-demo/cluster-dashboard/cluster-dashboard_git.bb +++ b/recipes-demo/cluster-dashboard/cluster-dashboard_git.bb @@ -8,7 +8,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984 \ file://app/cluster-gauges.qml;beginline=9;endline=48;md5=54187d50b29429abee6095fe8b7c1a78" DEPENDS = " \ - qtquickcontrols2 \ + qtdeclarative \ libqtappfw \ glib-2.0 \ wayland wayland-native \ @@ -27,7 +27,7 @@ SRCREV = "5b69d50808ea4d90af1cdb037f25309baae23fdf" S = "${WORKDIR}/git" -inherit pkgconfig cmake_qt5 update-alternatives systemd +inherit pkgconfig qt6-cmake update-alternatives systemd CLUSTER_DEMO_VSS_HOSTNAME ??= "192.168.10.2" @@ -67,10 +67,7 @@ ALTERNATIVE_TARGET_${PN}-conf-demo = "${sysconfdir}/xdg/AGL/cluster-dashboard.co RDEPENDS:${PN} += " \ qtwayland \ qtbase-qmlplugins \ - qtquickcontrols \ - qtquickcontrols-qmlplugins \ - qtquickcontrols2 \ - qtquickcontrols2-qmlplugins \ - qtgraphicaleffects-qmlplugins \ + qtdeclarative \ + qt5compat \ qtsvg-plugins \ " diff --git a/recipes-demo/cluster-receiver/qt-cluster-receiver_git.bb b/recipes-demo/cluster-receiver/qt-cluster-receiver_git.bb index e146a00d4..596843fd6 100644 --- a/recipes-demo/cluster-receiver/qt-cluster-receiver_git.bb +++ b/recipes-demo/cluster-receiver/qt-cluster-receiver_git.bb @@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984 \ DEPENDS = " \ wayland wayland-native \ qtwayland qtwayland-native \ - qtquickcontrols2 qtwebsockets qtbase qtdeclarative \ + qtdeclarative qtwebsockets qtbase qtdeclarative \ gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad \ " @@ -23,7 +23,7 @@ SRCREV = "b3ea52f3c9b4ff11447151f086f3c314cada148a" S = "${WORKDIR}/git" -inherit cmake_qt5 pkgconfig systemd +inherit qt6-cmake pkgconfig systemd do_install:append() { # Only install unit, do not enable it by default diff --git a/recipes-demo/dashboard/dashboard/0001-Migrate-to-Qt-6.patch b/recipes-demo/dashboard/dashboard/0001-Migrate-to-Qt-6.patch new file mode 100644 index 000000000..b43008fdd --- /dev/null +++ b/recipes-demo/dashboard/dashboard/0001-Migrate-to-Qt-6.patch @@ -0,0 +1,72 @@ +From 00e6b77cef1f3b07dc49653d513628e452d71a8d Mon Sep 17 00:00:00 2001 +From: Indivara Weerasuriya <1806262-indivara@users.noreply.git.qt.io> +Date: Wed, 24 Jul 2024 09:05:10 +0900 +Subject: [PATCH] Migrate to Qt 6 + +--- + app/Dashboard.qml | 8 ++++---- + app/TirePressure.qml | 4 ++-- + 2 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/app/Dashboard.qml b/app/Dashboard.qml +index 1a797c6..5aabaf0 100644 +--- a/app/Dashboard.qml ++++ b/app/Dashboard.qml +@@ -118,7 +118,7 @@ ApplicationWindow { + Image { + id: car + anchors.centerIn: parent +- source: './images/HMI_Dashboard_Car.png' ++ source: 'qrc:/images/HMI_Dashboard_Car.png' + } + + TirePressure { +@@ -167,7 +167,7 @@ ApplicationWindow { + + Image { + id: speedIcon +- source: './images/HMI_Dashboard_Speed_Icon.svg' ++ source: 'qrc:/images/HMI_Dashboard_Speed_Icon.svg' + } + ProgressBar { + id: tachometer +@@ -187,7 +187,7 @@ ApplicationWindow { + } + Image { + id: fuelIcon +- source: './images/HMI_Dashboard_Fuel_Icon.svg' ++ source: 'qrc:/images/HMI_Dashboard_Fuel_Icon.svg' + } + ProgressBar { + Layout.fillWidth: true +@@ -196,7 +196,7 @@ ApplicationWindow { + anchors.left: parent.left + anchors.leftMargin: -40 + anchors.bottom: parent.top +- source: './images/HMI_Dashboard_Fuel_Details.svg' ++ source: 'qrc:/images/HMI_Dashboard_Fuel_Details.svg' + GridLayout { + anchors.fill: parent + columns: 2 +diff --git a/app/TirePressure.qml b/app/TirePressure.qml +index 437cf2f..eb02482 100644 +--- a/app/TirePressure.qml ++++ b/app/TirePressure.qml +@@ -31,7 +31,7 @@ Image { + when: !mirror + PropertyChanges { + target: root +- source: './images/HMI_Dashboard_LeftTire.svg' ++ source: 'qrc:/images/HMI_Dashboard_LeftTire.svg' + } + AnchorChanges { + target: title +@@ -47,7 +47,7 @@ Image { + when: mirror + PropertyChanges { + target: root +- source: './images/HMI_Dashboard_RightTire.svg' ++ source: 'qrc:/images/HMI_Dashboard_RightTire.svg' + } + AnchorChanges { + target: title diff --git a/recipes-demo/dashboard/dashboard_git.bb b/recipes-demo/dashboard/dashboard_git.bb index c0ca244cc..c4385400b 100644 --- a/recipes-demo/dashboard/dashboard_git.bb +++ b/recipes-demo/dashboard/dashboard_git.bb @@ -8,7 +8,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" DEPENDS = " \ qttools-native \ - qtquickcontrols2 \ + qtdeclarative \ libqtappfw \ " @@ -17,12 +17,13 @@ PV = "2.0+git${SRCPV}" SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/dashboard;protocol=https;branch=${AGL_BRANCH} \ file://dashboard.conf \ file://dashboard.token \ -" + file://0001-Migrate-to-Qt-6.patch \ + " SRCREV = "b1b67ab525555a082ca257ad08fc4fba9b1f74e3" S = "${WORKDIR}/git" -inherit qmake5 pkgconfig agl-app +inherit qt6-qmake pkgconfig agl-app AGL_APP_NAME = "Dashboard" @@ -42,6 +43,6 @@ do_install:append() { RDEPENDS:${PN} += " \ qtwayland \ qtbase-qmlplugins \ - qtgraphicaleffects-qmlplugins \ + qt5compat \ qtquickcontrols2-agl-style \ " diff --git a/recipes-demo/homescreen/files/0001-Migrate-to-Qt-6.patch b/recipes-demo/homescreen/files/0001-Migrate-to-Qt-6.patch new file mode 100644 index 000000000..89e992b4b --- /dev/null +++ b/recipes-demo/homescreen/files/0001-Migrate-to-Qt-6.patch @@ -0,0 +1,338 @@ +From 8c60817ccf80502c03d3852afac006e25903d4b9 Mon Sep 17 00:00:00 2001 +From: Indivara Weerasuriya <1806262-indivara@users.noreply.git.qt.io> +Date: Wed, 24 Jul 2024 09:08:36 +0900 +Subject: [PATCH] Migrate to Qt 6 + +--- + homescreen/meson.build | 16 ++++++++-------- + homescreen/qml/IconItem.qml | 4 ++-- + homescreen/qml/MediaAreaBlank.qml | 4 ++-- + homescreen/qml/MediaAreaMusic.qml | 14 +++++++------- + homescreen/qml/MediaAreaRadio.qml | 2 +- + homescreen/qml/ShortcutIcon.qml | 6 +++--- + homescreen/qml/SpeechChrome.qml | 6 +++--- + homescreen/qml/StatusArea.qml | 6 +++--- + homescreen/qml/TopArea.qml | 2 +- + homescreen/qml/background.qml | 2 +- + homescreen/qml/background_with_panels.qml | 4 ++-- + meson.build | 2 +- + 12 files changed, 34 insertions(+), 34 deletions(-) + +diff --git a/homescreen/meson.build b/homescreen/meson.build +index 4b98cd1..42645a1 100644 +--- a/homescreen/meson.build ++++ b/homescreen/meson.build +@@ -1,5 +1,5 @@ + cpp = meson.get_compiler('cpp') +-qt5_dep = dependency('qt5', modules: ['Qml', 'Quick', 'Gui']) ++qt_dep = dependency('qt6', modules: ['Core', 'Qml', 'Quick', 'Gui']) + dep_wayland_client = dependency('wayland-client', version: '>= 1.20.0') + dep_qtappfw = [ + dependency('qtappfw-weather'), +@@ -14,11 +14,11 @@ protoc = find_program('protoc') + grpc_cpp = find_program('grpc_cpp_plugin') + + qt_defines = [] +-qpa_header_path = join_paths(qt5_dep.version(), 'QtGui') ++qpa_header_path = join_paths(qt_dep.version(), 'QtGui') + qpa_header = join_paths(qpa_header_path, 'qpa/qplatformnativeinterface.h') + # we pass this QT_QPA_HEADER straight in the code as there's no easy + # way to pass the correct header +-if cpp.has_header(qpa_header, dependencies : qt5_dep) ++if cpp.has_header(qpa_header, dependencies : qt_dep) + qt_defines += [ '-DQT_QPA_HEADER=<@0@>'.format(qpa_header) ] + message('Found QtGui QPA header in ' + qpa_header_path) + endif +@@ -41,7 +41,7 @@ grpc_gen = generator(protoc, \ + output : ['@BASENAME@.grpc.pb.cc', '@BASENAME@.grpc.pb.h'], + arguments : ['--proto_path=@CURRENT_SOURCE_DIR@/proto', + '--grpc_out=@BUILD_DIR@', +- '--plugin=protoc-gen-grpc=' + grpc_cpp.path(), ++ '--plugin=protoc-gen-grpc=' + grpc_cpp.full_path(), + '@INPUT@']) + generated_grpc_sources = grpc_gen.process('proto/agl_shell.proto') + +@@ -54,7 +54,7 @@ grpc_deps = [ + + + homescreen_dep = [ +- qt5_dep, ++ qt_dep, + dep_wayland_client, + dep_qtappfw, + grpc_deps +@@ -70,7 +70,7 @@ homescreen_resources = [ + 'qml/qml.qrc' + ] + +-resource_files = qt5.compile_resources(sources: homescreen_resources) ++resource_files = qt.compile_resources(sources: homescreen_resources) + + protocols = [ + [ 'agl-shell', 'agl-compositor' ], +@@ -116,8 +116,8 @@ homescreen_src_headers = [ + 'src/AglShellGrpcClient.h', + ] + +-moc_files = qt5.compile_moc(headers: homescreen_src_headers, +- dependencies: qt5_dep) ++moc_files = qt.compile_moc(headers: homescreen_src_headers, ++ dependencies: qt_dep) + + homescreen_src = [ + 'src/statusbarserver.cpp', +diff --git a/homescreen/qml/IconItem.qml b/homescreen/qml/IconItem.qml +index ace0628..034a51d 100644 +--- a/homescreen/qml/IconItem.qml ++++ b/homescreen/qml/IconItem.qml +@@ -1,6 +1,6 @@ + import QtQuick 2.0 + import QtQuick.Controls 2.0 +-import QtGraphicalEffects 1.0 ++import Qt5Compat.GraphicalEffects + + Item { + id: main +@@ -23,7 +23,7 @@ Item { + anchors.horizontalCenter: parent.horizontalCenter + width: 220 + height: width +- source: './images/%1_%2.svg'.arg(model.icon).arg(loc.pressed && (loc.index === model.index || loc.currentId === model.id) ? 'active' : 'inactive') ++ source: 'qrc:/images/%1_%2.svg'.arg(model.icon).arg(loc.pressed && (loc.index === model.index || loc.currentId === model.id) ? 'active' : 'inactive') + antialiasing: item.state !== '' + + property string initial: model.name.substring(0,1).toUpperCase() +diff --git a/homescreen/qml/MediaAreaBlank.qml b/homescreen/qml/MediaAreaBlank.qml +index b758a7d..3c7ff51 100644 +--- a/homescreen/qml/MediaAreaBlank.qml ++++ b/homescreen/qml/MediaAreaBlank.qml +@@ -23,7 +23,7 @@ import MasterVolume 1.0 + + Image { + anchors.fill: parent +- source: './images/Utility_Logo_Background-01.svg' ++ source: 'qrc:/images/Utility_Logo_Background-01.svg' + property bool displayVolume: false; + + MouseArea { +@@ -41,7 +41,7 @@ Image { + Image { + id: logo_image + anchors.centerIn: parent +- source: './images/Utility_Logo_Grey-01.svg' ++ source: 'qrc:/images/Utility_Logo_Grey-01.svg' + } + + Timer { +diff --git a/homescreen/qml/MediaAreaMusic.qml b/homescreen/qml/MediaAreaMusic.qml +index 6d72003..ffb9796 100644 +--- a/homescreen/qml/MediaAreaMusic.qml ++++ b/homescreen/qml/MediaAreaMusic.qml +@@ -22,7 +22,7 @@ import QtQuick.Controls 2.0 + Image { + width: 1080 + height: 216 +- source: './images/Utility_Music_Background-01.png' ++ source: 'qrc:/images/Utility_Music_Background-01.png' + + ColumnLayout { + anchors.fill: parent +@@ -33,7 +33,7 @@ Image { + Layout.preferredHeight: 107 + spacing: 10 + Image { +- source: './images/MediaMusic/AlbumArtwork.png' ++ source: 'qrc:/images/MediaMusic/AlbumArtwork.png' + width: 105.298 + height: 110.179 + fillMode: Image.PreserveAspectFit +@@ -51,13 +51,13 @@ Image { + Layout.fillHeight: true + Layout.preferredHeight: 107 + Image { +- source: './images/MediaPlayer/AGL_MediaPlayer_BackArrow.png' ++ source: 'qrc:/images/MediaPlayer/AGL_MediaPlayer_BackArrow.png' + } + Image { +- source: './images/MediaPlayer/AGL_MediaPlayer_Player_Pause.png' ++ source: 'qrc:/images/MediaPlayer/AGL_MediaPlayer_Player_Pause.png' + } + Image { +- source: './images/MediaPlayer/AGL_MediaPlayer_ForwardArrow.png' ++ source: 'qrc:/images/MediaPlayer/AGL_MediaPlayer_ForwardArrow.png' + } + + ProgressBar { +@@ -71,10 +71,10 @@ Image { + font.pixelSize: 20 + } + Image { +- source: './images/MediaPlayer/AGL_MediaPlayer_Shuffle_Active.png' ++ source: 'qrc:/images/MediaPlayer/AGL_MediaPlayer_Shuffle_Active.png' + } + Image { +- source: './images/MediaPlayer/AGL_MediaPlayer_Shuffle_Active.png' ++ source: 'qrc:/images/MediaPlayer/AGL_MediaPlayer_Shuffle_Active.png' + } + ProgressBar { + Layout.fillWidth: true +diff --git a/homescreen/qml/MediaAreaRadio.qml b/homescreen/qml/MediaAreaRadio.qml +index 73ab073..ed73000 100644 +--- a/homescreen/qml/MediaAreaRadio.qml ++++ b/homescreen/qml/MediaAreaRadio.qml +@@ -20,5 +20,5 @@ import QtQuick 2.2 + Image { + width: 1080 + height: 216 +- source: './images/Utility_Radio_Background-01.png' ++ source: 'qrc:/images/Utility_Radio_Background-01.png' + } +diff --git a/homescreen/qml/ShortcutIcon.qml b/homescreen/qml/ShortcutIcon.qml +index d039d36..f67a992 100644 +--- a/homescreen/qml/ShortcutIcon.qml ++++ b/homescreen/qml/ShortcutIcon.qml +@@ -17,7 +17,7 @@ + + import QtQuick 2.2 + import QtQuick.Controls 2.0 +-import QtGraphicalEffects 1.0 ++import Qt5Compat.GraphicalEffects + + MouseArea { + id: root +@@ -30,13 +30,13 @@ MouseArea { + Image { + id: inactiveIcon + anchors.fill: parent +- source: './images/Shortcut/%1.svg'.arg(root.name.toLowerCase()) ++ source: 'qrc:/images/Shortcut/%1.svg'.arg(root.name.toLowerCase()) + fillMode: Image.PreserveAspectFit + } + Image { + id: activeIcon + anchors.fill: parent +- source: './images/Shortcut/%1_active.svg'.arg(root.name.toLowerCase()) ++ source: 'qrc:/images/Shortcut/%1_active.svg'.arg(root.name.toLowerCase()) + fillMode: Image.PreserveAspectFit + opacity: 0.0 + } +diff --git a/homescreen/qml/SpeechChrome.qml b/homescreen/qml/SpeechChrome.qml +index 123928c..e666f44 100644 +--- a/homescreen/qml/SpeechChrome.qml ++++ b/homescreen/qml/SpeechChrome.qml +@@ -15,7 +15,7 @@ Item { + id: chromeBarImage + + anchors.top: parent.top +- source: "./images/SpeechChrome/bar.png" ++ source: "qrc:/images/SpeechChrome/bar.png" + + Behavior on x { + NumberAnimation { duration: 250 } +@@ -34,7 +34,7 @@ Item { + anchors.left: parent.left + anchors.leftMargin: parent.width / 128 + anchors.verticalCenter: parent.verticalCenter +- source: agentName === "Alexa" ? "./images/SpeechChrome/push_to_talk_alexa.png" : "./images/SpeechChrome/push_to_talk.svg" ++ source: agentName === "Alexa" ? "qrc:/images/SpeechChrome/push_to_talk_alexa.png" : "qrc:/images/SpeechChrome/push_to_talk.svg" + + MouseArea { + anchors.fill: parent +@@ -55,7 +55,7 @@ Item { + anchors.right: parent.right + anchors.rightMargin: parent.width / 128 + anchors.verticalCenter: parent.verticalCenter +- source: agentName === "Alexa" ? "./images/SpeechChrome/push_to_talk_alexa.png" : "./images/SpeechChrome/push_to_talk.svg" ++ source: agentName === "Alexa" ? "qrc:/images/SpeechChrome/push_to_talk_alexa.png" : "qrc:/images/SpeechChrome/push_to_talk.svg" + + MouseArea { + anchors.fill: parent +diff --git a/homescreen/qml/StatusArea.qml b/homescreen/qml/StatusArea.qml +index 4a8fbc0..03c60ee 100644 +--- a/homescreen/qml/StatusArea.qml ++++ b/homescreen/qml/StatusArea.qml +@@ -47,7 +47,7 @@ Item { + icon = "WeatherIcons_Rain-01.png" + } + +- condition_item.source = icon ? './images/Weather/' + icon : '' ++ condition_item.source = icon ? 'qrc:/images/Weather/' + icon : '' + } + + onTemperatureChanged: { +@@ -99,7 +99,7 @@ Item { + Layout.preferredHeight: 20 + Image { + id: condition_item +- source: './images/Weather/WeatherIcons_Rain-01.png' ++ source: 'qrc:/images/Weather/WeatherIcons_Rain-01.png' + } + Text { + id: temperature_item +@@ -122,7 +122,7 @@ Item { + id: bt_icon + Layout.preferredWidth: 77 + Layout.preferredHeight: 73 +- source: connStatus ? './images/Status/HMI_Status_Bluetooth_On-01.png' : './images/Status/HMI_Status_Bluetooth_Inactive-01.png' ++ source: connStatus ? 'qrc:/images/Status/HMI_Status_Bluetooth_On-01.png' : 'qrc:/images/Status/HMI_Status_Bluetooth_Inactive-01.png' + fillMode: Image.PreserveAspectFit + property string deviceName: "none" + property bool connStatus: false +diff --git a/homescreen/qml/TopArea.qml b/homescreen/qml/TopArea.qml +index 3b0b25a..3b5289c 100644 +--- a/homescreen/qml/TopArea.qml ++++ b/homescreen/qml/TopArea.qml +@@ -21,7 +21,7 @@ import QtQuick.Controls 2.0 + + Image { + anchors.fill: parent +- source: './images/TopSection_NoText_NoIcons-01.svg' ++ source: 'qrc:/images/TopSection_NoText_NoIcons-01.svg' + //fillMode: Image.PreserveAspectCrop + fillMode: Image.Stretch + +diff --git a/homescreen/qml/background.qml b/homescreen/qml/background.qml +index c2bb309..a2ba39c 100644 +--- a/homescreen/qml/background.qml ++++ b/homescreen/qml/background.qml +@@ -10,6 +10,6 @@ Window { + + Image { + anchors.fill: parent +- source: './images/AGL_HMI_Blue_Background_NoCar-01.png' ++ source: 'qrc:/images/AGL_HMI_Blue_Background_NoCar-01.png' + } + } +diff --git a/homescreen/qml/background_with_panels.qml b/homescreen/qml/background_with_panels.qml +index f0cb958..c7cca7c 100644 +--- a/homescreen/qml/background_with_panels.qml ++++ b/homescreen/qml/background_with_panels.qml +@@ -75,7 +75,7 @@ Window { + + Image { + anchors.fill: parent +- source: './images/TopSection_NoText_NoIcons-01.svg' ++ source: 'qrc:/images/TopSection_NoText_NoIcons-01.svg' + //fillMode: Image.PreserveAspectCrop + fillMode: Image.Stretch + +@@ -104,7 +104,7 @@ Window { + height: Screen.height - (2 * 216) + Image { + anchors.fill: parent +- source: './images/AGL_HMI_Blue_Background_NoCar-01.png' ++ source: 'qrc:/images/AGL_HMI_Blue_Background_NoCar-01.png' + } + + } +diff --git a/meson.build b/meson.build +index 3d77b36..9ce3607 100644 +--- a/meson.build ++++ b/meson.build +@@ -29,5 +29,5 @@ project ( + ], + ) + +-qt5 = import('qt5') ++qt = import('qt6') + subdir('homescreen') diff --git a/recipes-demo/homescreen/homescreen_git.bb b/recipes-demo/homescreen/homescreen_git.bb index 1f8e0c775..22f9adbd9 100644 --- a/recipes-demo/homescreen/homescreen_git.bb +++ b/recipes-demo/homescreen/homescreen_git.bb @@ -8,7 +8,6 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" DEPENDS = " \ qtbase \ qtdeclarative \ - qtquickcontrols2 \ libqtappfw \ wayland-native \ wayland \ @@ -26,12 +25,13 @@ SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/homescreen;protocol=http file://homescreen.service \ file://homescreen.conf \ file://homescreen.token \ -" + file://0001-Migrate-to-Qt-6.patch \ + " SRCREV = "2c91ad7b3b125176b2e26b435705557a089604a0" S = "${WORKDIR}/git" -inherit meson pkgconfig systemd +inherit meson pkgconfig systemd meson_qt6_path PATH:prepend = "${STAGING_DIR_NATIVE}${OE_QMAKE_PATH_QT_BINS}:" @@ -59,5 +59,6 @@ RDEPENDS:${PN} += " \ applaunchd \ qtwayland \ qtbase-qmlplugins \ - qtgraphicaleffects-qmlplugins \ + qt5compat \ + qtshadertools \ " diff --git a/recipes-demo/hvac/hvac/0001-Migrate-to-Qt-6.patch b/recipes-demo/hvac/hvac/0001-Migrate-to-Qt-6.patch new file mode 100644 index 000000000..f19cabc4b --- /dev/null +++ b/recipes-demo/hvac/hvac/0001-Migrate-to-Qt-6.patch @@ -0,0 +1,119 @@ +From 2a425094986a7ad5c584803e03ff723689fa1b47 Mon Sep 17 00:00:00 2001 +From: Indivara Weerasuriya <1806262-indivara@users.noreply.git.qt.io> +Date: Wed, 24 Jul 2024 09:18:03 +0900 +Subject: [PATCH] Migrate to Qt 6 + +--- + app/HVAC.qml | 19 +++++++++---------- + app/SeatHeatButton.qml | 10 +++++----- + 2 files changed, 14 insertions(+), 15 deletions(-) + +diff --git a/app/HVAC.qml b/app/HVAC.qml +index 4e27e2d..592dd1b 100644 +--- a/app/HVAC.qml ++++ b/app/HVAC.qml +@@ -43,7 +43,6 @@ ApplicationWindow { + anchors.centerIn: parent + width: Window.width + height: Window.height +- scale: Window.scale + + ColumnLayout { + anchors.fill: parent +@@ -53,7 +52,7 @@ ApplicationWindow { + Layout.fillHeight: true + Layout.alignment: Qt.AlignHCenter + Image { +- source: './images/HMI_HVAC_Fan_Icon.svg' ++ source: 'qrc:/images/HMI_HVAC_Fan_Icon.svg' + } + Item { + width: 1080 * 0.8 +@@ -100,8 +99,8 @@ ApplicationWindow { + Layout.fillWidth: true + spacing: 20 + ToggleButton { +- onImage: './images/HMI_HVAC_Active.svg' +- offImage: './images/HMI_HVAC_Inactive.svg' ++ onImage: 'qrc:/images/HMI_HVAC_Active.svg' ++ offImage: 'qrc:/images/HMI_HVAC_Inactive.svg' + Label { + anchors.centerIn: parent + color: parent.checked ? '#00ADDC' : '#848286' +@@ -113,8 +112,8 @@ ApplicationWindow { + } + } + ToggleButton { +- onImage: './images/HMI_HVAC_Active.svg' +- offImage: './images/HMI_HVAC_Inactive.svg' ++ onImage: 'qrc:/images/HMI_HVAC_Active.svg' ++ offImage: 'qrc:/images/HMI_HVAC_Inactive.svg' + Label { + anchors.centerIn: parent + color: parent.checked ? '#00ADDC' : '#848286' +@@ -126,8 +125,8 @@ ApplicationWindow { + } + } + ToggleButton { +- onImage: './images/HMI_HVAC_Circulation_Active.svg' +- offImage: './images/HMI_HVAC_Circulation_Inactive.svg' ++ onImage: 'qrc:/images/HMI_HVAC_Circulation_Active.svg' ++ offImage: 'qrc:/images/HMI_HVAC_Circulation_Inactive.svg' + onCheckedChanged: { + console.debug('Circulation', checked) + } +@@ -157,8 +156,8 @@ ApplicationWindow { + Repeater { + model: ['AirDown', 'AirUp', 'AirRight', 'Rear', 'Front'] + ToggleButton { +- onImage: './images/HMI_HVAC_%1_Active.svg'.arg(model.modelData) +- offImage: './images/HMI_HVAC_%1_Inactive.svg'.arg(model.modelData) ++ onImage: 'qrc:/images/HMI_HVAC_%1_Active.svg'.arg(model.modelData) ++ offImage: 'qrc:/images/HMI_HVAC_%1_Inactive.svg'.arg(model.modelData) + onCheckedChanged: { + console.debug(model.modelData, checked) + } +diff --git a/app/SeatHeatButton.qml b/app/SeatHeatButton.qml +index 3495cf6..7e2e1d4 100644 +--- a/app/SeatHeatButton.qml ++++ b/app/SeatHeatButton.qml +@@ -33,13 +33,13 @@ Item { + anchors.centerIn: parent + Image { + id: chair +- source: './images/HMI_HVAC_%1_Chair_OFF.svg'.arg(root.side) ++ source: 'qrc:/images/HMI_HVAC_%1_Chair_OFF.svg'.arg(root.side) + states: [ + State { + when: root.headLevel > 0 + PropertyChanges { + target: chair +- source: './images/HMI_HVAC_%1_Chair_ON.svg'.arg(root.side) ++ source: 'qrc:/images/HMI_HVAC_%1_Chair_ON.svg'.arg(root.side) + } + } + ] +@@ -48,20 +48,20 @@ Item { + id: indicator + width: 178 + height: 18 +- source: './images/HMI_HVAC_ChairIndicator_OFF.svg' ++ source: 'qrc:/images/HMI_HVAC_ChairIndicator_OFF.svg' + states: [ + State { + when: root.headLevel === 1 + PropertyChanges { + target: indicator +- source: './images/HMI_HVAC_ChairIndicator_One.svg' ++ source: 'qrc:/images/HMI_HVAC_ChairIndicator_One.svg' + } + }, + State { + when: root.headLevel === 2 + PropertyChanges { + target: indicator +- source: './images/HMI_HVAC_ChairIndicator_Two.svg' ++ source: 'qrc:/images/HMI_HVAC_ChairIndicator_Two.svg' + } + } + ] diff --git a/recipes-demo/hvac/hvac_git.bb b/recipes-demo/hvac/hvac_git.bb index 2ac6a69b1..e17490444 100644 --- a/recipes-demo/hvac/hvac_git.bb +++ b/recipes-demo/hvac/hvac_git.bb @@ -10,7 +10,6 @@ DEPENDS = " \ qttools-native \ qtbase \ qtdeclarative \ - qtquickcontrols2 \ libqtappfw \ " @@ -19,12 +18,13 @@ PV = "2.0+git${SRCPV}" SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/hvac;protocol=https;branch=${AGL_BRANCH} \ file://hvac.conf \ file://hvac.token \ -" + file://0001-Migrate-to-Qt-6.patch \ + " SRCREV = "d37674bb6dbb5ceb15c650a0344b0caf624963bc" S = "${WORKDIR}/git" -inherit qmake5 pkgconfig agl-app +inherit qt6-qmake pkgconfig agl-app AGL_APP_NAME = "HVAC" @@ -44,7 +44,7 @@ do_install:append() { RDEPENDS:${PN} += " \ qtwayland \ qtbase-qmlplugins \ - qtgraphicaleffects-qmlplugins \ + qt5compat \ qtquickcontrols2-agl-style \ libqtappfw \ " diff --git a/recipes-demo/launcher/files/0001-Migrate-to-Qt-6.patch b/recipes-demo/launcher/files/0001-Migrate-to-Qt-6.patch new file mode 100644 index 000000000..93f55fd85 --- /dev/null +++ b/recipes-demo/launcher/files/0001-Migrate-to-Qt-6.patch @@ -0,0 +1,31 @@ +From 7e6fb6b5b69979db15b630213ec60e1cf5be7dcf Mon Sep 17 00:00:00 2001 +From: Indivara Weerasuriya <1806262-indivara@users.noreply.git.qt.io> +Date: Wed, 24 Jul 2024 09:21:02 +0900 +Subject: [PATCH] Migrate to Qt 6 + +--- + launcher/qml/Launcher.qml | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/launcher/qml/Launcher.qml b/launcher/qml/Launcher.qml +index 3aef4e6..8d67f60 100644 +--- a/launcher/qml/Launcher.qml ++++ b/launcher/qml/Launcher.qml +@@ -19,7 +19,7 @@ import QtQuick 2.13 + import QtQuick.Layouts 1.1 + import QtQuick.Controls 2.0 + import QtQuick.Window 2.13 +-import QtGraphicalEffects 1.0 ++import Qt5Compat.GraphicalEffects + import AppModel 1.0 + + ApplicationWindow { +@@ -38,7 +38,7 @@ ApplicationWindow { + + Image { + anchors.centerIn: parent +- source: './images/AGL_HMI_Blue_Background_Car-01.png' ++ source: 'qrc:/images/AGL_HMI_Blue_Background_Car-01.png' + } + + GridView { diff --git a/recipes-demo/launcher/files/launcher.service b/recipes-demo/launcher/files/launcher.service index 00dfd9ad7..51c983cbd 100644 --- a/recipes-demo/launcher/files/launcher.service +++ b/recipes-demo/launcher/files/launcher.service @@ -6,6 +6,7 @@ After=homescreen.service applaunchd.service Type=simple User=agl-driver Environment=XDG_RUNTIME_DIR=/run/user/1001/ +Environment=QT_QPA_PLATFORM=wayland ExecStart=/usr/bin/launcher Restart=on-failure diff --git a/recipes-demo/launcher/launcher_git.bb b/recipes-demo/launcher/launcher_git.bb index c46a4a182..2f8c5182e 100644 --- a/recipes-demo/launcher/launcher_git.bb +++ b/recipes-demo/launcher/launcher_git.bb @@ -8,7 +8,6 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" DEPENDS = "\ qtbase \ qtdeclarative \ - qtquickcontrols2 \ libqtappfw \ wayland-native \ wayland \ @@ -23,12 +22,13 @@ PV = "1.0+git${SRCPV}" SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/launcher;protocol=https;branch=${AGL_BRANCH} \ file://launcher.service \ -" + file://0001-Migrate-to-Qt-6.patch \ + " SRCREV = "4be88c049f31b7659e09223857b92ca531835039" S = "${WORKDIR}/git" -inherit qmake5 systemd pkgconfig +inherit qt6-qmake systemd pkgconfig PATH:prepend = "${STAGING_DIR_NATIVE}${OE_QMAKE_PATH_QT_BINS}:" diff --git a/recipes-demo/libqtappfw/libqtappfw/0001-Migrate-to-Qt-6.patch b/recipes-demo/libqtappfw/libqtappfw/0001-Migrate-to-Qt-6.patch new file mode 100644 index 000000000..7c1d8d18b --- /dev/null +++ b/recipes-demo/libqtappfw/libqtappfw/0001-Migrate-to-Qt-6.patch @@ -0,0 +1,540 @@ +From c159e46ea970294173504f9f140e6ae81039a810 Mon Sep 17 00:00:00 2001 +From: Indivara Weerasuriya <1806262-indivara@users.noreply.git.qt.io> +Date: Wed, 24 Jul 2024 09:22:40 +0900 +Subject: [PATCH] Migrate to Qt 6 + +--- + applauncher/meson.build | 12 ++++++------ + bluetooth/bluetoothmodel.cpp | 2 +- + bluetooth/meson.build | 10 +++++----- + hvac/meson.build | 10 +++++----- + map/meson.build | 10 +++++----- + mediaplayer/meson.build | 10 +++++----- + meson.build | 4 ++-- + navigation/meson.build | 10 +++++----- + network/meson.build | 10 +++++----- + pbap/meson.build | 10 +++++----- + pbap/pbap.cpp | 2 +- + pbap/pbap.h | 6 +++--- + radio/meson.build | 12 ++++++------ + telephony/meson.build | 10 +++++----- + vehicle-signals/QtKuksaClient.cpp | 2 +- + vehicle-signals/meson.build | 14 +++++++------- + vehicle-signals/vehiclesignals.cpp | 2 +- + weather/meson.build | 10 +++++----- + 18 files changed, 73 insertions(+), 73 deletions(-) + +diff --git a/applauncher/meson.build b/applauncher/meson.build +index b36184a..ba31495 100644 +--- a/applauncher/meson.build ++++ b/applauncher/meson.build +@@ -1,9 +1,9 @@ + cpp = meson.get_compiler('cpp') + grpcpp_reflection_dep = cpp.find_library('grpc++_reflection') + +-qt5_dep = dependency('qt5', modules: ['Qml']) ++qt_dep = dependency('qt6', modules: ['Qml']) + applauncher_dep = [ +- qt5_dep, ++ qt_dep, + dependency('protobuf'), + dependency('grpc'), + dependency('grpc++'), +@@ -24,12 +24,12 @@ grpc_gen = generator(protoc, \ + output : ['@BASENAME@.grpc.pb.cc', '@BASENAME@.grpc.pb.h'], + arguments : ['--proto_path=@CURRENT_SOURCE_DIR@/protos', + '--grpc_out=@BUILD_DIR@', +- '--plugin=protoc-gen-grpc=' + grpc_cpp.path(), ++ '--plugin=protoc-gen-grpc=' + grpc_cpp.full_path(), + '@INPUT@']) + generated_grpc_sources = grpc_gen.process('protos/applauncher.proto') + +-moc_files = qt5.compile_moc(headers : ['AppLauncherClient.h', 'AppLauncherGrpcClient.h'], +- dependencies: qt5_dep) ++moc_files = qt.compile_moc(headers : ['AppLauncherClient.h', 'AppLauncherGrpcClient.h'], ++ dependencies: qt_dep) + + src = [ + 'AppLauncherClient.cpp', +@@ -52,5 +52,5 @@ pkg_mod.generate(libraries : lib, + version : '1.0', + name : 'libqtappfw-applauncher', + filebase : 'qtappfw-applauncher', +- requires: 'Qt5Qml', ++ requires: 'Qt6Qml', + description : 'Library wrapping AGL AppLauncher API in Qt objects') +diff --git a/bluetooth/bluetoothmodel.cpp b/bluetooth/bluetoothmodel.cpp +index 605f950..dafdd54 100644 +--- a/bluetooth/bluetoothmodel.cpp ++++ b/bluetooth/bluetoothmodel.cpp +@@ -248,5 +248,5 @@ bool BluetoothModelFilter::filterAcceptsRow(int sourceRow, const QModelIndex &so + QModelIndex index = model->index(sourceRow); + bool paired = model->data(index, BluetoothModel::BluetoothRoles::PairedRole).toBool(); + +- return ((paired ? "true" : "false") == filterRegExp().pattern()); ++ return ((paired ? "true" : "false") == filterRegularExpression().pattern()); + } +diff --git a/bluetooth/meson.build b/bluetooth/meson.build +index 008fda1..c8f7e0f 100644 +--- a/bluetooth/meson.build ++++ b/bluetooth/meson.build +@@ -1,17 +1,17 @@ +-qt5_dep = dependency('qt5', modules: ['Core', 'Qml']) ++qt_dep = dependency('qt6', modules: ['Core', 'Qml']) + + glib_dep = [dependency('glib-2.0'), dependency('gio-2.0'), dependency('gobject-2.0'), dependency('gio-unix-2.0')] + bluez_glib_dep = dependency('bluez-glib') + +-moc_files = qt5.compile_moc(headers : ['bluetooth.h', 'bluetoothmodel.h'], +- dependencies: qt5_dep) ++moc_files = qt.compile_moc(headers : ['bluetooth.h', 'bluetoothmodel.h'], ++ dependencies: qt_dep) + + src = ['bluetooth.cpp', 'bluetoothmodel.cpp', 'bluetootheventhandler.cpp', moc_files] + lib = shared_library('qtappfw-bt', + sources: src, + version: '1.0.0', + soversion: '0', +- dependencies: [qt5_dep, glib_dep, bluez_glib_dep], ++ dependencies: [qt_dep, glib_dep, bluez_glib_dep], + install: true) + + install_headers('bluetooth.h') +@@ -21,7 +21,7 @@ pkg_mod.generate(libraries : lib, + version : '1.0', + name : 'libqtappfw-bt', + filebase : 'qtappfw-bt', +- requires: 'Qt5Qml', ++ requires: 'Qt6Qml', + description : 'AGL Qt demo app framework helper library for using BlueZ.') + + qtappfw_bt_dep = declare_dependency(link_with: lib, +diff --git a/hvac/meson.build b/hvac/meson.build +index ce3679c..ad41612 100644 +--- a/hvac/meson.build ++++ b/hvac/meson.build +@@ -1,14 +1,14 @@ +-qt5_dep = dependency('qt5', modules: ['Qml']) ++qt_dep = dependency('qt6', modules: ['Qml']) + +-moc_files = qt5.compile_moc(headers: 'hvac.h', +- dependencies: qt5_dep) ++moc_files = qt.compile_moc(headers: 'hvac.h', ++ dependencies: qt_dep) + + src = ['hvac.cpp', moc_files] + lib = shared_library('qtappfw-hvac', + sources: src, + version: '1.0.0', + soversion: '0', +- dependencies: [qt5_dep, qtappfw_vs_dep], ++ dependencies: [qt_dep, qtappfw_vs_dep], + install: true) + + install_headers('hvac.h') +@@ -18,5 +18,5 @@ pkg_mod.generate(libraries : lib, + version : '1.0', + name : 'libqtappfw-hvac', + filebase : 'qtappfw-hvac', +- requires: 'Qt5Qml', ++ requires: 'Qt6Qml', + description : 'AGL Qt demo app framework helper library for using HVAC.') +diff --git a/map/meson.build b/map/meson.build +index 1f563e6..e68cd0e 100644 +--- a/map/meson.build ++++ b/map/meson.build +@@ -1,14 +1,14 @@ +-qt5_dep = dependency('qt5', modules: ['Qml']) ++qt_dep = dependency('qt6', modules: ['Qml']) + +-moc_files = qt5.compile_moc(headers : 'map.h', +- dependencies: qt5_dep) ++moc_files = qt.compile_moc(headers : 'map.h', ++ dependencies: qt_dep) + + src = ['map.cpp', moc_files] + lib = shared_library('qtappfw-bt-map', + sources: src, + version: '1.0.0', + soversion: '0', +- dependencies: [qt5_dep, qtappfw_bt_dep], ++ dependencies: [qt_dep, qtappfw_bt_dep], + install: true) + + install_headers('map.h') +@@ -18,5 +18,5 @@ pkg_mod.generate(libraries : lib, + version : '1.0', + name : 'libqtappfw-bt-map', + filebase : 'qtappfw-bt-map', +- requires: 'Qt5Qml', ++ requires: 'Qt6Qml', + description : 'Library wrapping AGL Bluetooth MAP profile API in Qt objects') +diff --git a/mediaplayer/meson.build b/mediaplayer/meson.build +index ff2db0a..b6a716e 100644 +--- a/mediaplayer/meson.build ++++ b/mediaplayer/meson.build +@@ -1,4 +1,4 @@ +-qt5_dep = dependency('qt5', modules: ['Qml']) ++qt_dep = dependency('qt6', modules: ['Qml']) + + mpdclient_dep = dependency('libmpdclient') + +@@ -8,8 +8,8 @@ mediaplayer_headers = [ 'MediaplayerBackend.h', + 'MpdEventHandler.h', + 'mediaplayer.h' + ] +-moc_files = qt5.compile_moc(headers: mediaplayer_headers, +- dependencies: qt5_dep) ++moc_files = qt.compile_moc(headers: mediaplayer_headers, ++ dependencies: qt_dep) + + src = [ 'MediaplayerBackend.cpp', + 'MediaplayerBluezBackend.cpp', +@@ -22,7 +22,7 @@ lib = shared_library('qtappfw-mediaplayer', + sources: src, + version: '1.0.0', + soversion: '0', +- dependencies: [qt5_dep, mpdclient_dep, qtappfw_bt_dep, qtappfw_vs_dep], ++ dependencies: [qt_dep, mpdclient_dep, qtappfw_bt_dep, qtappfw_vs_dep], + install: true) + + install_headers('mediaplayer.h') +@@ -32,5 +32,5 @@ pkg_mod.generate(libraries: lib, + version: '1.0', + name: 'libqtappfw-mediaplayer', + filebase: 'qtappfw-mediaplayer', +- requires: 'Qt5Qml', ++ requires: 'Qt6Qml', + description: 'Library wrapping AGL mediaplayer API in Qt objects') +diff --git a/meson.build b/meson.build +index 263d3d5..0264a76 100644 +--- a/meson.build ++++ b/meson.build +@@ -19,7 +19,7 @@ project ( + ['cpp'], + version : '2.0.1', + license : 'Apache-2.0', +- meson_version : '>= 0.49.0', ++ meson_version : '>= 0.59.0', + default_options : + [ + 'warning_level=1', +@@ -29,7 +29,7 @@ project ( + ], + ) + +-qt5 = import('qt5') ++qt = import('qt6') + + #subdir('docs') + +diff --git a/navigation/meson.build b/navigation/meson.build +index 9b8e3ea..5e59f3d 100644 +--- a/navigation/meson.build ++++ b/navigation/meson.build +@@ -1,14 +1,14 @@ +-qt5_dep = dependency('qt5', modules: ['Qml']) ++qt_dep = dependency('qt6', modules: ['Qml']) + +-moc_files = qt5.compile_moc(headers: 'navigation.h', +- dependencies: qt5_dep) ++moc_files = qt.compile_moc(headers: 'navigation.h', ++ dependencies: qt_dep) + + src = ['navigation.cpp', moc_files] + lib = shared_library('qtappfw-navigation', + sources: src, + version: '1.0.0', + soversion: '0', +- dependencies: [qt5_dep, qtappfw_vs_dep], ++ dependencies: [qt_dep, qtappfw_vs_dep], + install: true) + + install_headers('navigation.h') +@@ -18,5 +18,5 @@ pkg_mod.generate(libraries : lib, + version : '1.0', + name : 'libqtappfw-navigation', + filebase : 'qtappfw-navigation', +- requires: 'Qt5Qml', ++ requires: 'Qt6Qml', + description : 'Library wrapping AGL navigation API in Qt objects') +diff --git a/network/meson.build b/network/meson.build +index d60369d..0726264 100644 +--- a/network/meson.build ++++ b/network/meson.build +@@ -1,4 +1,4 @@ +-qt5_dep = dependency('qt5', modules: ['Qml']) ++qt_dep = dependency('qt6', modules: ['Qml']) + + glib_dep = [dependency('glib-2.0'), dependency('gio-2.0'), dependency('gobject-2.0'), dependency('gio-unix-2.0')] + connman_glib_dep = dependency('connman-glib') +@@ -12,8 +12,8 @@ network_headers = [ 'abstractnetworkmodel.h', + 'wiredadapter.h', + 'wirednetworkmodel.h' + ] +-moc_files = qt5.compile_moc(headers: network_headers, +- dependencies: qt5_dep) ++moc_files = qt.compile_moc(headers: network_headers, ++ dependencies: qt_dep) + + src = [ 'network.cpp', + 'networkeventhandler.cpp', +@@ -29,7 +29,7 @@ lib = shared_library('qtappfw-network', + sources: src, + version: '1.0.0', + soversion: '0', +- dependencies: [qt5_dep, glib_dep, connman_glib_dep], ++ dependencies: [qt_dep, glib_dep, connman_glib_dep], + install: true) + + install_headers(['network.h', 'networkadapter.h', 'wifiadapter.h', 'wiredadapter.h']) +@@ -39,5 +39,5 @@ pkg_mod.generate(libraries : lib, + version : '1.0', + name : 'libqtappfw-network', + filebase : 'qtappfw-network', +- requires: 'Qt5Qml', ++ requires: 'Qt6Qml', + description : 'Library wrapping AGL network API in Qt objects') +diff --git a/pbap/meson.build b/pbap/meson.build +index 7e2d1fb..fc980a8 100644 +--- a/pbap/meson.build ++++ b/pbap/meson.build +@@ -1,14 +1,14 @@ +-qt5_dep = dependency('qt5', modules: ['Qml']) ++qt_dep = dependency('qt6', modules: ['Qml']) + +-moc_files = qt5.compile_moc(headers : 'pbap.h', +- dependencies: qt5_dep) ++moc_files = qt.compile_moc(headers : 'pbap.h', ++ dependencies: qt_dep) + + src = ['pbap.cpp', moc_files] + lib = shared_library('qtappfw-bt-pbap', + sources: src, + version: '1.0.0', + soversion: '0', +- dependencies: qt5_dep, ++ dependencies: qt_dep, + install: true) + + install_headers('pbap.h') +@@ -18,5 +18,5 @@ pkg_mod.generate(libraries : lib, + version : '1.0', + name : 'libqtappfw-bt-pbap', + filebase : 'qtappfw-bt-pbap', +- requires: 'Qt5Qml', ++ requires: '', + description : 'Library wrapping AGL Bluetooth PBAP profile API in Qt objects') +diff --git a/pbap/pbap.cpp b/pbap/pbap.cpp +index 7473c54..d98fbea 100644 +--- a/pbap/pbap.cpp ++++ b/pbap/pbap.cpp +@@ -241,7 +241,7 @@ void Pbap::updateCalls(QJsonArray vcards) + name = number; + } + +- QStringList typelist = entry.value("type").toString().split(QRegExp("=")); ++ QStringList typelist = entry.value("type").toString().split(QRegularExpression("=")); + type = typelist.takeLast(); + + datetime = entry.value("timestamp").toString(); +diff --git a/pbap/pbap.h b/pbap/pbap.h +index 25fa450..447eeac 100644 +--- a/pbap/pbap.h ++++ b/pbap/pbap.h +@@ -62,7 +62,7 @@ class Contact : public QObject + + Q_PROPERTY(QString name READ name NOTIFY nameChanged) + Q_PROPERTY(QString photo READ photo NOTIFY photoChanged) +- Q_PROPERTY(QQmlListProperty<PhoneNumber>numbers READ numbersList NOTIFY numbersListChanged) ++ Q_PROPERTY(QQmlListProperty<PhoneNumber> numbers READ numbersList NOTIFY numbersListChanged) + + public: + explicit Contact(QString name, QString photo, QList<PhoneNumber *>numbers); +@@ -75,11 +75,11 @@ class Contact : public QObject + QQmlListProperty<PhoneNumber>numbersList() { + return QQmlListProperty<PhoneNumber>(this, 0, &Contact::countNumbers, &Contact::atNumbers); + } +- static int countNumbers(QQmlListProperty<PhoneNumber> *property) { ++ static qsizetype countNumbers(QQmlListProperty<PhoneNumber> *property) { + Contact *contact = qobject_cast<Contact *>(property->object); + return contact->m_numbers.size(); + } +- static PhoneNumber *atNumbers(QQmlListProperty<PhoneNumber> *property, int index) { ++ static PhoneNumber *atNumbers(QQmlListProperty<PhoneNumber> *property, qsizetype index) { + Contact *contact = qobject_cast<Contact *>(property->object); + return contact->m_numbers[index]; + } +diff --git a/radio/meson.build b/radio/meson.build +index 7ae1bac..f4ed0dc 100644 +--- a/radio/meson.build ++++ b/radio/meson.build +@@ -1,9 +1,9 @@ + cpp = meson.get_compiler('cpp') + grpcpp_reflection_dep = cpp.find_library('grpc++_reflection') + +-qt5_dep = dependency('qt5', modules: ['Qml']) ++qt_dep = dependency('qt6', modules: ['Qml']) + radio_dep = [ +- qt5_dep, ++ qt_dep, + dependency('protobuf'), + dependency('grpc'), + dependency('grpc++'), +@@ -24,12 +24,12 @@ grpc_gen = generator(protoc, \ + output : ['@BASENAME@.grpc.pb.cc', '@BASENAME@.grpc.pb.h'], + arguments : ['--proto_path=@CURRENT_SOURCE_DIR@/protos', + '--grpc_out=@BUILD_DIR@', +- '--plugin=protoc-gen-grpc=' + grpc_cpp.path(), ++ '--plugin=protoc-gen-grpc=' + grpc_cpp.full_path(), + '@INPUT@']) + generated_grpc_sources = grpc_gen.process('protos/radio.proto') + +-moc_files = qt5.compile_moc(headers: ['RadioClient.h', 'RadioGrpcClient.h'], +- dependencies: qt5_dep) ++moc_files = qt.compile_moc(headers: ['RadioClient.h', 'RadioGrpcClient.h'], ++ dependencies: qt_dep) + + src = [ + 'RadioClient.cpp', +@@ -53,5 +53,5 @@ pkg_mod.generate(libraries : lib, + version : '1.0', + name : 'libqtappfw-radio', + filebase : 'qtappfw-radio', +- requires: 'Qt5Qml', ++ requires: 'Qt6Qml', + description : 'Library wrapping AGL radio API in Qt objects') +diff --git a/telephony/meson.build b/telephony/meson.build +index 934d70c..f32777f 100644 +--- a/telephony/meson.build ++++ b/telephony/meson.build +@@ -1,14 +1,14 @@ +-qt5_dep = dependency('qt5', modules: ['Qml']) ++qt_dep = dependency('qt6', modules: ['Qml']) + +-moc_files = qt5.compile_moc(headers: 'telephony.h', +- dependencies: qt5_dep) ++moc_files = qt.compile_moc(headers: 'telephony.h', ++ dependencies: qt_dep) + + src = ['telephony.cpp', moc_files] + lib = shared_library('qtappfw-phone', + sources: src, + version: '1.0.0', + soversion: '0', +- dependencies: qt5_dep, ++ dependencies: qt_dep, + install: true) + + install_headers('telephony.h') +@@ -18,5 +18,5 @@ pkg_mod.generate(libraries : lib, + version : '1.0', + name : 'libqtappfw-phone', + filebase : 'qtappfw-phone', +- requires: 'Qt5Qml', ++ requires: 'Qt6Qml', + description : 'Library wrapping AGL telephony API in Qt objects') +diff --git a/vehicle-signals/QtKuksaClient.cpp b/vehicle-signals/QtKuksaClient.cpp +index 901459d..e258670 100644 +--- a/vehicle-signals/QtKuksaClient.cpp ++++ b/vehicle-signals/QtKuksaClient.cpp +@@ -84,7 +84,7 @@ QtKuksaClient::QtKuksaClient(const std::shared_ptr< ::grpc::ChannelInterface>& c + void QtKuksaClient::connect() + { + // Check for connection in another thread +- QFuture<void> future = QtConcurrent::run(this, &QtKuksaClient::waitForConnected); ++ QFuture<void> future = QtConcurrent::run(&QtKuksaClient::waitForConnected, this); + } + + void QtKuksaClient::get(const QString &path, const bool actuator) +diff --git a/vehicle-signals/meson.build b/vehicle-signals/meson.build +index 50383e4..4dd766c 100644 +--- a/vehicle-signals/meson.build ++++ b/vehicle-signals/meson.build +@@ -1,10 +1,10 @@ + cpp = meson.get_compiler('cpp') + grpcpp_reflection_dep = cpp.find_library('grpc++_reflection') + +-qt5_dep = dependency('qt5', modules: ['Core', 'Concurrent']) ++qt_dep = dependency('qt6', modules: ['Core', 'Concurrent']) + + vs_dep = [ +- qt5_dep, ++ qt_dep, + dependency('protobuf'), + dependency('grpc'), + dependency('grpc++'), +@@ -30,14 +30,14 @@ grpc_gen = generator(protoc, \ + output : ['@BASENAME@.grpc.pb.cc', '@BASENAME@.grpc.pb.h'], + arguments : ['-I=' + protos_base_dir, + '--grpc_out=@BUILD_DIR@', +- '--plugin=protoc-gen-grpc=' + grpc_cpp.path(), ++ '--plugin=protoc-gen-grpc=' + grpc_cpp.full_path(), + '@INPUT@']) + generated_grpc_sources = [ \ + grpc_gen.process(protos_dir / 'val.proto', preserve_path_from : protos_base_dir), + ] + +-moc_files = qt5.compile_moc(headers: [ 'vehiclesignals.h', 'QtKuksaClient.h' ], +- dependencies: qt5_dep) ++moc_files = qt.compile_moc(headers: [ 'vehiclesignals.h', 'QtKuksaClient.h' ], ++ dependencies: qt_dep) + + src = [ + 'vehiclesignals.cpp', +@@ -62,10 +62,10 @@ pkg_mod.generate(libraries: lib, + version: '1.0', + name: 'libqtappfw-vehicle-signals', + filebase: 'qtappfw-vehicle-signals', +- requires: ['Qt5Core'], ++ requires: ['Qt6Core'], + description: 'Library wrapping VSS API in Qt objects') + +-qtappfw_vs_dep = declare_dependency(dependencies: qt5_dep, ++qtappfw_vs_dep = declare_dependency(dependencies: qt_dep, + link_with: lib, + include_directories: '.', + sources: ['vehiclesignals.h']) +diff --git a/vehicle-signals/vehiclesignals.cpp b/vehicle-signals/vehiclesignals.cpp +index adf371a..f550955 100644 +--- a/vehicle-signals/vehiclesignals.cpp ++++ b/vehicle-signals/vehiclesignals.cpp +@@ -160,7 +160,7 @@ void VehicleSignals::onSubscribeDone(const QMap<QString, bool> &signals_, bool c + { + if (!canceled) { + // queue up a resubscribe attempt +- QFuture<void> future = QtConcurrent::run(this, &VehicleSignals::resubscribe, signals_); ++ QFuture<void> future = QtConcurrent::run(&VehicleSignals::resubscribe, this, signals_); + } + } + +diff --git a/weather/meson.build b/weather/meson.build +index 116975b..bb6e3aa 100644 +--- a/weather/meson.build ++++ b/weather/meson.build +@@ -1,14 +1,14 @@ +-qt5_dep = dependency('qt5', modules: ['Qml']) ++qt_dep = dependency('qt6', modules: ['Qml']) + +-moc_files = qt5.compile_moc(headers: 'weather.h', +- dependencies: qt5_dep) ++moc_files = qt.compile_moc(headers: 'weather.h', ++ dependencies: qt_dep) + + src = ['weather.cpp', moc_files] + lib = shared_library('qtappfw-weather', + sources: src, + version: '1.0.0', + soversion: '0', +- dependencies: qt5_dep, ++ dependencies: qt_dep, + install: true) + + install_headers('weather.h') +@@ -18,5 +18,5 @@ pkg_mod.generate(libraries : lib, + version : '1.0', + name : 'libqtappfw-weather', + filebase : 'qtappfw-weather', +- requires: 'Qt5Qml', ++ requires: 'Qt6Qml', + description : 'Library wrapping AGL weather API in Qt objects') diff --git a/recipes-demo/libqtappfw/libqtappfw_git.bb b/recipes-demo/libqtappfw/libqtappfw_git.bb index f4e360723..7f4d9ddcd 100644 --- a/recipes-demo/libqtappfw/libqtappfw_git.bb +++ b/recipes-demo/libqtappfw/libqtappfw_git.bb @@ -21,14 +21,16 @@ DEPENDS = " \ kuksa-databroker \ " -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/libqtappfw;protocol=https;branch=${AGL_BRANCH}" +SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/libqtappfw;protocol=https;branch=${AGL_BRANCH} \ + file://0001-Migrate-to-Qt-6.patch \ + " SRCREV = "4694b211569e15dc8aa4e75b6fb70e75946e766d" S = "${WORKDIR}/git" # PV needs to be modified with SRCPV to work AUTOREV correctly PV = "2.0.1+git${SRCPV}" -inherit meson pkgconfig +inherit meson pkgconfig meson_qt6_path EXTRA_OEMESON += "-Dprotos=${STAGING_INCDIR}" diff --git a/recipes-demo/mediaplayer/mediaplayer/0001-Migrate-to-Qt-6.patch b/recipes-demo/mediaplayer/mediaplayer/0001-Migrate-to-Qt-6.patch new file mode 100644 index 000000000..fc7dcb234 --- /dev/null +++ b/recipes-demo/mediaplayer/mediaplayer/0001-Migrate-to-Qt-6.patch @@ -0,0 +1,87 @@ +From b98a116f91e967eca96ecd3052eeeb78d8002e0c Mon Sep 17 00:00:00 2001 +From: Indivara Weerasuriya <1806262-indivara@users.noreply.git.qt.io> +Date: Wed, 24 Jul 2024 09:24:39 +0900 +Subject: [PATCH] Migrate to Qt 6 + +--- + app/MediaPlayer.qml | 22 +++++++++++----------- + 1 file changed, 11 insertions(+), 11 deletions(-) + +diff --git a/app/MediaPlayer.qml b/app/MediaPlayer.qml +index fd4db58..6f381da 100644 +--- a/app/MediaPlayer.qml ++++ b/app/MediaPlayer.qml +@@ -174,14 +174,14 @@ ApplicationWindow { + //ToggleButton { + // id: random + // visible: bluetooth.connected == false +- // offImage: './images/AGL_MediaPlayer_Shuffle_Inactive.svg' +- // onImage: './images/AGL_MediaPlayer_Shuffle_Active.svg' ++ // offImage: 'qrc:/images/AGL_MediaPlayer_Shuffle_Inactive.svg' ++ // onImage: 'qrc:/images/AGL_MediaPlayer_Shuffle_Active.svg' + //} + ToggleButton { + id: loop + visible: player.av_connected === false +- offImage: './images/AGL_MediaPlayer_Loop_Inactive.svg' +- onImage: './images/AGL_MediaPlayer_Loop_Active.svg' ++ offImage: 'qrc:/images/AGL_MediaPlayer_Loop_Inactive.svg' ++ onImage: 'qrc:/images/AGL_MediaPlayer_Loop_Active.svg' + onClicked: { mediaplayer.loop(checked ? "playlist" : "off") } + } + } +@@ -228,15 +228,15 @@ ApplicationWindow { + RowLayout { + Layout.fillHeight: true + // Image { +-// source: './images/AGL_MediaPlayer_Playlist_Inactive.svg' ++// source: 'qrc:/images/AGL_MediaPlayer_Playlist_Inactive.svg' + // } + // Image { +-// source: './images/AGL_MediaPlayer_CD_Inactive.svg' ++// source: 'qrc:/images/AGL_MediaPlayer_CD_Inactive.svg' + // } + Item { Layout.fillWidth: true } + ImageButton { + id: previous +- offImage: './images/AGL_MediaPlayer_BackArrow.svg' ++ offImage: 'qrc:/images/AGL_MediaPlayer_BackArrow.svg' + onClicked: { + mediaplayer.previous() + } +@@ -248,7 +248,7 @@ ApplicationWindow { + when: player.status == "playing" + PropertyChanges { + target: play +- offImage: './images/AGL_MediaPlayer_Player_Pause.svg' ++ offImage: 'qrc:/images/AGL_MediaPlayer_Player_Pause.svg' + onClicked: { + mediaplayer.pause() + } +@@ -258,7 +258,7 @@ ApplicationWindow { + when: player.status != "playing" + PropertyChanges { + target: play +- offImage: './images/AGL_MediaPlayer_Player_Play.svg' ++ offImage: 'qrc:/images/AGL_MediaPlayer_Player_Play.svg' + onClicked: mediaplayer.play() + } + } +@@ -266,7 +266,7 @@ ApplicationWindow { + } + ImageButton { + id: forward +- offImage: './images/AGL_MediaPlayer_ForwardArrow.svg' ++ offImage: 'qrc:/images/AGL_MediaPlayer_ForwardArrow.svg' + onClicked: { + mediaplayer.next() + } +@@ -284,7 +284,7 @@ ApplicationWindow { + mediaplayer.disconnect() + } + contentItem: Image { +- source: player.av_connected ? './images/AGL_MediaPlayer_Bluetooth_Active.svg' : './images/AGL_MediaPlayer_Bluetooth_Inactive.svg' ++ source: player.av_connected ? 'qrc:/images/AGL_MediaPlayer_Bluetooth_Active.svg' : 'qrc:/images/AGL_MediaPlayer_Bluetooth_Inactive.svg' + } + } + } diff --git a/recipes-demo/mediaplayer/mediaplayer_git.bb b/recipes-demo/mediaplayer/mediaplayer_git.bb index 976dcc8dc..1f3b070ce 100644 --- a/recipes-demo/mediaplayer/mediaplayer_git.bb +++ b/recipes-demo/mediaplayer/mediaplayer_git.bb @@ -6,19 +6,20 @@ SECTION = "apps" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" -DEPENDS = "qtquickcontrols2 libqtappfw" +DEPENDS = "qtdeclarative libqtappfw" PV = "2.0+git${SRCPV}" SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/mediaplayer;protocol=https;branch=${AGL_BRANCH} \ file://mediaplayer.conf \ file://mediaplayer.token \ -" + file://0001-Migrate-to-Qt-6.patch \ + " SRCREV = "0aefba20fe07dbb79d7b3683ab38c0b0b313a655" S = "${WORKDIR}/git" -inherit qmake5 pkgconfig agl-app +inherit qt6-qmake pkgconfig agl-app AGL_APP_NAME = "Mediaplayer" diff --git a/recipes-demo/messaging/messaging/0001-Migrate-to-Qt-6.patch b/recipes-demo/messaging/messaging/0001-Migrate-to-Qt-6.patch new file mode 100644 index 000000000..4a8b1ab13 --- /dev/null +++ b/recipes-demo/messaging/messaging/0001-Migrate-to-Qt-6.patch @@ -0,0 +1,91 @@ +From 83be2a0e829c959f5466e6c44c60abadc628ea0b Mon Sep 17 00:00:00 2001 +From: Indivara Weerasuriya <1806262-indivara@users.noreply.git.qt.io> +Date: Wed, 24 Jul 2024 09:28:22 +0900 +Subject: [PATCH] Migrate to Qt 6 + +--- + app/Messaging.qml | 4 ++-- + app/Notification.qml | 2 +- + app/TabImageButton.qml | 11 ++++++----- + 3 files changed, 9 insertions(+), 8 deletions(-) + +diff --git a/app/Messaging.qml b/app/Messaging.qml +index 48568c2..05bd452 100644 +--- a/app/Messaging.qml ++++ b/app/Messaging.qml +@@ -41,13 +41,13 @@ ApplicationWindow { + contentHeight: 160 + + TabImageButton { +- icon: "./images/ic_contacts_48px.svg" ++ iconSource: "qrc:/images/ic_contacts_48px.svg" + text: "Alerts" + font.pixelSize: 50 + } + + TabImageButton { +- icon: "./images/ic_contacts_48px.svg" ++ iconSource: "qrc:/images/ic_contacts_48px.svg" + text: "Compose" + font.pixelSize: 50 + } +diff --git a/app/Notification.qml b/app/Notification.qml +index ac6b360..dd68ce3 100644 +--- a/app/Notification.qml ++++ b/app/Notification.qml +@@ -30,7 +30,7 @@ Item { + Image { + id: button + scale: 0.5 +- source: '../images/HMI_Settings_X.svg' ++ source: 'qrc:/images/HMI_Settings_X.svg' + MouseArea { + anchors.fill: button + onClicked: notificationModel.remove(index) +diff --git a/app/TabImageButton.qml b/app/TabImageButton.qml +index 2176595..c707574 100644 +--- a/app/TabImageButton.qml ++++ b/app/TabImageButton.qml +@@ -41,6 +41,7 @@ import QtQuick.Layouts 1.1 + import QtQuick.Controls 2.2 + import QtQuick.Controls.impl 2.2 + import QtQuick.Templates 2.2 as T ++import QtQuick.Controls.Basic 2.2 + + T.TabButton { + id: control +@@ -53,13 +54,13 @@ T.TabButton { + + padding: 6 + +- property url icon ++ property url iconSource + + contentItem: ColumnLayout { + spacing: 20 + Image { + Layout.alignment: Qt.AlignCenter +- source: control.icon ++ source: control.iconSource + width: 96 + height: 96 + +@@ -70,7 +71,7 @@ T.TabButton { + font: control.font + elide: Text.ElideRight + opacity: enabled ? 1 : 0.3 +- color: !control.checked ? Default.textLightColor : control.down ? Default.textDarkColor : Default.textColor ++ color: !control.checked ? Basic.textLightColor : control.down ? Basic.textDarkColor : Basic.textColor + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } +@@ -78,7 +79,7 @@ T.TabButton { + background: Rectangle { + implicitHeight: 160 + color: control.down +- ? (control.checked ? Default.tabButtonCheckedPressedColor : Default.tabButtonPressedColor) +- : (control.checked ? "transparent" : Default.tabButtonColor) ++ ? (control.checked ? Basic.tabButtonCheckedPressedColor : Basic.tabButtonPressedColor) ++ : (control.checked ? "transparent" : Basic.tabButtonColor) + } + } diff --git a/recipes-demo/messaging/messaging_git.bb b/recipes-demo/messaging/messaging_git.bb index 972e9b828..e3597b259 100644 --- a/recipes-demo/messaging/messaging_git.bb +++ b/recipes-demo/messaging/messaging_git.bb @@ -6,16 +6,18 @@ SECTION = "apps" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" -DEPENDS = "qtquickcontrols2 libqtappfw" +DEPENDS = "qtdeclarative libqtappfw" PV = "1.0+git${SRCPV}" -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/messaging;protocol=https;branch=${AGL_BRANCH}" +SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/messaging;protocol=https;branch=${AGL_BRANCH} \ + file://0001-Migrate-to-Qt-6.patch \ + " SRCREV = "e58b0382de8e665d64b8e3486022a6bcb0572823" S = "${WORKDIR}/git" -inherit qmake5 pkgconfig agl-app +inherit qt6-qmake pkgconfig agl-app AGL_APP_NAME = "Messaging" diff --git a/recipes-demo/navigation/ondemandnavi/0001-Migrate-to-Qt-6.patch b/recipes-demo/navigation/ondemandnavi/0001-Migrate-to-Qt-6.patch new file mode 100644 index 000000000..45a690c24 --- /dev/null +++ b/recipes-demo/navigation/ondemandnavi/0001-Migrate-to-Qt-6.patch @@ -0,0 +1,229 @@ +From f12a16fd4b959eb47c9ba88af1d80c31a7cd7f20 Mon Sep 17 00:00:00 2001 +From: Indivara Weerasuriya <1806262-indivara@users.noreply.git.qt.io> +Date: Wed, 24 Jul 2024 09:32:44 +0900 +Subject: [PATCH] Migrate to Qt 6 + +--- + app/BtnArrow.qml | 4 +-- + app/BtnEnlarge.qml | 4 +-- + app/BtnGuidance.qml | 8 ++--- + app/BtnMapDirection.qml | 4 +-- + app/BtnPresentPosition.qml | 4 +-- + app/BtnShrink.qml | 4 +-- + app/ImgDestinationDirection.qml | 2 +- + app/ProgressNextCross.qml | 59 ++++++++++++++++++++++++++++----- + app/app.pro | 2 +- + app/navigation.qml | 19 ++++------- + 10 files changed, 72 insertions(+), 38 deletions(-) + +diff --git a/app/BtnArrow.qml b/app/BtnArrow.qml +index 2039865..5a999c9 100644 +--- a/app/BtnArrow.qml ++++ b/app/BtnArrow.qml +@@ -1,5 +1,5 @@ +-import QtQuick 2.0 +-import QtQuick.Controls 1.5 ++import QtQuick ++import QtQuick.Controls + + Item { + Button { +diff --git a/app/BtnEnlarge.qml b/app/BtnEnlarge.qml +index cc158ad..eafee56 100644 +--- a/app/BtnEnlarge.qml ++++ b/app/BtnEnlarge.qml +@@ -1,5 +1,5 @@ +-import QtQuick 2.0 +-import QtQuick.Controls 1.5 ++import QtQuick ++import QtQuick.Controls + + Item { + Button { +diff --git a/app/BtnGuidance.qml b/app/BtnGuidance.qml +index 2130857..b6267df 100644 +--- a/app/BtnGuidance.qml ++++ b/app/BtnGuidance.qml +@@ -1,7 +1,7 @@ +-import QtQuick 2.0 +-import QtQuick.Controls 1.5 +-import QtLocation 5.9 +-import QtPositioning 5.6 ++import QtQuick ++import QtQuick.Controls ++import QtLocation ++import QtPositioning + + Item { + id: btn_guidance +diff --git a/app/BtnMapDirection.qml b/app/BtnMapDirection.qml +index c56f0bf..cd703ff 100644 +--- a/app/BtnMapDirection.qml ++++ b/app/BtnMapDirection.qml +@@ -1,5 +1,5 @@ +-import QtQuick 2.0 +-import QtQuick.Controls 1.5 ++import QtQuick ++import QtQuick.Controls + + Item { + Button { +diff --git a/app/BtnPresentPosition.qml b/app/BtnPresentPosition.qml +index 2734664..01761c8 100644 +--- a/app/BtnPresentPosition.qml ++++ b/app/BtnPresentPosition.qml +@@ -1,5 +1,5 @@ +-import QtQuick 2.0 +-import QtQuick.Controls 1.5 ++import QtQuick ++import QtQuick.Controls + + Item { + id: btn_present_position +diff --git a/app/BtnShrink.qml b/app/BtnShrink.qml +index 23859dc..079d6d6 100644 +--- a/app/BtnShrink.qml ++++ b/app/BtnShrink.qml +@@ -1,5 +1,5 @@ +-import QtQuick 2.0 +-import QtQuick.Controls 1.5 ++import QtQuick ++import QtQuick.Controls + + Item { + Button { +diff --git a/app/ImgDestinationDirection.qml b/app/ImgDestinationDirection.qml +index e6ee5de..b80aca8 100644 +--- a/app/ImgDestinationDirection.qml ++++ b/app/ImgDestinationDirection.qml +@@ -1,4 +1,4 @@ +-import QtQuick 2.0 ++import QtQuick + + Item { + id: img_destination_direction +diff --git a/app/ProgressNextCross.qml b/app/ProgressNextCross.qml +index 31e552c..a597c97 100644 +--- a/app/ProgressNextCross.qml ++++ b/app/ProgressNextCross.qml +@@ -1,6 +1,5 @@ +-import QtQuick 2.0 +-import QtQuick.Controls 1.5 +-import QtQuick.Controls.Styles 1.4 ++import QtQuick ++import QtQuick.Controls + + Item { + id: progress_next_cross +@@ -24,14 +23,56 @@ Item { + id: bar + width: 25 + height: 100 +- orientation: Qt.Vertical ++ rotation: 90 + value: 0 +- minimumValue: 0 +- maximumValue: 300 ++ from: 0 ++ to: 300 + +- style: ProgressBarStyle { +- progress: Rectangle { +- color: "green" ++ background: Rectangle { ++ implicitWidth: 200 ++ implicitHeight: 6 ++ color: "#e6e6e6" ++ radius: 3 ++ } ++ ++ contentItem: Item { ++ implicitWidth: 200 ++ implicitHeight: 4 ++ ++ // Progress indicator for determinate state. ++ Rectangle { ++ width: bar.visualPosition * parent.width ++ height: parent.height ++ radius: 2 ++ color: "#17a81a" ++ visible: !bar.indeterminate ++ } ++ ++ // Scrolling animation for indeterminate state. ++ Item { ++ anchors.fill: parent ++ visible: bar.indeterminate ++ clip: true ++ ++ Row { ++ spacing: 20 ++ ++ Repeater { ++ model: bar.width / 40 + 1 ++ ++ Rectangle { ++ color: "#17a81a" ++ width: 20 ++ height: bar.height ++ } ++ } ++ XAnimator on x { ++ from: 0 ++ to: -40 ++ loops: Animation.Infinite ++ running: bar.indeterminate ++ } ++ } + } + } + } +diff --git a/app/app.pro b/app/app.pro +index 1a0a9c3..849810d 100644 +--- a/app/app.pro ++++ b/app/app.pro +@@ -1,6 +1,6 @@ + TEMPLATE = app + TARGET = navigation +-QT = core qml quick positioning ++QT = core qml quick positioning location + CONFIG += c++11 link_pkgconfig + + PKGCONFIG += qtappfw-navigation qtappfw-vehicle-signals +diff --git a/app/navigation.qml b/app/navigation.qml +index 5cb3634..0d61d46 100644 +--- a/app/navigation.qml ++++ b/app/navigation.qml +@@ -15,12 +15,12 @@ + * limitations under the License. + */ + +-import QtQuick 2.6 +-import QtQuick.Layouts 1.1 +-import QtQuick.Controls 2.0 +-import QtLocation 5.9 +-import QtPositioning 5.6 +-import QtQuick.Window 2.11 ++import QtQuick ++import QtQuick.Layouts ++import QtQuick.Controls ++import QtLocation ++import QtPositioning ++import QtQuick.Window + + ApplicationWindow { + id: root +@@ -476,13 +476,6 @@ ApplicationWindow { + } + } + +- gesture.onFlickStarted: { +- btn_present_position.state = "Optional" +- } +- gesture.onPanStarted: { +- btn_present_position.state = "Optional" +- } +- + function updatePositon() { + if (!routeModel.get(0)) + return; diff --git a/recipes-demo/navigation/ondemandnavi_git.bb b/recipes-demo/navigation/ondemandnavi_git.bb index cf53b2bad..7785bcd1d 100644 --- a/recipes-demo/navigation/ondemandnavi_git.bb +++ b/recipes-demo/navigation/ondemandnavi_git.bb @@ -6,7 +6,7 @@ SECTION = "apps" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" -DEPENDS = "qtquickcontrols2 qtlocation libqtappfw" +DEPENDS = "qtdeclarative qtlocation libqtappfw" PV = "2.0+git${SRCPV}" @@ -15,12 +15,13 @@ SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/ondemandnavi;protocol=ht file://navigation.conf.kvm-demo \ file://navigation.conf.gateway-demo \ file://navigation.token \ -" + file://0001-Migrate-to-Qt-6.patch \ + " SRCREV = "d6b883ef6bdb63fb501b03d64c9a32bc29b7b2c7" S = "${WORKDIR}/git" -inherit qmake5 pkgconfig agl-app update-alternatives +inherit qt6-qmake pkgconfig agl-app update-alternatives AGL_APP_ID = "navigation" AGL_APP_NAME = "Navigation" @@ -67,9 +68,7 @@ ALTERNATIVE_PRIORITY_${PN}-conf-kvm-demo = "30" RDEPENDS:${PN} += " \ qtwayland \ qtbase-qmlplugins \ - qtgraphicaleffects-qmlplugins \ - qtquickcontrols-qmlplugins \ - qtquickcontrols2-qmlplugins \ + qt5compat \ qtquickcontrols2-agl \ qtquickcontrols2-agl-style \ qtlocation \ diff --git a/recipes-demo/navigation/tbtnavi_git.bb b/recipes-demo/navigation/tbtnavi_git.bb index 3c6571b15..ec0c6f23a 100644 --- a/recipes-demo/navigation/tbtnavi_git.bb +++ b/recipes-demo/navigation/tbtnavi_git.bb @@ -13,7 +13,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984 \ DEPENDS = " \ qtbase \ - qtquickcontrols2 \ + qtdeclarative \ qtlocation \ libqtappfw \ qtwayland-native \ @@ -64,7 +64,7 @@ ALTERNATIVE_LINK_NAME[tbtnavi.conf] = "${sysconfdir}/xdg/AGL/tbtnavi.conf" RDEPENDS:${PN} += " \ qtwayland \ qtbase-qmlplugins \ - qtgraphicaleffects-qmlplugins \ + qt5compat \ qtlocation \ ondemandnavi-config \ libqtappfw \ diff --git a/recipes-demo/phone/phone/0001-Migrate-to-Qt-6.patch b/recipes-demo/phone/phone/0001-Migrate-to-Qt-6.patch new file mode 100644 index 000000000..5777727a7 --- /dev/null +++ b/recipes-demo/phone/phone/0001-Migrate-to-Qt-6.patch @@ -0,0 +1,189 @@ +From e70943a45841b28da16fa8590dc3054401b47591 Mon Sep 17 00:00:00 2001 +From: Indivara Weerasuriya <1806262-indivara@users.noreply.git.qt.io> +Date: Wed, 24 Jul 2024 09:34:25 +0900 +Subject: [PATCH] Migrate to Qt 6 + +--- + app/ContactsView.qml | 3 +-- + app/Dialer.qml | 14 +++++++------- + app/Phone.qml | 6 +++--- + app/Recents.qml | 8 ++++---- + app/TabImageButton.qml | 11 ++++++----- + 5 files changed, 21 insertions(+), 21 deletions(-) + +diff --git a/app/ContactsView.qml b/app/ContactsView.qml +index 66f2199..e9def44 100644 +--- a/app/ContactsView.qml ++++ b/app/ContactsView.qml +@@ -18,7 +18,6 @@ + import QtQuick 2.6 + import QtQuick.Layouts 1.3 + import QtQuick.Controls 2.0 +-import QtQuick.Controls.Styles 1.4 + import AGL.Demo.Controls 1.0 + import PhoneNumber 1.0 + +@@ -77,7 +76,7 @@ Item { + anchors.leftMargin: 200 + spacing: 100 + Image { +- source: model.modelData.photo ? model.modelData.photo : './images/HMI_ContactScreen_ImageHolder-01.svg' ++ source: model.modelData.photo ? model.modelData.photo : 'qrc:/images/HMI_ContactScreen_ImageHolder-01.svg' + Layout.preferredWidth: 160 + Layout.preferredHeight: 160 + } +diff --git a/app/Dialer.qml b/app/Dialer.qml +index 743c742..31fb8c8 100644 +--- a/app/Dialer.qml ++++ b/app/Dialer.qml +@@ -100,7 +100,7 @@ Item { + ImageButton { + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter +- offImage: './images/HMI_Phone_Back_Icon.svg' ++ offImage: 'qrc:/images/HMI_Phone_Back_Icon.svg' + onClicked: { + if (number.text.length > 0) + number.text = number.text.substring(0, number.text.length - 1) +@@ -130,8 +130,8 @@ Item { + ListElement { value: '#'; image: 'NumberSign' } + } + ImageButton { +- onImage: './images/HMI_Phone_Button_%1_Active-01.svg'.arg(model.image) +- offImage: './images/HMI_Phone_Button_%1_Inactive-01.svg'.arg(model.image) ++ onImage: 'qrc:/images/HMI_Phone_Button_%1_Active-01.svg'.arg(model.image) ++ offImage: 'qrc:/images/HMI_Phone_Button_%1_Inactive-01.svg'.arg(model.image) + onClicked: { + number.text += model.value + } +@@ -148,8 +148,8 @@ Item { + ToggleButton { + id: callButton + Layout.alignment: Qt.AlignHCenter +- onImage: './images/HMI_Phone_Hangup.svg' +- offImage: './images/HMI_Phone_Call.svg' ++ onImage: 'qrc:/images/HMI_Phone_Hangup.svg' ++ offImage: 'qrc:/images/HMI_Phone_Call.svg' + property var active: (number.text.length > 0) || (telephony.callState === "incoming") || (telephony.callState === "active") + opacity: active ? 1 : 0.25 + +@@ -182,7 +182,7 @@ Item { + Layout.alignment: Qt.AlignHCenter + active: false + sourceComponent: ImageButton { +- offImage: './images/HMI_Phone_Hangup.svg' ++ offImage: 'qrc:/images/HMI_Phone_Hangup.svg' + onClicked: { + telephony.hangup() + } +@@ -203,7 +203,7 @@ Item { + anchors.fill: parent + spacing: 20 + Image { +- source: './images/HMI_Phone_Contact_BlankPhoto.svg' ++ source: 'qrc:/images/HMI_Phone_Contact_BlankPhoto.svg' + } + ColumnLayout { + Label { +diff --git a/app/Phone.qml b/app/Phone.qml +index 6b38f77..6de54f2 100644 +--- a/app/Phone.qml ++++ b/app/Phone.qml +@@ -41,19 +41,19 @@ ApplicationWindow { + contentHeight: 160 + + TabImageButton { +- icon: "./images/ic_contacts_48px.svg" ++ iconSource: "qrc:/images/ic_contacts_48px.svg" + text: "Contacts" + font.pixelSize: 50 + } + + TabImageButton { +- icon: "./images/ic_schedule_48px.svg" ++ iconSource: "qrc:/images/ic_schedule_48px.svg" + text: "Recents" + font.pixelSize: 50 + } + + TabImageButton { +- icon: "./images/ic_dialpad_48px.svg" ++ iconSource: "qrc:/images/ic_dialpad_48px.svg" + text: "Dialpad" + font.pixelSize: 50 + } +diff --git a/app/Recents.qml b/app/Recents.qml +index 5a516a1..f4d771b 100644 +--- a/app/Recents.qml ++++ b/app/Recents.qml +@@ -25,11 +25,11 @@ Item { + + function log_icon(type) { + if (type === RecentCall.MISSED) { +- return './images/ic_call_missed_48px.svg' ++ return 'qrc:/images/ic_call_missed_48px.svg' + } else if (type === RecentCall.RECEIVED) { +- return './images/ic_call_received_48px.svg' ++ return 'qrc:/images/ic_call_received_48px.svg' + } else if (type === RecentCall.DIALED) { +- return './images/ic_call_made_48px.svg' ++ return 'qrc:/images/ic_call_made_48px.svg' + } + } + +@@ -53,7 +53,7 @@ Item { + Layout.preferredHeight: 150 + } + Image { +- source: './images/HMI_Phone_Contact_BlankPhoto.svg' ++ source: 'qrc:/images/HMI_Phone_Contact_BlankPhoto.svg' + Layout.preferredWidth: 150 + Layout.preferredHeight: 150 + } +diff --git a/app/TabImageButton.qml b/app/TabImageButton.qml +index 2176595..c707574 100644 +--- a/app/TabImageButton.qml ++++ b/app/TabImageButton.qml +@@ -41,6 +41,7 @@ import QtQuick.Layouts 1.1 + import QtQuick.Controls 2.2 + import QtQuick.Controls.impl 2.2 + import QtQuick.Templates 2.2 as T ++import QtQuick.Controls.Basic 2.2 + + T.TabButton { + id: control +@@ -53,13 +54,13 @@ T.TabButton { + + padding: 6 + +- property url icon ++ property url iconSource + + contentItem: ColumnLayout { + spacing: 20 + Image { + Layout.alignment: Qt.AlignCenter +- source: control.icon ++ source: control.iconSource + width: 96 + height: 96 + +@@ -70,7 +71,7 @@ T.TabButton { + font: control.font + elide: Text.ElideRight + opacity: enabled ? 1 : 0.3 +- color: !control.checked ? Default.textLightColor : control.down ? Default.textDarkColor : Default.textColor ++ color: !control.checked ? Basic.textLightColor : control.down ? Basic.textDarkColor : Basic.textColor + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } +@@ -78,7 +79,7 @@ T.TabButton { + background: Rectangle { + implicitHeight: 160 + color: control.down +- ? (control.checked ? Default.tabButtonCheckedPressedColor : Default.tabButtonPressedColor) +- : (control.checked ? "transparent" : Default.tabButtonColor) ++ ? (control.checked ? Basic.tabButtonCheckedPressedColor : Basic.tabButtonPressedColor) ++ : (control.checked ? "transparent" : Basic.tabButtonColor) + } + } diff --git a/recipes-demo/phone/phone_git.bb b/recipes-demo/phone/phone_git.bb index 4c59bcbc3..37330ff79 100644 --- a/recipes-demo/phone/phone_git.bb +++ b/recipes-demo/phone/phone_git.bb @@ -6,16 +6,18 @@ SECTION = "apps" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" -DEPENDS = "qtquickcontrols2 libqtappfw gstreamer1.0" +DEPENDS = "qtdeclarative libqtappfw gstreamer1.0" PV = "1.0+git${SRCPV}" -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/phone;protocol=https;branch=${AGL_BRANCH}" +SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/phone;protocol=https;branch=${AGL_BRANCH} \ + file://0001-Migrate-to-Qt-6.patch \ + " SRCREV = "bfcc2fa194474a7bc317583072b62c977ae0fc14" S = "${WORKDIR}/git" -inherit qmake5 pkgconfig agl-app +inherit qt6-qmake pkgconfig agl-app AGL_APP_NAME = "Phone" diff --git a/recipes-demo/qtquickcontrols2-agl-style/qtquickcontrols2-agl-style/0001-Migrate-to-Qt-6.patch b/recipes-demo/qtquickcontrols2-agl-style/qtquickcontrols2-agl-style/0001-Migrate-to-Qt-6.patch new file mode 100644 index 000000000..f00cb1420 --- /dev/null +++ b/recipes-demo/qtquickcontrols2-agl-style/qtquickcontrols2-agl-style/0001-Migrate-to-Qt-6.patch @@ -0,0 +1,71 @@ +From 6581ce20312ee15f35e00e29e363270616e96359 Mon Sep 17 00:00:00 2001 +From: Indivara Weerasuriya <1806262-indivara@users.noreply.git.qt.io> +Date: Wed, 24 Jul 2024 09:37:08 +0900 +Subject: [PATCH] Migrate to Qt 6 + +--- + imports/qtquickcontrols2aglstyle/ProgressBar.qml | 2 +- + imports/qtquickcontrols2aglstyle/Slider.qml | 2 +- + imports/qtquickcontrols2aglstyle/qmldir | 10 ++++++++++ + .../qtquickcontrols2aglstyle.pro | 4 ++-- + 4 files changed, 14 insertions(+), 4 deletions(-) + create mode 100644 imports/qtquickcontrols2aglstyle/qmldir + +diff --git a/imports/qtquickcontrols2aglstyle/ProgressBar.qml b/imports/qtquickcontrols2aglstyle/ProgressBar.qml +index 6d5e3ae..fca0b8a 100644 +--- a/imports/qtquickcontrols2aglstyle/ProgressBar.qml ++++ b/imports/qtquickcontrols2aglstyle/ProgressBar.qml +@@ -16,7 +16,7 @@ + + import QtQuick 2.6 + import QtQuick.Templates 2.0 as T +-import QtGraphicalEffects 1.0 ++import Qt5Compat.GraphicalEffects + + T.ProgressBar { + id: control +diff --git a/imports/qtquickcontrols2aglstyle/Slider.qml b/imports/qtquickcontrols2aglstyle/Slider.qml +index 5b6a495..02f4555 100644 +--- a/imports/qtquickcontrols2aglstyle/Slider.qml ++++ b/imports/qtquickcontrols2aglstyle/Slider.qml +@@ -16,7 +16,7 @@ + + import QtQuick 2.6 + import QtQuick.Templates 2.0 as T +-import QtGraphicalEffects 1.0 ++import Qt5Compat.GraphicalEffects + + T.Slider { + id: root +diff --git a/imports/qtquickcontrols2aglstyle/qmldir b/imports/qtquickcontrols2aglstyle/qmldir +new file mode 100644 +index 0000000..e4e4417 +--- /dev/null ++++ b/imports/qtquickcontrols2aglstyle/qmldir +@@ -0,0 +1,10 @@ ++module AGL ++ApplicationWindow 1.0 ApplicationWindow.qml ++Button 1.0 Button.qml ++Label 1.0 Label.qml ++Page 1.0 Page.qml ++ProgressBar 1.0 ProgressBar.qml ++Slider 1.0 Slider.qml ++Switch 1.0 Switch.qml ++TextField 1.0 TextField.qml ++Tumbler 1.0 Tumbler.qml +\ No newline at end of file +diff --git a/imports/qtquickcontrols2aglstyle/qtquickcontrols2aglstyle.pro b/imports/qtquickcontrols2aglstyle/qtquickcontrols2aglstyle.pro +index 5a34485..ba24e9d 100644 +--- a/imports/qtquickcontrols2aglstyle/qtquickcontrols2aglstyle.pro ++++ b/imports/qtquickcontrols2aglstyle/qtquickcontrols2aglstyle.pro +@@ -1,8 +1,8 @@ + TEMPLATE = aux + +-DISTFILES = *.qml images ++DISTFILES = *.qml images qmldir + + files.files = $$DISTFILES +-files.path = $$PREFIX$$[QT_INSTALL_QML]/QtQuick/Controls.2/AGL ++files.path = $$PREFIX$$[QT_INSTALL_BINS]/AGL + + INSTALLS += files diff --git a/recipes-demo/qtquickcontrols2-agl-style/qtquickcontrols2-agl-style_git.bb b/recipes-demo/qtquickcontrols2-agl-style/qtquickcontrols2-agl-style_git.bb index 49d2e8565..3ccee1210 100644 --- a/recipes-demo/qtquickcontrols2-agl-style/qtquickcontrols2-agl-style_git.bb +++ b/recipes-demo/qtquickcontrols2-agl-style/qtquickcontrols2-agl-style_git.bb @@ -3,21 +3,21 @@ HOMEPAGE = "https://git.automotivelinux.org/src/qtquickcontrols2-agl-style" LICENSE = "MPL-2.0" LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=815ca599c9df247a0c7f619bab123dad" -DEPENDS = "qtquickcontrols2" +DEPENDS = "qtdeclarative" PV = "1.0+git${SRCPV}" -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/qtquickcontrols2-agl-style;protocol=https;branch=${AGL_BRANCH}" +SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/qtquickcontrols2-agl-style;protocol=https;branch=${AGL_BRANCH} \ + file://0001-Migrate-to-Qt-6.patch \ + " SRCREV = "c02692a3c20d9aed1192137a67d5be882c60e71f" S = "${WORKDIR}/git" -inherit qmake5 +inherit qt6-qmake FILES:${PN} += "${OE_QMAKE_PATH_QML}/QtQuick/Controls.2/AGL/*" RDEPENDS:${PN} += " \ - qtquickcontrols-qmlplugins \ - qtquickcontrols2-qmlplugins \ qtsvg-plugins \ " diff --git a/recipes-demo/qtquickcontrols2-agl/qtquickcontrols2-agl_git.bb b/recipes-demo/qtquickcontrols2-agl/qtquickcontrols2-agl_git.bb index 79dac686f..68a68076e 100644 --- a/recipes-demo/qtquickcontrols2-agl/qtquickcontrols2-agl_git.bb +++ b/recipes-demo/qtquickcontrols2-agl/qtquickcontrols2-agl_git.bb @@ -3,7 +3,7 @@ HOMEPAGE = "https://git.automotivelinux.org/src/qtquickcontrols2-agl" LICENSE = "MPL-2.0" LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=815ca599c9df247a0c7f619bab123dad" -DEPENDS = "qtquickcontrols2" +DEPENDS = "qtdeclarative" PV = "1.0+git${SRCPV}" @@ -12,12 +12,10 @@ SRCREV = "22b538aae1f69de5273f1e42a854cfab23a32b60" S = "${WORKDIR}/git" -inherit qmake5 +inherit qt6-qmake FILES:${PN} += "${OE_QMAKE_PATH_QML}/AGL/Demo/Controls/*" RDEPENDS:${PN} += " \ - qtquickcontrols-qmlplugins \ - qtquickcontrols2-qmlplugins \ qtsvg-plugins \ " diff --git a/recipes-demo/radio/files/0001-Migrate-to-Qt-6.patch b/recipes-demo/radio/files/0001-Migrate-to-Qt-6.patch new file mode 100644 index 000000000..245324c4b --- /dev/null +++ b/recipes-demo/radio/files/0001-Migrate-to-Qt-6.patch @@ -0,0 +1,103 @@ +From a1a5be00d1e5ba0d857b9b83769a2c666c2be313 Mon Sep 17 00:00:00 2001 +From: Indivara Weerasuriya <1806262-indivara@users.noreply.git.qt.io> +Date: Wed, 24 Jul 2024 09:46:03 +0900 +Subject: [PATCH] Migrate to Qt 6 + +--- + app/Radio.qml | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +diff --git a/app/Radio.qml b/app/Radio.qml +index bd67c84..d2950af 100644 +--- a/app/Radio.qml ++++ b/app/Radio.qml +@@ -60,7 +60,7 @@ ApplicationWindow { + anchors.right: parent.right + anchors.bottom: controls.top + fillMode: Image.Stretch +- source: './images/HMI_Radio_Equalizer.svg' ++ source: 'qrc:/images/HMI_Radio_Equalizer.svg' + } + Item { + id: controls +@@ -83,11 +83,11 @@ ApplicationWindow { + Row { + spacing: 20 + Image { +- source: './images/FM_Icons_FM.svg' ++ source: 'qrc:/images/FM_Icons_FM.svg' + } + // ToggleButton { +-// offImage: './images/FM_Icons_FM.svg' +-// onImage: './images/FM_Icons_AM.svg' ++// offImage: 'qrc:/images/FM_Icons_FM.svg' ++// onImage: 'qrc:/images/FM_Icons_AM.svg' + // onCheckedChanged: { + // radio.band = checked ? radio.amBand : radio.fmBand + // radio.frequency = radio.minFrequency +@@ -146,7 +146,7 @@ ApplicationWindow { + } + + ImageButton { +- offImage: './images/AGL_MediaPlayer_BackArrow.svg' ++ offImage: 'qrc:/images/AGL_MediaPlayer_BackArrow.svg' + Timer { + running: parent.pressed + triggeredOnStart: true +@@ -162,7 +162,7 @@ ApplicationWindow { + } + + ImageButton { +- offImage: './images/AGL_MediaPlayer_ForwardArrow.svg' ++ offImage: 'qrc:/images/AGL_MediaPlayer_ForwardArrow.svg' + Timer { + running: parent.pressed + triggeredOnStart: true +@@ -181,7 +181,7 @@ ApplicationWindow { + + ImageButton { + id: play +- offImage: './images/AGL_MediaPlayer_Player_Play.svg' ++ offImage: 'qrc:/images/AGL_MediaPlayer_Player_Play.svg' + onClicked: { + radio.start() + } +@@ -190,7 +190,7 @@ ApplicationWindow { + when: radio.playing + PropertyChanges { + target: play +- offImage: './images/AGL_MediaPlayer_Player_Pause.svg' ++ offImage: 'qrc:/images/AGL_MediaPlayer_Player_Pause.svg' + onClicked: radio.stop() + } + } +@@ -207,7 +207,7 @@ ApplicationWindow { + + ImageButton { + id: scanBackwardBtn +- offImage: './images/AGL_MediaPlayer_BackArrow.svg' ++ offImage: 'qrc:/images/AGL_MediaPlayer_BackArrow.svg' + states: [ + State { + when: radio.playing +@@ -224,7 +224,7 @@ ApplicationWindow { + + ImageButton { + id: scanForwardBtn +- offImage: './images/AGL_MediaPlayer_ForwardArrow.svg' ++ offImage: 'qrc:/images/AGL_MediaPlayer_ForwardArrow.svg' + states: [ + State { + when: radio.playing +@@ -284,9 +284,9 @@ ApplicationWindow { + source: { + switch (model.modelData.band) { + case radio.fmBand: +- return './images/FM_Icons_FM.svg' ++ return 'qrc:/images/FM_Icons_FM.svg' + case radio.amBand: +- return './images/FM_Icons_AM.svg' ++ return 'qrc:/images/FM_Icons_AM.svg' + } + return null + } diff --git a/recipes-demo/radio/radio_git.bb b/recipes-demo/radio/radio_git.bb index c9d8ed7af..06112a046 100644 --- a/recipes-demo/radio/radio_git.bb +++ b/recipes-demo/radio/radio_git.bb @@ -6,7 +6,7 @@ SECTION = "apps" LICENSE = "Apache-2.0 & GPL-2.0-or-later" LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" -DEPENDS = "qtquickcontrols2 libqtappfw" +DEPENDS = "qtdeclarative libqtappfw" PV = "1.0+git${SRCPV}" @@ -14,12 +14,13 @@ SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/radio;protocol=https;bra file://presets-ALS.conf \ file://presets-CES.conf \ file://presets-FOSDEM.conf \ -" + file://0001-Migrate-to-Qt-6.patch \ + " SRCREV = "aef392d9df8bb5e4ada4b3f8f44016e8a839d154" S = "${WORKDIR}/git" -inherit qmake5 pkgconfig agl-app +inherit qt6-qmake pkgconfig agl-app AGL_APP_NAME = "Radio" diff --git a/recipes-demo/settings/settings/0001-Migrate-to-Qt-6.patch b/recipes-demo/settings/settings/0001-Migrate-to-Qt-6.patch new file mode 100644 index 000000000..a265ef24d --- /dev/null +++ b/recipes-demo/settings/settings/0001-Migrate-to-Qt-6.patch @@ -0,0 +1,253 @@ +From 9fb7185321d509d1e3a56fb47c0c135a06e42480 Mon Sep 17 00:00:00 2001 +From: Indivara Weerasuriya <1806262-indivara@users.noreply.git.qt.io> +Date: Wed, 24 Jul 2024 09:47:24 +0900 +Subject: [PATCH] Migrate to Qt 6 + +--- + app/SettingPage.qml | 2 +- + app/SettingsLauncher.qml | 2 +- + app/bluetooth/Bluetooth.qml | 2 +- + app/datetime/DateEdit.qml | 12 ++++++------ + app/datetime/DateTime.qml | 2 +- + app/datetime/EditSeparator.qml | 2 +- + app/datetime/TimeEdit.qml | 12 ++++++------ + app/main.cpp | 7 ++++--- + app/version/Version.qml | 2 +- + app/wifi/Wifi.qml | 2 +- + app/wired/Wired.qml | 2 +- + 11 files changed, 24 insertions(+), 23 deletions(-) + +diff --git a/app/SettingPage.qml b/app/SettingPage.qml +index d5858e8..b0a587d 100644 +--- a/app/SettingPage.qml ++++ b/app/SettingPage.qml +@@ -52,7 +52,7 @@ Page { + ImageButton { + id: back + anchors.bottom: parent.bottom +- offImage: '../images/HMI_Settings_X.svg' ++ offImage: 'qrc:/images/HMI_Settings_X.svg' + onClicked: root.done() + } + } +diff --git a/app/SettingsLauncher.qml b/app/SettingsLauncher.qml +index 01c5433..14059d0 100644 +--- a/app/SettingsLauncher.qml ++++ b/app/SettingsLauncher.qml +@@ -69,7 +69,7 @@ Page { + } + } + Image { +- source: '../images/HMI_Settings_DividingLine.svg' ++ source: 'qrc:/images/HMI_Settings_DividingLine.svg' + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + visible: model.index > 0 +diff --git a/app/bluetooth/Bluetooth.qml b/app/bluetooth/Bluetooth.qml +index c1b2aa2..d5178df 100644 +--- a/app/bluetooth/Bluetooth.qml ++++ b/app/bluetooth/Bluetooth.qml +@@ -199,7 +199,7 @@ SettingPage { + anchors.left: parent.left + anchors.leftMargin: 80 + height: 5 +- source: (bluetooth.power === true && pairedListView.count) ? '../images/HMI_Settings_DividingLine.svg':'' ++ source: (bluetooth.power === true && pairedListView.count) ? 'qrc:/images/HMI_Settings_DividingLine.svg':'' + } + Text { + id: detectedlabel +diff --git a/app/datetime/DateEdit.qml b/app/datetime/DateEdit.qml +index abfcfa9..cac55e8 100644 +--- a/app/datetime/DateEdit.qml ++++ b/app/datetime/DateEdit.qml +@@ -30,7 +30,7 @@ GridLayout { + + ImageButton { + Layout.alignment: Layout.Center +- offImage: './images/HMI_Settings_TimeDate_Arrow_Up.svg' ++ offImage: 'qrc:/images/HMI_Settings_TimeDate_Arrow_Up.svg' + onClicked: monthControl.currentIndex++ + } + Tumbler { +@@ -43,7 +43,7 @@ GridLayout { + } + ImageButton { + Layout.alignment: Layout.Center +- offImage: './images/HMI_Settings_TimeDate_Arrow_Down.svg' ++ offImage: 'qrc:/images/HMI_Settings_TimeDate_Arrow_Down.svg' + onClicked: monthControl.currentIndex-- + } + +@@ -53,7 +53,7 @@ GridLayout { + + ImageButton { + Layout.alignment: Layout.Center +- offImage: './images/HMI_Settings_TimeDate_Arrow_Up.svg' ++ offImage: 'qrc:/images/HMI_Settings_TimeDate_Arrow_Up.svg' + onClicked: dayControl.currentIndex++ + } + +@@ -91,13 +91,13 @@ GridLayout { + + ImageButton { + Layout.alignment: Layout.Center +- offImage: './images/HMI_Settings_TimeDate_Arrow_Down.svg' ++ offImage: 'qrc:/images/HMI_Settings_TimeDate_Arrow_Down.svg' + onClicked: dayControl.currentIndex-- + } + + ImageButton { + Layout.alignment: Layout.Center +- offImage: './images/HMI_Settings_TimeDate_Arrow_Up.svg' ++ offImage: 'qrc:/images/HMI_Settings_TimeDate_Arrow_Up.svg' + onClicked: yearControl.currentIndex++ + } + +@@ -116,7 +116,7 @@ GridLayout { + + ImageButton { + Layout.alignment: Layout.Center +- offImage: './images/HMI_Settings_TimeDate_Arrow_Down.svg' ++ offImage: 'qrc:/images/HMI_Settings_TimeDate_Arrow_Down.svg' + onClicked: yearControl.currentIndex-- + } + } +diff --git a/app/datetime/DateTime.qml b/app/datetime/DateTime.qml +index 06cbc8c..c58de69 100644 +--- a/app/datetime/DateTime.qml ++++ b/app/datetime/DateTime.qml +@@ -31,7 +31,7 @@ SettingPage { + Label { text: 'Date'} + DateEdit {} + Image { +- source: '../images/HMI_Settings_DividingLine.svg' ++ source: 'qrc:/images/HMI_Settings_DividingLine.svg' + } + Label { text: 'Time'} + TimeEdit {} +diff --git a/app/datetime/EditSeparator.qml b/app/datetime/EditSeparator.qml +index e833b52..a58c809 100644 +--- a/app/datetime/EditSeparator.qml ++++ b/app/datetime/EditSeparator.qml +@@ -30,7 +30,7 @@ ColumnLayout { + Layout.fillHeight: true + Layout.preferredHeight: 2 + Layout.alignment: Layout.Center +- source: './images/HMI_Settings_TimeDate_Arrow_DividingLine.svg' ++ source: 'qrc:/images/HMI_Settings_TimeDate_Arrow_DividingLine.svg' + } + } + Item { +diff --git a/app/datetime/TimeEdit.qml b/app/datetime/TimeEdit.qml +index 69a049b..2db1403 100644 +--- a/app/datetime/TimeEdit.qml ++++ b/app/datetime/TimeEdit.qml +@@ -30,7 +30,7 @@ GridLayout { + + ImageButton { + Layout.alignment: Layout.Center +- offImage: './images/HMI_Settings_TimeDate_Arrow_Up.svg' ++ offImage: 'qrc:/images/HMI_Settings_TimeDate_Arrow_Up.svg' + onClicked: hourControl.currentIndex++ + } + Tumbler { +@@ -40,7 +40,7 @@ GridLayout { + } + ImageButton { + Layout.alignment: Layout.Center +- offImage: './images/HMI_Settings_TimeDate_Arrow_Down.svg' ++ offImage: 'qrc:/images/HMI_Settings_TimeDate_Arrow_Down.svg' + onClicked: hourControl.currentIndex-- + } + +@@ -50,7 +50,7 @@ GridLayout { + + ImageButton { + Layout.alignment: Layout.Center +- offImage: './images/HMI_Settings_TimeDate_Arrow_Up.svg' ++ offImage: 'qrc:/images/HMI_Settings_TimeDate_Arrow_Up.svg' + onClicked: minutesControl.currentIndex++ + } + +@@ -62,13 +62,13 @@ GridLayout { + + ImageButton { + Layout.alignment: Layout.Center +- offImage: './images/HMI_Settings_TimeDate_Arrow_Down.svg' ++ offImage: 'qrc:/images/HMI_Settings_TimeDate_Arrow_Down.svg' + onClicked: minutesControl.currentIndex-- + } + + ImageButton { + Layout.alignment: Layout.Center +- offImage: './images/HMI_Settings_TimeDate_Arrow_Up.svg' ++ offImage: 'qrc:/images/HMI_Settings_TimeDate_Arrow_Up.svg' + onClicked: ampmControl.currentIndex++ + } + +@@ -80,7 +80,7 @@ GridLayout { + + ImageButton { + Layout.alignment: Layout.Center +- offImage: './images/HMI_Settings_TimeDate_Arrow_Down.svg' ++ offImage: 'qrc:/images/HMI_Settings_TimeDate_Arrow_Down.svg' + onClicked: ampmControl.currentIndex-- + } + } +diff --git a/app/main.cpp b/app/main.cpp +index bf82588..35b4c0e 100644 +--- a/app/main.cpp ++++ b/app/main.cpp +@@ -78,9 +78,10 @@ int main(int argc, char *argv[]) + // active auto-connect that was in agl-service-bluetooth. The latter is + // now dependent on this application being run until further re-architecting + // takes place. +- Network *network = new Network(true, context); +- network->power(true, QString("bluetooth")); +- context->setContextProperty("network", network); ++ // Network *network = new Network(true, context); ++ // network->power(true, QString("bluetooth")); ++ QObject *network = new QObject(context); // prevent crash ++ context->setContextProperty("network", network); + + engine.load(QUrl(QStringLiteral("qrc:/Settings.qml"))); + +diff --git a/app/version/Version.qml b/app/version/Version.qml +index 8d47ad5..1eaced7 100644 +--- a/app/version/Version.qml ++++ b/app/version/Version.qml +@@ -40,7 +40,7 @@ SettingPage { + clip: true + Image { + anchors.centerIn: parent +- source: './images/agl_slide_0.png' ++ source: 'qrc:/images/agl_slide_0.png' + z: -1 + opacity: 0.5 + } +diff --git a/app/wifi/Wifi.qml b/app/wifi/Wifi.qml +index ba9d89e..9331d73 100644 +--- a/app/wifi/Wifi.qml ++++ b/app/wifi/Wifi.qml +@@ -106,7 +106,7 @@ SettingPage { + } + + Image { +- source: '../images/HMI_Settings_DividingLine.svg' ++ source: 'qrc:/images/HMI_Settings_DividingLine.svg' + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + anchors.topMargin: -15 +diff --git a/app/wired/Wired.qml b/app/wired/Wired.qml +index 0a3e312..610d2c6 100644 +--- a/app/wired/Wired.qml ++++ b/app/wired/Wired.qml +@@ -111,7 +111,7 @@ SettingPage { + } + + Image { +- source: '../images/HMI_Settings_DividingLine.svg' ++ source: 'qrc:/images/HMI_Settings_DividingLine.svg' + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + anchors.topMargin: -15 diff --git a/recipes-demo/settings/settings_git.bb b/recipes-demo/settings/settings_git.bb index c090ec7f8..43cbcb009 100644 --- a/recipes-demo/settings/settings_git.bb +++ b/recipes-demo/settings/settings_git.bb @@ -9,26 +9,27 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" DEPENDS = " \ qtbase \ qtdeclarative \ - qtquickcontrols2 \ qtvirtualkeyboard \ libqtappfw \ " PV = "2.0+git${SRCPV}" -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/settings;protocol=https;branch=${AGL_BRANCH}" +SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/settings;protocol=https;branch=${AGL_BRANCH} \ + file://0001-Migrate-to-Qt-6.patch \ + " SRCREV = "26dc6a8c8847248450bf902124b7cd867e027274" S = "${WORKDIR}/git" -inherit qmake5 pkgconfig agl-app +inherit qt6-qmake pkgconfig agl-app AGL_APP_NAME = "Settings" RDEPENDS:${PN} += " \ qtwayland \ qtbase-qmlplugins \ - qtgraphicaleffects-qmlplugins \ + qt5compat \ qtquickcontrols2-agl-style \ libqtappfw \ " diff --git a/recipes-demo/videoplayer/videoplayer_git.bb b/recipes-demo/videoplayer/videoplayer_git.bb index 36c837582..8c6600779 100644 --- a/recipes-demo/videoplayer/videoplayer_git.bb +++ b/recipes-demo/videoplayer/videoplayer_git.bb @@ -14,12 +14,12 @@ S = "${WORKDIR}/git" # build-time dependencies DEPENDS += " \ - qtquickcontrols2 \ + qtdeclarative \ libqtappfw \ qtmultimedia \ " -inherit qmake5 agl-app +inherit qt6-qmake agl-app AGL_APP_NAME = "Video" diff --git a/recipes-demo/window-management-client-grpc/window-management-client-grpc/0001-Migrate-to-Qt-6.patch b/recipes-demo/window-management-client-grpc/window-management-client-grpc/0001-Migrate-to-Qt-6.patch new file mode 100644 index 000000000..3562b64f6 --- /dev/null +++ b/recipes-demo/window-management-client-grpc/window-management-client-grpc/0001-Migrate-to-Qt-6.patch @@ -0,0 +1,74 @@ +From 75a141871c45b7e940fbdc9f0c97c43734789074 Mon Sep 17 00:00:00 2001 +From: Indivara Weerasuriya <1806262-indivara@users.noreply.git.qt.io> +Date: Wed, 24 Jul 2024 09:57:30 +0900 +Subject: [PATCH] Migrate to Qt 6 + +--- + meson.build | 2 +- + src/meson.build | 10 +++++----- + src/qml/Main.qml | 2 +- + 3 files changed, 7 insertions(+), 7 deletions(-) + +diff --git a/meson.build b/meson.build +index beb933d..634714f 100644 +--- a/meson.build ++++ b/meson.build +@@ -26,5 +26,5 @@ project ( + license: 'MIT/Expat', + ) + +-qt5 = import('qt5') ++qt = import('qt6') + subdir('src') +diff --git a/src/meson.build b/src/meson.build +index b37e24f..5a59f13 100644 +--- a/src/meson.build ++++ b/src/meson.build +@@ -1,7 +1,7 @@ + pkgconfig = import('pkgconfig') + cpp = meson.get_compiler('cpp') + +-qt5_dep = dependency('qt5', modules: ['Qml', 'Quick', 'Gui']) ++qt_dep = dependency('qt6', modules: ['Qml', 'Quick', 'Gui']) + + grpcpp_reflection_dep = cpp.find_library('grpc++_reflection') + protoc = find_program('protoc') +@@ -31,7 +31,7 @@ grpc_deps = [ + ] + + window_mgnt_dep = [ +- qt5_dep, ++ qt_dep, + grpc_deps, + ] + +@@ -40,14 +40,14 @@ window_mgnt_resources = [ + 'qml/qml.qrc' + ] + +-resource_files = qt5.compile_resources(sources: window_mgnt_resources) ++resource_files = qt.compile_resources(sources: window_mgnt_resources) + + window_mgnt_src_headers = [ + 'AglShellGrpcClient.h', + ] + +-moc_files = qt5.compile_moc(headers: window_mgnt_src_headers, +- dependencies: qt5_dep) ++moc_files = qt.compile_moc(headers: window_mgnt_src_headers, ++ dependencies: qt_dep) + window_mgnt_src = [ + 'AglShellGrpcClient.cpp', + 'main.cpp', +diff --git a/src/qml/Main.qml b/src/qml/Main.qml +index 151f3b8..5ddd2f7 100644 +--- a/src/qml/Main.qml ++++ b/src/qml/Main.qml +@@ -10,6 +10,6 @@ Window { + + Image { + anchors.fill: parent +- source: './images/AGL_HMI_Blue_Background_NoCar-01.png' ++ source: 'qrc:/images/AGL_HMI_Blue_Background_NoCar-01.png' + } + } diff --git a/recipes-demo/window-management-client-grpc/window-management-client-grpc_git.bb b/recipes-demo/window-management-client-grpc/window-management-client-grpc_git.bb index 769a56f61..c864be897 100644 --- a/recipes-demo/window-management-client-grpc/window-management-client-grpc_git.bb +++ b/recipes-demo/window-management-client-grpc/window-management-client-grpc_git.bb @@ -6,13 +6,15 @@ SECTION = "apps" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" -DEPENDS = "qtbase qtdeclarative qtquickcontrols2 qtwayland \ +DEPENDS = "qtbase qtdeclarative qtwayland \ qtwayland-native libqtappfw grpc grpc-native \ " PV = "2.0+git${SRCPV}" -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/window-management-client-grpc.git;protocol=https;branch=${AGL_BRANCH}" +SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/window-management-client-grpc.git;protocol=https;branch=${AGL_BRANCH} \ + file://0001-Migrate-to-Qt-6.patch \ + " SRCREV = "cb7aa009ef9873967152e716fb01fecc30d401f7" S = "${WORKDIR}/git" |