diff --git a/.github/actions/qt-android/action.yml b/.github/actions/qt-android/action.yml
index e44941c11163..1caf136d0a4c 100644
--- a/.github/actions/qt-android/action.yml
+++ b/.github/actions/qt-android/action.yml
@@ -10,7 +10,7 @@ inputs:
version:
description: Qt Version
required: false
- default: 6.8.3
+ default: 6.10.0
abis:
description: ABIs to Build
required: false
diff --git a/.github/workflows/android-linux.yml b/.github/workflows/android-linux.yml
index bc9490b8dbb5..fd928327396a 100644
--- a/.github/workflows/android-linux.yml
+++ b/.github/workflows/android-linux.yml
@@ -32,7 +32,7 @@ jobs:
fail-fast: false
matrix:
build_type: [Release]
- qt_version: [6.8.3]
+ qt_version: [6.10.0]
defaults:
run:
diff --git a/.github/workflows/android-macos.yml b/.github/workflows/android-macos.yml
index 1c0272a98dbf..d2c2e9241c35 100644
--- a/.github/workflows/android-macos.yml
+++ b/.github/workflows/android-macos.yml
@@ -37,7 +37,7 @@ jobs:
env:
ARTIFACT: QGroundControl.apk
- QT_VERSION: 6.8.3
+ QT_VERSION: 6.10.0
QT_ANDROID_KEYSTORE_PATH: ${{ github.workspace }}/deploy/android/android_release.keystore
QT_ANDROID_KEYSTORE_ALIAS: QGCAndroidKeyStore
QT_ANDROID_KEYSTORE_STORE_PASS: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
diff --git a/.github/workflows/android-windows.yml b/.github/workflows/android-windows.yml
index 5be99b20666a..0dc7c4425419 100644
--- a/.github/workflows/android-windows.yml
+++ b/.github/workflows/android-windows.yml
@@ -37,7 +37,7 @@ jobs:
env:
ARTIFACT: QGroundControl.apk
- QT_VERSION: 6.8.3
+ QT_VERSION: 6.10.0
QT_ANDROID_KEYSTORE_PATH: ${{ github.workspace }}\deploy\android\android_release.keystore
QT_ANDROID_KEYSTORE_ALIAS: QGCAndroidKeyStore
QT_ANDROID_KEYSTORE_STORE_PASS: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
diff --git a/.github/workflows/custom.yml b/.github/workflows/custom.yml
index 0dcad6ff8315..bc13a66ab4d1 100644
--- a/.github/workflows/custom.yml
+++ b/.github/workflows/custom.yml
@@ -32,7 +32,7 @@ jobs:
shell: cmd
env:
- QT_VERSION: 6.8.3
+ QT_VERSION: 6.10.0
GST_VERSION: 1.22.12
steps:
diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml
index 0cefe5d50d79..875857b90f71 100644
--- a/.github/workflows/ios.yml
+++ b/.github/workflows/ios.yml
@@ -22,7 +22,7 @@ jobs:
env:
ARTIFACT: QGroundControl.app
PACKAGE: QGroundControl
- QT_VERSION: 6.8.3
+ QT_VERSION: 6.10.0
steps:
- name: Checkout repo
diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml
index f14bf2451da6..c06133b0dd92 100644
--- a/.github/workflows/linux.yml
+++ b/.github/workflows/linux.yml
@@ -54,7 +54,7 @@ jobs:
shell: bash
env:
- QT_VERSION: 6.8.3
+ QT_VERSION: 6.10.0
steps:
- name: Checkout repo
diff --git a/.github/workflows/lupdate.yaml b/.github/workflows/lupdate.yaml
index f8e23be05c94..a9f608f6af16 100644
--- a/.github/workflows/lupdate.yaml
+++ b/.github/workflows/lupdate.yaml
@@ -26,7 +26,7 @@ jobs:
- name: Install Qt for Linux
uses: jurplel/install-qt-action@v4
with:
- version: 6.8.3
+ version: 6.10.0
cache: true
- name: Update translation files
diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml
index e204078aa832..57ef1f8a2af0 100644
--- a/.github/workflows/macos.yml
+++ b/.github/workflows/macos.yml
@@ -34,7 +34,7 @@ jobs:
shell: bash
env:
- QT_VERSION: 6.8.3
+ QT_VERSION: 6.10.0
steps:
- name: Checkout repo
diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml
index 6944a6e7da16..32ca1c93679c 100644
--- a/.github/workflows/windows.yml
+++ b/.github/workflows/windows.yml
@@ -54,7 +54,7 @@ jobs:
shell: cmd
env:
- QT_VERSION: 6.8.3
+ QT_VERSION: 6.10.0
steps:
- name: Checkout repo
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 307a2f0da8fd..6e5d0548d4eb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -103,6 +103,8 @@ endif()
# Qt6 Configuration
#######################################################
+set(QT_NO_PRIVATE_MODULE_WARNING ON)
+
find_package(Qt6
${QGC_QT_MINIMUM_VERSION}...${QGC_QT_MAXIMUM_VERSION}
REQUIRED
@@ -114,6 +116,7 @@ find_package(Qt6
Gui
LinguistTools
Location
+ LocationPrivate
Multimedia
Network
Positioning
@@ -222,6 +225,10 @@ qt_add_translations(${CMAKE_PROJECT_NAME}
LUPDATE_OPTIONS -no-obsolete
TS_FILE_DIR "${CMAKE_SOURCE_DIR}/translations"
TS_FILE_BASE ${CMAKE_PROJECT_NAME}
+ # TS_FILES_OUTPUT_VARIABLE _ts_files_generated
+ # TS_OUTPUT_DIRECTORY "{CMAKE_SOURCE_DIR}/translations"
+ # QM_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/i18n"
+ # MERGE_QT_TRANSLATIONS
)
qgc_set_qt_resource_alias(${CMAKE_SOURCE_DIR}/resources/qtquickcontrols2.conf)
diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml
index c56a49e6d883..5d4a9db5cda1 100644
--- a/android/AndroidManifest.xml
+++ b/android/AndroidManifest.xml
@@ -6,17 +6,6 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -41,7 +30,7 @@
android:requestLegacyExternalStorage="true"
android:allowBackup="true"
android:fullBackupOnly="false"
- android:icon="@drawable/icon"
+ android:icon="-- %%INSERT_APP_ICON%% --"
android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config">
diff --git a/android/build.gradle b/android/build.gradle
index 6e3462cfe348..d6227c3d77e9 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -49,7 +49,7 @@ android {
ndkVersion = androidNdkVersion
// Extract native libraries from the APK
- packagingOptions.jniLibs.useLegacyPackaging = true
+ // packagingOptions.jniLibs.useLegacyPackaging = true
sourceSets {
main {
@@ -66,7 +66,7 @@ android {
tasks.withType(JavaCompile) {
options.incremental = true
- // options.compilerArgs += ['-Xlint:deprecation']
+ options.compilerArgs += ['-Xlint:all'] // deprecation
}
buildFeatures {
diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml
index 8c81b304c134..8853b779878a 100644
--- a/android/res/values/strings.xml
+++ b/android/res/values/strings.xml
@@ -1,5 +1,5 @@
-
+
USB Devices
CDC ACM USB Device
Chrome CCD USB Device
diff --git a/android/res/xml/qtprovider_paths.xml b/android/res/xml/qtprovider_paths.xml
index ae5b4b6074e7..3488bf270811 100644
--- a/android/res/xml/qtprovider_paths.xml
+++ b/android/res/xml/qtprovider_paths.xml
@@ -1,4 +1,11 @@
+
+
+
+
+
+
+
diff --git a/cmake/CustomOptions.cmake b/cmake/CustomOptions.cmake
index d49b756a9e1e..aaa4a587f669 100644
--- a/cmake/CustomOptions.cmake
+++ b/cmake/CustomOptions.cmake
@@ -52,6 +52,7 @@ option(QGC_DISABLE_PX4_PLUGIN "Disable PX4 Plugin" OFF)
option(QGC_DISABLE_PX4_PLUGIN_FACTORY "Disable PX4 Plugin Factory" OFF)
# Android
+set(QGC_QT_ANDROID_COMPILE_SDK_VERSION "36" CACHE STRING "Android Compile SDK Version")
set(QGC_QT_ANDROID_TARGET_SDK_VERSION "36" CACHE STRING "Android Target SDK Version")
set(QGC_ANDROID_PACKAGE_NAME "${QGC_PACKAGE_NAME}" CACHE STRING "Android Package Name")
set(QGC_ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_SOURCE_DIR}/android" CACHE PATH "Android Package Path")
@@ -59,7 +60,7 @@ set(QT_ANDROID_DEPLOYMENT_TYPE "" CACHE STRING "Forces Signing if Set to Release
option(QT_ANDROID_SIGN_APK "Enable Signing APK" OFF)
option(QT_ANDROID_SIGN_AAB "Enable Signing AAB" OFF)
option(QT_USE_TARGET_ANDROID_BUILD_DIR "Use Target Android Build Dir" OFF)
-set(QGC_QT_MINIMUM_VERSION "6.8.3" CACHE STRING "Minimum Supported Qt Version")
+set(QGC_QT_MINIMUM_VERSION "6.10.0" CACHE STRING "Minimum Supported Qt Version")
set(QGC_QT_MAXIMUM_VERSION "6.10.0" CACHE STRING "Maximum Supported Qt Version")
set(QGC_QT_ANDROID_MIN_SDK_VERSION "28" CACHE STRING "Android Min SDK Version")
diff --git a/cmake/platform/Android.cmake b/cmake/platform/Android.cmake
index f531d839caba..694b6e8a00c6 100644
--- a/cmake/platform/Android.cmake
+++ b/cmake/platform/Android.cmake
@@ -3,7 +3,7 @@ if(NOT ANDROID)
return()
endif()
-if(${Qt6_VERSION} VERSION_EQUAL 6.8.3)
+if(${Qt6_VERSION} VERSION_GREATER_EQUAL 6.10.0)
if(NOT ${CMAKE_ANDROID_NDK_VERSION} VERSION_EQUAL 26.1 AND NOT ${CMAKE_ANDROID_NDK_VERSION} VERSION_EQUAL 27.2)
message(FATAL_ERROR "Invalid NDK Version: ${CMAKE_ANDROID_NDK_VERSION}, Use Version 26B of 27C instead.")
endif()
@@ -45,13 +45,13 @@ set_target_properties(${CMAKE_PROJECT_NAME}
# QT_ANDROID_SDK_BUILD_TOOLS_REVISION
QT_ANDROID_MIN_SDK_VERSION ${QGC_QT_ANDROID_MIN_SDK_VERSION}
QT_ANDROID_TARGET_SDK_VERSION ${QGC_QT_ANDROID_TARGET_SDK_VERSION}
- # QT_ANDROID_COMPILE_SDK_VERSION
+ QT_ANDROID_COMPILE_SDK_VERSION ${QGC_QT_ANDROID_COMPILE_SDK_VERSION}
QT_ANDROID_PACKAGE_NAME "${QGC_ANDROID_PACKAGE_NAME}"
QT_ANDROID_PACKAGE_SOURCE_DIR "${QGC_ANDROID_PACKAGE_SOURCE_DIR}"
QT_ANDROID_VERSION_NAME "${CMAKE_PROJECT_VERSION}"
QT_ANDROID_VERSION_CODE ${ANDROID_VERSION_CODE}
- # QT_ANDROID_APP_NAME
- # QT_ANDROID_APP_ICON
+ QT_ANDROID_APP_NAME "${CMAKE_PROJECT_NAME}"
+ QT_ANDROID_APP_ICON "@drawable/icon"
# QT_QML_IMPORT_PATH
QT_QML_ROOT_PATH "${CMAKE_SOURCE_DIR}"
# QT_ANDROID_SYSTEM_LIBS_PREFIX
@@ -69,3 +69,47 @@ CPMAddPackage(
)
include(${android_openssl_SOURCE_DIR}/android_openssl.cmake)
add_android_openssl_libraries(${CMAKE_PROJECT_NAME})
+
+if(QGC_ENABLE_BLUETOOTH)
+ qt_add_android_permission(${CMAKE_PROJECT_NAME}
+ NAME android.permission.BLUETOOTH_SCAN
+ ATTRIBUTES
+ minSdkVersion 31
+ usesPermissionFlags neverForLocation
+ )
+ qt_add_android_permission(${CMAKE_PROJECT_NAME}
+ NAME android.permission.BLUETOOTH_CONNECT
+ ATTRIBUTES
+ minSdkVersion 31
+ usesPermissionFlags neverForLocation
+ )
+endif()
+
+if(NOT QGC_NO_SERIAL_LINK)
+ qt_add_android_permission(${CMAKE_PROJECT_NAME}
+ NAME android.permission.USB_PERMISSION
+ )
+endif()
+
+# Need MulticastLock to receive broadcast UDP packets
+qt_add_android_permission(${CMAKE_PROJECT_NAME}
+ NAME android.permission.CHANGE_WIFI_MULTICAST_STATE
+)
+
+# Needed to keep working while 'asleep'
+qt_add_android_permission(${CMAKE_PROJECT_NAME}
+ NAME android.permission.WAKE_LOCK
+)
+
+# Needed for read/write to SD Card Path in AppSettings
+qt_add_android_permission(${CMAKE_PROJECT_NAME}
+ NAME android.permission.WRITE_EXTERNAL_STORAGE
+)
+qt_add_android_permission(${CMAKE_PROJECT_NAME}
+ NAME android.permission.READ_EXTERNAL_STORAGE
+ ATTRIBUTES
+ maxSdkVersion 33
+)
+qt_add_android_permission(${CMAKE_PROJECT_NAME}
+ NAME android.permission.MANAGE_EXTERNAL_STORAGE
+)
diff --git a/cmake/platform/Windows.cmake b/cmake/platform/Windows.cmake
index a8c0a139162c..b36f6393e94c 100644
--- a/cmake/platform/Windows.cmake
+++ b/cmake/platform/Windows.cmake
@@ -19,3 +19,7 @@ set_target_properties(${CMAKE_PROJECT_NAME}
QT_TARGET_RC_ICONS "${QGC_WINDOWS_ICON_PATH}"
)
target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE _USE_MATH_DEFINES NOMINMAX WIN32_LEAN_AND_MEAN)
+
+# if(MSVC)
+# qt_add_win_app_sdk(${CMAKE_PROJECT_NAME})
+# endif()
diff --git a/deploy/docker/Dockerfile-build-ubuntu b/deploy/docker/Dockerfile-build-ubuntu
index da79df8b22ee..322d152f37f2 100644
--- a/deploy/docker/Dockerfile-build-ubuntu
+++ b/deploy/docker/Dockerfile-build-ubuntu
@@ -38,7 +38,7 @@ RUN chmod +x /tmp/qt/*.sh && \
/tmp/qt/install-qt-debian.sh && \
rm -rf /tmp/qt # keep the image slim
-ENV QT_ROOT_DIR=/opt/Qt/6.8.3/gcc_64
+ENV QT_ROOT_DIR=/opt/Qt/6.10.0/gcc_64
ENV PATH=$QT_ROOT_DIR/bin:$PATH
# ---------- Git safe directory (avoids “detected dubious ownership”) ----------
diff --git a/deploy/linux/appimagecraft.yml b/deploy/linux/appimagecraft.yml
index 72429ca25f20..7d0d2d40d0fc 100644
--- a/deploy/linux/appimagecraft.yml
+++ b/deploy/linux/appimagecraft.yml
@@ -8,7 +8,7 @@ build:
cmake:
source_dir: src/
extra_variables:
- - Qt6_ROOT=/home/runner/work/_temp/Qt/6.8.3/gcc_64
+ - Qt6_ROOT=/home/runner/work/_temp/Qt/6.10.0/gcc_64
environment:
BUILD_TYPE: Release
diff --git a/deploy/vagrant/.vagrantconfig.yml b/deploy/vagrant/.vagrantconfig.yml
index b8f881a44736..f8a1ad569ac1 100644
--- a/deploy/vagrant/.vagrantconfig.yml
+++ b/deploy/vagrant/.vagrantconfig.yml
@@ -3,10 +3,10 @@ configs:
'qt_deps_unpack_parent_dir': '/home/vagrant'
'qt_deps_unpack_dir': '/home/vagrant/Qt'
- 'qt_deps_bin_unpack_dir': '/home/vagrant/Qt/6.8.3/gcc_64/bin'
- 'qt_deps_lib_unpack_dir': '/home/vagrant/Qt/6.8.3/gcc_64/lib'
- 'qt_deps_plugins_unpack_dir': '/home/vagrant/Qt/6.8.3/gcc_64/plugins'
- 'qt_deps_qml_unpack_dir': '/home/vagrant/Qt/6.8.3/gcc_64/qml'
+ 'qt_deps_bin_unpack_dir': '/home/vagrant/Qt/6.10.0/gcc_64/bin'
+ 'qt_deps_lib_unpack_dir': '/home/vagrant/Qt/6.10.0/gcc_64/lib'
+ 'qt_deps_plugins_unpack_dir': '/home/vagrant/Qt/6.10.0/gcc_64/plugins'
+ 'qt_deps_qml_unpack_dir': '/home/vagrant/Qt/6.10.0/gcc_64/qml'
'project_root_dir': '/vagrant'
diff --git a/deploy/vagrant/Vagrantfile b/deploy/vagrant/Vagrantfile
index f4904ef35078..585020ded3da 100644
--- a/deploy/vagrant/Vagrantfile
+++ b/deploy/vagrant/Vagrantfile
@@ -91,7 +91,7 @@ Vagrant.configure(2) do |config|
apt-get install -y patchelf
dir="%{qt_deps_unpack_dir}"
- version="6.8.3"
+ version="6.10.0"
host="linux"
target="desktop"
modules="qtcharts qtlocation qtpositioning qtspeech qt5compat qtmultimedia qtserialport qtimageformats qtshadertools qtconnectivity qtquick3d qtsensors"
diff --git a/docs/en/qgc-dev-guide/getting_started/index.md b/docs/en/qgc-dev-guide/getting_started/index.md
index 6a37d53f851f..5c373809248d 100644
--- a/docs/en/qgc-dev-guide/getting_started/index.md
+++ b/docs/en/qgc-dev-guide/getting_started/index.md
@@ -137,7 +137,7 @@ Example commands to build a default QGC and run it afterwards:
1. Configure:
```sh
- ~/Qt/6.8.3/gcc_64/bin/qt-cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug
+ ~/Qt/{{ $frontmatter.qt_version }}/gcc_64/bin/qt-cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug
```
Change the directory for qt-cmake to match your install location for Qt and the kit you want to use.
diff --git a/docs/en/qgc-user-guide/releases/daily_build_new_features.md b/docs/en/qgc-user-guide/releases/daily_build_new_features.md
index abd9ddd0395d..91dee80581a7 100644
--- a/docs/en/qgc-user-guide/releases/daily_build_new_features.md
+++ b/docs/en/qgc-user-guide/releases/daily_build_new_features.md
@@ -39,5 +39,5 @@ There is also a [Change Log](https://github.com/mavlink/qgroundcontrol/blob/mast
* Developer changes
* Build system fully converted to cmake
* qmake no longer supported
- * Source updated to use Qt 6.8.3
- * GStreamer support updated to 1.22
\ No newline at end of file
+ * Source updated to use Qt 6.10.0
+ * GStreamer support updated to 1.22
diff --git a/src/QmlControls/QGCImageProvider.h b/src/QmlControls/QGCImageProvider.h
index f5feb75dbb17..d31d202b7273 100644
--- a/src/QmlControls/QGCImageProvider.h
+++ b/src/QmlControls/QGCImageProvider.h
@@ -21,7 +21,7 @@ class QGCImageProvider : public QQuickImageProvider
~QGCImageProvider();
QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize) final;
- void setImage(const QImage &image, uint8_t vehicleId = 0) { _images[vehicleId] = image.mirrored(); }
+ void setImage(const QImage &image, uint8_t vehicleId = 0) { _images[vehicleId] = image.flipped(Qt::Vertical); }
private:
QMap _images;
diff --git a/src/QtLocationPlugin/QGCTileCacheWorker.h b/src/QtLocationPlugin/QGCTileCacheWorker.h
index 2bb0099ad68a..d99f6ad46fb6 100644
--- a/src/QtLocationPlugin/QGCTileCacheWorker.h
+++ b/src/QtLocationPlugin/QGCTileCacheWorker.h
@@ -9,6 +9,7 @@
#pragma once
+#include
#include
#include
#include
diff --git a/tools/setup/install-qt-debian.sh b/tools/setup/install-qt-debian.sh
index 06c68880ed55..293ddecf637d 100755
--- a/tools/setup/install-qt-debian.sh
+++ b/tools/setup/install-qt-debian.sh
@@ -2,7 +2,7 @@
set -e
-QT_VERSION="${QT_VERSION:-6.8.3}"
+QT_VERSION="${QT_VERSION:-6.10.0}"
QT_PATH="${QT_PATH:-/opt/Qt}"
QT_HOST="${QT_HOST:-linux}"
QT_TARGET="${QT_TARGET:-desktop}"
diff --git a/tools/setup/install-qt-macos.sh b/tools/setup/install-qt-macos.sh
index 2526521bc197..cd3832615539 100755
--- a/tools/setup/install-qt-macos.sh
+++ b/tools/setup/install-qt-macos.sh
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
# Set defaults appropriate for macOS.
-QT_VERSION="${QT_VERSION:-6.8.3}"
+QT_VERSION="${QT_VERSION:-6.10.0}"
QT_PATH="${QT_PATH:-/opt/Qt}"
QT_HOST="${QT_HOST:-mac}"
QT_TARGET="${QT_TARGET:-desktop}"
diff --git a/tools/setup/install-qt-windows.ps1 b/tools/setup/install-qt-windows.ps1
index d2a26dac551d..e613c06f6fb9 100644
--- a/tools/setup/install-qt-windows.ps1
+++ b/tools/setup/install-qt-windows.ps1
@@ -11,7 +11,7 @@
# ————————————————————————————————
# 1) Defaults (env overrides supported)
# ————————————————————————————————
-$QT_VERSION = $env:QT_VERSION -or '6.8.3'
+$QT_VERSION = $env:QT_VERSION -or '6.10.0'
$QT_PATH = $env:QT_PATH -or 'C:\Qt'
$QT_HOST = $env:QT_HOST -or 'windows'
$QT_TARGET = $env:QT_TARGET -or 'desktop'
diff --git a/translations/qgc-lupdate.sh b/translations/qgc-lupdate.sh
index 06f4d8e9863f..777a531f5122 100755
--- a/translations/qgc-lupdate.sh
+++ b/translations/qgc-lupdate.sh
@@ -1,5 +1,5 @@
#!/bin/bash
# This script will update both the Qt and Json string translation files.
-QT_PATH=~/Qt/6.8.3/*/bin
+QT_PATH=~/Qt/6.1[0-9].*/*/bin
$QT_PATH/lupdate ../src -ts qgc.ts -no-obsolete
python3 qgc-lupdate-json.py