// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only

/*!
    \page whatsnew611.html
    \title What's New in Qt 6.11
    \ingroup whatsnewqt6
    \brief Lists the new features in Qt 6.11.
    \meta sortkey 611

    \section1 New Modules in Qt 6.11

    Qt 6.11 adds the following modules:

    \list
      \li \l {Qt Canvas Painter} - Accelerated 2D painting solution for Qt Quick
          and QRhi-based render targets.
      \li \l {Qt OpenAPI} - An extension of the upstream Open API generator that
          generates Qt HTTP clients, typically used for RESTful APIs.
      \li \l {Qt TaskTree} - Provides a declarative way to compose and execute
          asynchronous task workflows.
    \endlist

    The new modules are in \e{Technical Preview}, excluding their API from
    \l{Compatibility promises}{Qt's compatibility promises}.

    \section1 New Features in Qt 6.11

    \section2 Qt CoAP Module
    \list
      \li \l QCoapClient::bindInterface allows to bind the communication to a specific
          network interface.
    \endlist

    \section2 Qt Core Module
    \list
      \li \l QDate is now weakly incrementable, i.e. implements pre- and post-fix increment
          (and decrement) operators, and can be used in a C++20 \c{std::views::iota}.
      \li \l QJniObject APIs can now be called with \c{std::expected} (or an equivalent type)
          as the return type, in which case Java exceptions are not consumed by the framework
          and instead passed back to the caller as the unexpected result.
      \li \l QRangeModel::ItemAccess provides a customization point for accessing role data
          of a multi-role item type.
      \li \l QRangeModel can now be used with C++ ranges that don't provide a constant
          \c{std::begin/end} implementation, such as C++20 \c{std::views::filter}.
      \li With ranges that use the same QObject subclass for multi-role items, the new
          \l QRangeModel::autoConnectPolicy can be set to Full or OnRead to connect the
          changed-signals of all exposed properties of QObject items to the corresponding
          \l {QAbstractItemModel::}{dataChanged()} signal emission.
      \li \l QRangeModelAdapter provides a typical C++ container API to the range a QRangeModel
          operates on, ensuring that relevant QAbstractItemModel signals are emitted on
          changes, without user code having to work with QModelIndex. This new class is under
          technology preview.
    \endlist

    \section2 Qt DBus Module
    \list
    \endlist

    \section2 Qt Graphs Module
    \list
      \li Added new \l{QCustomSeries} class to allow users to create their own 2D graph
          types, such as candlestick or box-plot graphs
      \li Added multi-axis support to 3D graphs in the form of
          \l{QBar3DSeries::rowAxis}{rowAxis}, \l{QBar3DSeries::valueAxis}{valueAxis}, and
          \l{QBar3DSeries::columnAxis}{columnAxis} properties in \l{QBar3DSeries}, and
          \l{QScatter3DSeries::axisX}{axisX}, \l{QScatter3DSeries::axisY}{axisY}, and
          \l{QScatter3DSeries::axisZ}{axisZ} properties in \l{QScatter3DSeries} and
          \l{QSurface3DSeries}
      \li Added \l{QPieSlice::subSlicesCount}{subSlicesCount},
          \l{QPieSlice::subSlicesSum}{subSlicesSum},
          \l{QPieSlice::subSlicesRatio}{subSlicesRatio}, and
          \l{QPieSlice::sliceChildren}{sliceChildren} properties in \l{QPieSlice} to allow
          creating sub slices in pie and donut graphs
      \li Added \l{QDateTimeAxis::visualMin}{visualMin} and
          \l{QDateTimeAxis::visualMax}{visualMax} properties in \l{QDateTimeAxis} and
          \l{QValueAxis} to hold the visible axis ranges
      \li Added \l{QAreaSeries::gradient}{gradient} and
          \l{QAreaSeries::selectedGradient}{selectedGradient} properties in \l{QAreaSeries}
          to allow using gradients in area graphs
      \li Added \l{QBarCategoryAxis::labelPosition}{labelPosition} property in
          \l{QBarCategoryAxis} to allow adjusting the label placement in bar graphs
      \li Added \l{QDateTimeAxis::timeZone}{timeZone} property in \l{QDateTimeAxis} to allow
          setting your own time zone for the axis
      \li Added \l{QDateTimeAxis::pan}{pan} and \l{QDateTimeAxis::zoom}{zoom} properties
          in \l{QDateTimeAxis} to allow panning and zooming the same way as in \l{QValueAxis}
      \li Added \l{QAbstractAxis::color}{color} and \l{QAbstractAxis::subColor}{subColor}
          properties in \l{QAbstractAxis} to allow overriding theme colors for the axes
      \li Added \l{QLineSeries::joinStyle}{joinStyle}, \l{QLineSeries::lineStyle}{lineStyle},
          \l{QLineSeries::strokeStyle}{strokeStyle}, \l{QLineSeries::dashOffset}{dashOffset},
          and \l{QLineSeries::dashPattern}{dashPattern} properties in \l{QLineSeries} to
          allow further styling in line graphs
      \li Added \l{QSplineSeries::optimized}{optimized} property in \l{QSplineSeries} to
          allow using Catmull-Rom interpolation instead of the more performance-heavy and
          accurate default method
      \li Added \l{QBar3DSeries::customRowLabels}{customRowLabels} and
          \l{QBar3DSeries::customColumnLabels}{customColumnLabels} properties in
          \l{QBar3DSeries} to allow overriding row and column labels
      \li Added \l{QCustom3DItem::rotationAbsolute}{rotationAbsolute} property in
          \l{QCustom3DItem} to fix problems in custom item rotations
      \li Added \l{QSurface3DSeries::rowsSanitized}{rowsSanitized} property in
          \l{QSurface3DSeries} to automatically remove rows with invalid data
      \li Added \l{GraphsItem3D::cutoffMargin}{cutoffMargin} in \l{GraphsItem3D}
          and \l{Q3DGraphsWidgetItem} to adjust the sensitivity of culling items near graph
          margins
    \endlist

    \section2 Qt GRPC Module
    \list
    \endlist

    \section2 Qt GUI Module
    \list
        \li Accessibility events of the new QAccessible::RoleChange type get emitted by the
            docking window framework when dock widgets change between docked and floating.
        \li The new accessibility role \l{QAccessible::Role}{Switch} is used by the Switch
            type in Qt Quick Controls.
        \li The new accessible attribute \l {QAccessible::Attribute}{Orientation} is used by
            sliders and similar controls to report their orientation to accessibility clients.
        \li QRawFont got an API to get the \l {QRawFont::}{glyphCount()} and to look up the
            \l {QRawFont::}{glyphName()} for a glyph index of the font.
        \li QTextCharFormat got new APIs to set \l {QTextCharFormat::setFontFeatures()}
            {font features} and \l {QTextCharFormat::setFontVariableAxes()}{variable axes}.
    \endlist

    \section2 Qt HttpServer Module
    \list
    \endlist

    \section2 Qt Lottie Animation
    \list
      \li Added support for path fill rules.
      \li Added CMAKE command \l{qt_target_qml_from_lottie()} for converting from Lottie to QML at
          build time.
      \li \l{lottietoqml} and \l{VectorImage} backend are no longer tech preview.
      \li \l{VectorImage}: Added support for animating shapes along paths.
      \li \l{VectorImage}: Added support for morphing animations (interpolating between two shapes.)
      \li \l{VectorImage}: Added support for matte layers.
    \endlist

    \section2 Qt Multimedia Module
    \list
      \li Added callback-based overloads for the start methods of \l{QAudioSource} and \l{QAudioSink} to
          allow real-time audio processing.
    \endlist

    \section2 Qt Network Module
    \list
    \endlist

    \section2 Qt Protobuf Module
    \list
    \endlist

    \section2 Qt Qml Module
    \list
        \li Added workspace support in QML Language Server.
        \li Added go to C++ definition support in QML Language Server.
        \li Added support to silence context property warnings via a \c{.contextProperties.ini} configuration file for qmllint.
        \li Introduced \c{override} and \c{virtual} keywords which, together with the existing \c{final} keyword and tooling support,
            help prevent accidental property shadowing and allow explicit property overriding in QML.
            See \l{qtqml-syntax-overridesemantics.html}{Property Shadowing and Override Semantics} for details.
        \li Gave the \l easingCurve value type a name and transformed the
            \l Easing namespace into a singleton.
        \li Added APIs to QQmlContext to get the \l{QQmlContext::childContexts()}
            {list of child contexts} and to \l{QQmlContext::findObjectRecursively()}{find an object
            by id}.
    \endlist

    \section2 Qt Quick Module
    \list
      \li Added CMAKE command \l{qt_target_qml_from_svg()} for converting from SVG to QML at build
          time.
    \endlist

    \section2 Qt Quick Controls Module
    \list
    \li Added \l DoubleSpinBox, which is similar to \l SpinBox but supports
        floating-point values.
    \li Added \l {DialogButtonBox::}{defaultButton} and
        \l {DialogButtonBox::}{defaultStandardButton} to \l DialogButtonBox.
        When set, the respective button will be highlighted and receive
        activeFocus whenever the DialogButtonBox gets focus.
    \endlist

    \section2 Qt Quick Dialogs Module
    \list
    \endlist

    \section2 Qt Quick Effects Module
    \list
    \endlist

    \section2 Qt Quick 3D Module
    \list
        \li Added QML API for user-defined render passes, enabling custom rendering pipelines
            directly in QML without C++ knowledge
        \li Added \l{ExtendedSceneEnvironment::ssrEnabled}{ssrEnabled} property in
            \l{ExtendedSceneEnvironment} to enable screen-space reflections (SSR)
        \li Added screen-space global illumination (SSGI) effect to
            \l{ExtendedSceneEnvironment}, providing ambient occlusion and real-time indirect
            lighting
        \li Added per-object motion vector generation for Temporal AA and motion blur effects
        \li Added layering support to allow grouping nodes and controlling which layers the
            camera renders
        \li Added linked list order-independent transparency (OIT) rendering method
        \li Added \c{NORMAL_ROUGHNESS_TEXTURE} support in post-processing effects and custom
            materials
        \li Added blue noise sampling to PCF soft shadows for improved quality with less
            visible noise patterns
        \li Added proper handling of pre-multiplied alpha for Qt Quick content in textures
        \li Added \c{VIEW_MATRIX} and \c{PROJECTION_MATRIX} exposure to post-processing
            effects
        \li Added \l{QQuick3DViewport::pickInRect}{pickInRect()} method in
            \l{QQuick3DViewport} for rectangle-based object selection
        \li Added \l{View3D::closestPointPick}{closestPointPick()} method in \l{View3D} to
            find the closest point on a surface to a given point
        \li Added \l{View3D::rayPick}{rayPick()} overload that accepts a specific model
            parameter
        \li Added scene shape for particle emitters that dynamically calculates shapes based
            on scene geometry
        \li Added \l{QQuick3DTextureProviderExtension} API for simplified custom texture
            provider creation
        \li Added \l{QSSGFrameData::scheduleRenderResults}{scheduleRenderResults()} function
            in \l{QSSGFrameData} to request specific render pass results
        \li Updated Assimp to v6.0.2
    \endlist

    \section2 Qt Quick 3D XR Module
    \list
        \li Added OpenGL desktop Linux support (Monado, Xlib, Wayland platforms)
        \li Extended \l{XrView::processTouch}{processTouch()} to deliver touch events to any
            pickable \l{Model}, not just \l{XrItem}
        \li Enhanced \l{XrView::touchpointState}{touchpointState()} to return surface position
            and normal vector information for 3D touch interactions
        \li Added Popup and Menu support in \l{XrItem} through dedicated QQuickOverlay
        \li Updated OpenXR to v1.1.49
    \endlist

    \section2 Qt Quick 3D Physics Module
    \list
    \endlist

    \section2 Qt Quick VectorImage Module
    \list
      \li Added support for SVG masks.
      \li Added support for SVG post-processing filters to match the support in \l{Qt SVG}:
          feGaussianBlur, feColorMatrix, feOffset, feFlood, feBlend, feComposite and feMerge.
      \li Added support for animating shapes along paths.
      \li Added support for the SVG <symbol> tag.
    \endlist

    \section2 Qt Serial Port Module
    \list
    \endlist

    \section2 Qt Serial Bus Module
    \list
    \endlist

    \section2 Qt Sql Module
    \list
    \endlist


    \section2 Qt SVG Module
    \list
    \endlist

    \section2 Qt Test Module
    \list
    \endlist

    \section2 Qt VirtualKeyboard Module
    \list
    \endlist

    \section2 Qt WebEngine Module
    \list
    \endlist

    \section2 Qt WebView Module
    \list
    \endlist

    \section2 Qt Widgets Module
    \list
        \li QWizard got a new \l{QWizard::}{bannerStretchPolicy} property that
            configures how the banner should be sized within the wizard.
        \li QAbstractItemView got a new \l{QAbstractItemView::}{keyboardSearchFlags}
            property that allows tuning how the default implementation of
            keyboardSearch() matches the given string against the model's data.
        \li QColumnView got a new \l{QColumnView::}{previewColumnVisible} property
            that specifies whether the preview column is visible.
        \li The new QStyleOptionMenuItemV2 class adds a flag that indicates whether
            the mouse is pressed on the item getting rendered by the style.
    \endlist

    \section2 Qt XML Module
    \list
    \endlist

    \section2 Qt Mqtt Module
    \list
    \endlist

    \section1 Tools

    \section2 QDoc Documentation Generator
    \list
    \li Added comprehensive support for QML singleton types, including a new
        \c{\qmlsingletontype} command, automatic detection of the
        \c{QML_SINGLETON} macro, and recognition of \c{pragma singleton} in
        QML files.
    \li QDoc now has full support for QML module aliases (\c{import ... as ...}
        syntax), including linking, syntax highlighting for qualified
        identifiers, and correct markup for property notation such as
        \c{anchors.fill} and attached properties such as
        \c{Component.onCompleted}.
    \li You can use the new \c{\toc}/\c{\endtoc} and \c{\tocentry} command for
        specifying hierarchical table of contents structures in documentation
        source files. QDoc generates \c{<project>_toc.xml} files for navigation
        sidebars.
    \li The \l {overload-command}{\\overload} command now takes an optional
        argument. Use the \c{\overload primary} syntax to designate the primary
        function in an overload set.
    \li QDoc now generates contextual connection examples for overloaded signals
        and slots.
    \li The \c{includeprivate} configuration variable enables documentation of
        private C++ members. Pure virtual functions are now unconditionally
        documented.
    \li The \c{logwarnings} configuration variable makes QDoc write all warnings
        to a \c{<project>-qdoc-warnings.log} file.
    \li QDoc warnings now include the project name prefix for multi-module
        builds.
    \li \b{Configuration Improvements}:
        \list
        \li \c{imagesoutputdir}: Custom output subdirectory for images to
            solve file name clashes in multi-module builds.
        \li \c{internalfilepatterns}: Automatically marks classes as internal
            based on file/path name patterns, such as \c{*_p.h}.
        \endlist
    \li Formatting commands now work in \c{\title} arguments, \c{\generatelist}
        works correctly in Qt help project TOC structures, and custom enumerator
        prefixes are supported in \c{\qmlenum}.
    \li The HTML structure for QML and C++ member documentation is unified. This
        change introduces new CSS classes (\c{qml-member}, \c{qml-property},
        \c{qml-method}, \c{qml-property-group}) in QDoc's HTML output.
    \li \b{Code Parsing}: Improved scoped enum resolution, QML inheritance
        handling with cycle detection, and correct preservation of declared
        types and variable information in index files.
    \li Added LLVM/Clang 21 compatibility, with minimum supported version
        updated to 17.0.6.
    \li The \c{\tableofcontents} command is officially deprecated.
    \endlist

    \section2 Qt Linguist
    \list
    \li Added \e{labels} as a way to categorize ID-based translations into
        meaningful groups without affecting the runtime behavior. See the
        \l{Text ID based translations} documentation and the
        \l{https://www.qt.io/blog/organizing-id-based-translations-with-labels-in-qt-linguist}
        {blog post} for more details.
    \li C++: Added the \l{qTrId()} function for ID-based retrieving ID-based
        translations. The behavior is the same as the \l{qtTrId()} function, but with
        a more canonical name.
    \li Added new i18n examples to the documentation.
    \li Added AI translation for Qt Linguist for automatic translations using
        LLMs. See the \l{AI translation} documentation and the
        \l{https://www.qt.io/blog/ai-powered-translation-comes-to-qt-linguist}
        {blog post} for more details.
    \li Added ltext2id executable for migrating projects from text-based
        translation to ID-based translation. See \l{Using ltext2id} for more
        details
    \li Added lcheck executable for performing batch validation on TS files.
        See \l{Using lcheck} for more details.
    \li Added support for C++ attributes in lupdate parser
    \li Deprecated use of //= metastrings in lupdate parser.
    \li Deprecated \c {lupdate -pro} option for processing .pro files directly.
        Use \c {lupdate-pro} instead.
    \li Removed lprodump executable. Its functionality is now available via
        the \c {lupdate-pro -dump-json} option.
    \endlist

    \section1 Platform Changes

    \section2 Build System Changes

    \list
    \li Added a -generate-vcpkg-manifest configure option. This generates a
        vcpkg.json file in the build directory. To just generate the
        manifest without configuring Qt, run configure with
        -generate-vcpkg-manifest -dry-run.
    \li When configuring with -vcpkg, generate a vcpkg manifest file in the
        build directory, and set VCPKG_MANIFEST_DIR to the build directory to
        use that manifest file. You can turn off the manifest generation with
        -no-generate-vcpkg-manifest. You can turn off setting the manifest
        directory by passing -- -UVCPKG_MANIFEST_DIR to configure.
    \endlist

    \section2 Desktop Platforms

    \section3 Windows
    \list
    \endlist

    \section3 Linux
    \list
    \endlist

    \section3 macOS
    \list
    \li Sandboxed applications can now access files outside of the application
        sandbox (so called security scoped resources) for both reading and writing.
        Files or folders chosen by the user via file dialogs or similar native mechanism
        are automatically and transparently handled, including persistent access across
        application and device restarts.
    \li Added QNativeInterface::QCocoaScreen for accessing the underlying NSScreen.
    \endlist

    \section3 Wayland Client on Linux
    \list
    \endlist

    \section2 Mobile Platforms

    \section3 Android

    \section4 Qt for Android
    \list
    \li Qt Jenny now supports implementing Java interfaces and extending Java classes in C++.
    \li Support for Play Store's Feature Delivery.
    \endlist

    \section4 Qt Quick for Android
    \list
    \li Added QtQuickView.invokeMethod() for calling QML functions from Java/Kotlin.
    \endlist

    \section3 iOS
    \list
    \li Added support for file icons in the platform theme.
    \li Added support for QFileOpenEvent for external requests to open files.
    \li Sandboxed applications can now access files outside of the application
        sandbox (so called security scoped resources) for both reading and writing.
        Files or folders chosen by the user via file dialogs or similar native mechanism
        are automatically and transparently handled, including persistent access across
        application and device restarts.
    \li Added support for native save dialogs.
    \endlist

    \section2 Embedded Platforms

    \section3 Boot to Qt
    \list
    \endlist

    \section3 Real-Time Operating Systems
    \list
    \endlist

    \section1 List of API Changes

    These pages contain an overview of API changes in Qt 6.11:
    \list
        \li \l {New Classes and Functions in Qt 6.11}
        \li \l {Obsolete Classes}
    \endlist

    \section1 Known Issues

    For information about known issues in Qt 6.11, see
    \l{https://wiki.qt.io/index.php?title=Qt_6.11_Known_Issues}{the Qt Wiki}.
*/

/*!
    \page newclasses611.html
    \title New Classes and Functions in Qt 6.11
    \ingroup whatsnewqt6-api
    \meta sortkey 611
    \brief A list of new APIs in Qt 6.11.

    This page contains a comprehensive list of all new classes and functions
    introduced in Qt 6.11.

    \sincelist 6.11
*/
