Skip to content

build: update to Qt 6.11.1#14552

Merged
HTRamsey merged 1 commit into
mavlink:masterfrom
HTRamsey:chore/qt-6.11.1
Jul 3, 2026
Merged

build: update to Qt 6.11.1#14552
HTRamsey merged 1 commit into
mavlink:masterfrom
HTRamsey:chore/qt-6.11.1

Conversation

@HTRamsey

@HTRamsey HTRamsey commented Jun 17, 2026

Copy link
Copy Markdown
Member

Summary

Updates the Qt target to 6.11.1 and the supported minimum to 6.11.0.

Changes

  • qt_version 6.10.3 → 6.11.1, qt_minimum_version 6.10.0 → 6.11.0 (.github/build-config.json).
  • iOS deployment target 14.0 → 17.0 — Qt 6.11's minimum supported iOS is 17 (QT_SUPPORTED_MIN_IOS_VERSION in Qt's .cmake.conf); 14.0 is no longer functional. macOS stays 13.0, matching Qt's minimum. Updated both build-config.json and the cmake/presets/iOS.json preset.
  • QGC_QT_DISABLE_DEPRECATED_UP_TO / QGC_QT_ENABLE_STRICT_MODE_UP_TO 0x060A000x060B00 to track the new floor.
  • Sync GStreamer color-transfer mapping to Qt 6.11.1's QGstCaps::formatAndVideoInfo(): SMPTE240MGamma22 and GAMMA18BT709 (previously swapped relative to Qt). Updated the unit test and added the missing GAMMA18 assertion.
  • Android toolchain bump + build.gradle re-alignment to Qt 6.11's stock androiddeployqt template:
    • JDK 17 → 21 (java_version, compileOptions), Gradle wrapper → 9.6.1, AGP 9.0.1 → 9.2.1, added Kotlin Gradle plugin 2.4.0, androidx.core 1.16.0 → 1.18.0.
    • android_platform 35 → 36, android_cmdline_tools → 14742923.
    • Dropped the bespoke qgc-android-config.properties bridge (generated in cmake/platform/Android.cmake, consumed by build.gradle): compile/target/min SDK and versionCode/versionName now flow through Qt's native QT_ANDROID_* target properties instead of a hand-rolled properties file.
  • Refreshed Qt-version references in comments (Y444 omission note, wayland plugin note).
  • Hardened the QMetaCallEvent metacall-id workaround in QGCApplication::compressEvent (id() was removed in 6.11) with a static_assert on QMetaCallEvent layout so any future Qt ABI change fails at compile time rather than miscomparing at runtime.

Verification

  • Cross-checked every API deprecated in Qt 6.11 against the codebase — none are used.
  • Confirmed against local Qt 6.11.1 source: min macOS 13 (matches), min iOS 17, CMake floor 3.22 (QGC pins 3.25).
  • Android toolchain re-aligned to Qt 6.11's stock template: JDK 21, Gradle 9.6.1, AGP 9.2.1, Kotlin plugin 2.4.0, android_platform 36 (see Changes above). The Gradle wrapper scripts (gradlew, gradlew.bat, gradle-wrapper.jar) are vendored from Gradle 9.6.1 and not hand-edited.
  • QVideoFrameFormat::PixelFormat still has no Format_YUV444* in 6.11.1, so the Y444 omission remains correct.

Note: the color-transfer change alters behavior for SMPTE240M/GAMMA18 content (both rare) to match Qt's own mapping.

Copilot AI review requested due to automatic review settings June 17, 2026 08:45
@github-actions github-actions Bot added github_actions Pull requests that update GitHub Actions code CMake Tests Video size/XS labels Jun 17, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Updates QGroundControl’s Qt baseline to the Qt 6.11 line (target 6.11.1, minimum 6.11.0) and aligns related build/runtime expectations (iOS deployment target and GStreamer ↔ Qt color-transfer mapping) so CI and multimedia behavior match upstream Qt 6.11.

