Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/actions/qt-android/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/android-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
fail-fast: false
matrix:
build_type: [Release]
qt_version: [6.8.3]
qt_version: [6.10.0]

defaults:
run:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/android-macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/android-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/custom.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
shell: cmd

env:
QT_VERSION: 6.8.3
QT_VERSION: 6.10.0
GST_VERSION: 1.22.12

steps:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ios.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ jobs:
shell: bash

env:
QT_VERSION: 6.8.3
QT_VERSION: 6.10.0

steps:
- name: Checkout repo
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/lupdate.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ jobs:
shell: bash

env:
QT_VERSION: 6.8.3
QT_VERSION: 6.10.0

steps:
- name: Checkout repo
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ jobs:
shell: cmd

env:
QT_VERSION: 6.8.3
QT_VERSION: 6.10.0

steps:
- name: Checkout repo
Expand Down
7 changes: 7 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,8 @@ endif()
# Qt6 Configuration
#######################################################

set(QT_NO_PRIVATE_MODULE_WARNING ON)

find_package(Qt6
${QGC_QT_MINIMUM_VERSION}...${QGC_QT_MAXIMUM_VERSION}
REQUIRED
Expand All @@ -116,6 +118,7 @@ find_package(Qt6
Gui
LinguistTools
Location
LocationPrivate
Multimedia
Network
Positioning
Expand Down Expand Up @@ -224,6 +227,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)
Expand Down
11 changes: 1 addition & 10 deletions android/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,6 @@

<!-- %%INSERT_PERMISSIONS -->

<uses-permission android:name="android.permission.USB_PERMISSION" />
<!-- Need MulticastLock to receive broadcast UDP packets -->
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<!-- Needed to keep working while 'asleep' -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- Needed for read/write to SD Card Path in AppSettings -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<!-- %%INSERT_FEATURES -->

<uses-feature android:name="android.hardware.audio.output" android:required="false" />
Expand All @@ -39,7 +30,7 @@
android:requestLegacyExternalStorage="true"
android:allowBackup="true"
android:fullBackupOnly="false"
android:icon="@drawable/icon"
android:icon="-- %%INSERT_APP_ICON%% --"
Copy link
Preview

Copilot AI Sep 24, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The app icon placeholder format appears incorrect. Qt's Android deployment typically expects @drawable/icon format, not -- %%INSERT_APP_ICON%% --.

Suggested change
android:icon="-- %%INSERT_APP_ICON%% --"
android:icon="@drawable/icon"

Copilot uses AI. Check for mistakes.

android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config">
<!-- android:theme="@style/AppTheme" -->
Expand Down
4 changes: 2 additions & 2 deletions android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ android {
ndkVersion = androidNdkVersion

// Extract native libraries from the APK
packagingOptions.jniLibs.useLegacyPackaging = true
// packagingOptions.jniLibs.useLegacyPackaging = true

sourceSets {
main {
Expand All @@ -66,7 +66,7 @@ android {

tasks.withType(JavaCompile) {
options.incremental = true
// options.compilerArgs += ['-Xlint:deprecation']
options.compilerArgs += ['-Xlint:all'] // deprecation
}

buildFeatures {
Expand Down
2 changes: 1 addition & 1 deletion android/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="devices">USB Devices</string>
<string name="CdcAcm">CDC ACM USB Device</string>
<string name="ChromeCcd">Chrome CCD USB Device</string>
Expand Down
7 changes: 7 additions & 0 deletions android/res/xml/qtprovider_paths.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<!-- For getFilesDirectory() -->
<files-path name="files_path" path="/"/>
<!-- For getExternalStorageDirectory() -->
<external-path name="external_path" path="/"/>
<!-- For getExternalFilesDir() -->
<external-files-path name="external_files_path" path="/"/>
<!-- For getExternalCacheDir() -->
<external-cache-path name="external_cache_path" path="/"/>
</paths>
5 changes: 3 additions & 2 deletions cmake/CustomOptions.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -52,15 +52,16 @@ 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")
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_MAXIMUM_VERSION "6.8.3" CACHE STRING "Maximum 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")

# MacOS
Expand Down
49 changes: 45 additions & 4 deletions cmake/platform/Android.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -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
Expand All @@ -69,3 +69,44 @@ 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
)
4 changes: 4 additions & 0 deletions cmake/platform/Windows.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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()
2 changes: 1 addition & 1 deletion deploy/docker/Dockerfile-build-ubuntu
Original file line number Diff line number Diff line change
Expand Up @@ -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”) ----------
Expand Down
2 changes: 1 addition & 1 deletion deploy/linux/appimagecraft.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
8 changes: 4 additions & 4 deletions deploy/vagrant/.vagrantconfig.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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'

Expand Down
2 changes: 1 addition & 1 deletion deploy/vagrant/Vagrantfile
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion docs/en/qgc-dev-guide/getting_started/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
4 changes: 2 additions & 2 deletions docs/en/qgc-user-guide/releases/daily_build_new_features.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
* Source updated to use Qt 6.10.0
* GStreamer support updated to 1.22
2 changes: 1 addition & 1 deletion src/QmlControls/QGCImageProvider.h
Original file line number Diff line number Diff line change
Expand Up @@ -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<uint8_t, QImage> _images;
Expand Down
1 change: 1 addition & 0 deletions src/QtLocationPlugin/QGCTileCacheWorker.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

#pragma once

#include <QtCore/QElapsedTimer>
#include <QtCore/QLoggingCategory>
#include <QtCore/QMutex>
#include <QtCore/QQueue>
Expand Down
5 changes: 4 additions & 1 deletion src/Vehicle/VehicleSetup/Bootloader.cc
Original file line number Diff line number Diff line change
Expand Up @@ -651,7 +651,10 @@ bool Bootloader::_ihxVerifyBytes(const FirmwareImage* image)

for (int i=0; i<bytesToRead; i++) {
if ((uint8_t)imageBytes[bytesIndex + i] != readBuf[i]) {
_errorString = tr("Compare failed: expected(0x%1) actual(0x%2) at address: 0x%3").arg(imageBytes[bytesIndex + i], 2, 16, QLatin1Char('0')).arg(readBuf[i], 2, 16, QLatin1Char('0')).arg(readAddress + i, 8, 16, QLatin1Char('0'));
_errorString = tr("Compare failed: expected(0x%1) actual(0x%2) at address: 0x%3")
.arg(static_cast<qulonglong>(static_cast<quint8>(imageBytes[bytesIndex + i])), 2, 16, QLatin1Char('0'))
.arg(static_cast<qulonglong>(static_cast<quint8>(readBuf[i])), 2, 16, QLatin1Char('0'))
.arg(static_cast<qulonglong>(readAddress + i), 8, 16, QLatin1Char('0'));
return false;
}
}
Expand Down
2 changes: 1 addition & 1 deletion tools/setup/install-qt-debian.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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}"
Expand Down
2 changes: 1 addition & 1 deletion tools/setup/install-qt-macos.sh
Original file line number Diff line number Diff line change
@@ -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}"
Expand Down
2 changes: 1 addition & 1 deletion tools/setup/install-qt-windows.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down
Loading
Loading