Changes:

  • Bumped Qt target/minimum versions and updated the project’s “disable deprecated / strict mode” cutoffs to 0x060B00.
  • Raised the iOS deployment target to 17.0 to match Qt 6.11’s minimum supported iOS version (including the iOS CMake preset).
  • Synced GStreamer color-transfer mapping/tests to Qt 6.11.1 behavior (SMPTE240M and GAMMA18 adjustments) and refreshed related comments.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated no comments.

Show a summary per file
File Description
.github/build-config.json Updates Qt target/min versions and iOS deployment target used by CI/tooling.
cmake/presets/iOS.json Raises iOS deployment target in the iOS CMake preset to 17.0.
cmake/CustomOptions.cmake Updates Qt deprecation/strict-mode cutoff hex values to Qt 6.11 (0x060B00).
cmake/install/Install.cmake Refreshes Wayland plugin comment while keeping deployment plugin inclusion intact.
src/VideoManager/VideoReceiver/GStreamer/GstAppSinkAdapter.cc Adjusts GStreamer→Qt transfer-function mapping to match Qt 6.11.1’s backend mapping.
src/VideoManager/VideoReceiver/GStreamer/gstqgc/gstqgcvideosinkbin.cc Updates Y444/Qt version comment in caps documentation.
test/VideoManager/GStreamer/GStreamerTest.cc Updates/extends unit tests for the revised transfer-function mapping and comment refresh.

@HTRamsey HTRamsey force-pushed the chore/qt-6.11.1 branch 7 times, most recently from 1de79c2 to ac5f389 Compare June 18, 2026 09:29
@github-actions github-actions Bot added the Tools label Jun 18, 2026
@github-actions github-actions Bot removed the Tools label Jun 18, 2026
@github-actions github-actions Bot added the Tools label Jun 18, 2026
@codecov

codecov Bot commented Jun 18, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 30.56%. Comparing base (f29efd3) to head (f41867c).
⚠️ Report is 117 commits behind head on master.

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##           master   #14552      +/-   ##
==========================================
+ Coverage   25.47%   30.56%   +5.09%     
==========================================
  Files         769      787      +18     
  Lines       65912    67508    +1596     
  Branches    30495    31279     +784     
==========================================
+ Hits        16788    20637    +3849     
+ Misses      37285    32938    -4347     
- Partials    11839    13933    +2094     
Flag Coverage Δ
unittests 30.56% <100.00%> (+5.09%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
src/QGCApplication.cc 18.75% <100.00%> (-2.70%) ⬇️
src/Utilities/Network/QGCNetworkHelper.h 12.50% <ø> (+12.50%) ⬆️
...nager/VideoReceiver/GStreamer/GstAppSinkAdapter.cc 32.95% <100.00%> (+0.53%) ⬆️
...eoReceiver/GStreamer/HwBuffers/GstHwVideoBuffer.cc 70.00% <ø> (ø)
...deoReceiver/GStreamer/gstqgc/gstqgcvideosinkbin.cc 38.46% <ø> (-0.64%) ⬇️

... and 409 files with indirect coverage changes


Continue to review full report in Codecov by Harness.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update c239bca...f41867c. Read the comment docs.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 26 out of 26 changed files in this pull request and generated 1 comment.

Comment thread src/QGCApplication.cc
Comment on lines +657 to +662
// QMetaCallEvent::id() was removed in 6.11; its protected Data is reachable from a derived helper.
struct MetaCallHelper : public QMetaCallEvent {
int id() const { return d.method_offset_ + d.method_relative_; }
};
const auto methodId = [](const QMetaCallEvent *e) { return static_cast<const MetaCallHelper*>(e)->id(); };

@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Build Results

Platform Status

Platform Status Details
Linux Passed View
Windows Passed View
MacOS Passed View
Android Passed View

All builds passed.

Pre-commit

Check Status Details
pre-commit Failed (non-blocking) View

Pre-commit hooks: 0 passed, 0 failed, 0 skipped.

Test Results

linux-coverage-integration: 25 passed, 0 skipped
linux-coverage-unit: 84 passed, 0 skipped
Total: 109 passed, 0 skipped

Code Coverage

Coverage Baseline Change
65.8% 65.8% +0.0%

Artifact Sizes

Artifact Size Δ from master
QGroundControl 221.08 MB -3.01 MB (decrease)
QGroundControl-aarch64 179.27 MB +0.78 MB (increase)
QGroundControl-installer-AMD64 137.70 MB -0.11 MB (decrease)
QGroundControl-installer-AMD64-ARM64 80.44 MB -0.05 MB (decrease)
QGroundControl-installer-ARM64 108.97 MB +0.14 MB (increase)
QGroundControl-linux 86.57 MB -257.88 MB (decrease)
QGroundControl-mac 86.56 MB -105.92 MB (decrease)
QGroundControl-windows 85.62 MB -105.03 MB (decrease)
QGroundControl-x86_64 191.50 MB +0.74 MB (increase)
Total size decreased by 470.34 MB

Updated: 2026-07-03 09:53:36 UTC • Commit: f41867c • Triggered by: Android

Bump Qt target 6.10.3 -> 6.11.1 and minimum 6.10.0 -> 6.11.0.

- ios_deployment_target 14.0 -> 17.0: Qt 6.11 minimum supported iOS is 17
  (QT_SUPPORTED_MIN_IOS_VERSION). macOS stays 13, matching Qt's minimum.
- QGC_QT_DISABLE_DEPRECATED_UP_TO / ENABLE_STRICT_MODE_UP_TO 0x060A00 ->
  0x060B00 to track the new floor.
- Sync GStreamer color-transfer map to Qt 6.11.1 QGstCaps::formatAndVideoInfo:
  SMPTE240M now maps to Gamma22, GAMMA18 to BT709 (were swapped); update the
  unit test accordingly and add the missing GAMMA18 case.
- Refresh Qt-version references in comments (Y444 omission, wayland plugin).

Network helper follow-ons for the 6.11 floor:
- QGCNetworkHelper: add per-request TCP keep-alive + ConnectionCacheExpiry
  RequestConfig fields and apply them in configureRequest; wire them into
  QGeoTileFetcherQGC tile/terrain requests to keep sockets warm against Qt
  6.11's new 2-min idle-connection reaping.
- Reuse Qt facilities: classifyHttpStatus compares via QHttpServerResponder
  StatusCode; URL helpers use QUrl::adjusted; header setters use
  QHttpHeaders::WellKnownHeader; drop hand-rolled urlFileName for QUrl::fileName.
- Cover the new keep-alive fields in QGCNetworkHelperTest.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 37 out of 38 changed files in this pull request and generated 7 comments.

Comment thread src/QGCApplication.cc
Comment on lines +657 to +662
// QMetaCallEvent::id() was removed in 6.11; its protected Data is reachable from a derived helper.
struct MetaCallHelper : public QMetaCallEvent {
int id() const { return d.method_offset_ + d.method_relative_; }
};
const auto methodId = [](const QMetaCallEvent *e) { return static_cast<const MetaCallHelper*>(e)->id(); };

Comment thread android/gradlew.bat
Comment on lines 48 to 55
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2

goto fail
"%COMSPEC%" /c exit 1

Comment thread android/gradlew.bat
Comment on lines 62 to 69
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2

goto fail
"%COMSPEC%" /c exit 1

Comment thread .github/build-config.json
Comment on lines +16 to 18
"ios_deployment_target": "17.0",
"java_version": "21",
"macos_deployment_target": "13.0",
Comment thread android/build.gradle
Comment on lines 7 to 10
dependencies {
// Qt injects `qtGradlePluginType` dynamically (application/library), which
// still relies on classpath-based plugin resolution.
classpath 'com.android.tools.build:gradle:9.0.1'
classpath 'com.android.tools.build:gradle:9.2.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:2.4.0"
}
Comment thread android/build.gradle
Comment on lines 92 to 95
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
sourceCompatibility JavaVersion.VERSION_21
targetCompatibility JavaVersion.VERSION_21
}
Comment on lines 1 to +6
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
networkTimeout=120000
distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.1-bin.zip
networkTimeout=10000
retries=0
retryBackOffMs=500
@HTRamsey HTRamsey merged commit a03f300 into mavlink:master Jul 3, 2026
52 checks passed
@HTRamsey HTRamsey deleted the chore/qt-6.11.1 branch July 3, 2026 10:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants