summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
* Start with changes and porting documentationVolker Hilsheimer2022-09-203-79/+88
| | | | | Change-Id: I69531689995323ecbfd4014ff71e3d19858afbfc Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
* Cleanup: use member initialization for QGeoTiledMapScenePrivateVolker Hilsheimer2022-09-192-29/+17
| | | | | | | Remove unused member m_mapEdgeSize (only set, but never read). Change-Id: I2442ba3fd4fa3f1ebff26ea0a6d604d700f6896c Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
* Cleanup: More nullptr instead of 0Volker Hilsheimer2022-09-1962-79/+87
| | | | | Change-Id: I6316384be07f1d0634860c3ddcbe85455e218fed Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
* Cleanup: de-virtualize QGeoCodeReplyPrivateVolker Hilsheimer2022-09-198-111/+19
| | | | | | | | | | | | | | The only call to the single virtual function, extraData(), was commented out. The subclass in the OSM plugin only wrote extra data for debug runs and the subclass in the mock plugin is never used to test anything anyway. So remove all this overhead. As a drive-by, refactor to member initialization and use qsizetype for members that refer to indices in a QList. Change-Id: I600b4637bc367ae45d51b2a7f9a3ae0b78fb77c4 Reviewed-by: Alex Blasche <alexander.blasche@qt.io> Reviewed-by: Santhosh Kumar <santhosh.kumar.selvaraj@qt.io>
* Cleanup: de-virtualize QPlaceAttributePrivateVolker Hilsheimer2022-09-192-19/+1
| | | | | | | | | | | | The possibility to override this type in plugins is not used anywhere, and overcomplicates the code. There isn't even a way to create a QPlaceAttribute with a reimplementation of the private. So remove this; if this is really needed for anything, then we can bring it back later. Change-Id: I4881583b87b775a4bcaf36bc972248b321e0ef2b Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
* Cleanup: de-virtualize QGeoManeuverPrivateVolker Hilsheimer2022-09-192-185/+41
| | | | | | | | | | | | | The possibility to override this type in plugins is not used anywhere, and overcomplicates the code. There isn't even a way to create a QGeoManeuver with a reimplementation of the private. So remove this; if this is really needed for anything, then we can bring it back later. Change-Id: I4edf78a21f53593e609f6e86e04464d4e974b0df Reviewed-by: Alex Blasche <alexander.blasche@qt.io> Reviewed-by: Santhosh Kumar <santhosh.kumar.selvaraj@qt.io>
* Cleanup: de-virtualize QGeoRouteSegmentPrivateVolker Hilsheimer2022-09-192-198/+40
| | | | | | | | | | | | The possibility to override this type in plugins is not used anywhere, and overcomplicates the code. There isn't even a way to create a QGeoRouteSegment with a reimplementation of the private. So remove this; if this is really needed for anything, then we can bring it back later. Change-Id: I34ad55d0ddf29cafc53e90e2a987c3faf904b437 Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
* Cleanup: apply rule of zeroVolker Hilsheimer2022-09-1912-60/+14
| | | | | | | | | | Remove empty destructors, use std::unique_ptr where destructors only deleted a pointer member. This also closes the memory leak where the tile cache was never destroyed. Change-Id: I55007475b7f13a97d8399dd6d4234382106db05b Reviewed-by: Alex Blasche <alexander.blasche@qt.io> Reviewed-by: Santhosh Kumar <santhosh.kumar.selvaraj@qt.io>
* Refactor: make QGeoJson a namespaceVolker Hilsheimer2022-09-192-30/+33
| | | | | | | It only has static methods. Change-Id: I706bd5131959cc67ace785bd1fd22e30ebb7202e Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
* Manually update dependencies on 'dev' in qt/qtlocationVolker Hilsheimer2022-09-161-4/+4
| | | | | | | | Also make qtdeclarative a required dependency, Qt Location won't build without. Change-Id: I429c2b1d508c46a939c8088b9cf1005b54b86895 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Add CMakeLists.txt for manual tests subdirectoryIvan Solovev2022-09-161-0/+6
| | | | | | | ... so that they are shown in the build tree Change-Id: Ib073c8792d8ca938e55281321cd0b728e87c261d Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Merge QGeoRouteLeg into QGeoRouteVolker Hilsheimer2022-09-1614-169/+94
| | | | | | | | | | | | | | | | | | | | | | QGeoRouteLeg was a subclass of QGeoRoute. Since QGeoRoute is a value type, subclassing is problematic, even though QGeoRouteLeg had no data of its own and only added public getters for data already carried by QGeoRoutePrivate. But if every leg is a route, with documentation pointing out that some route-specific getters never return anything, then it's easier to just add leg-specific APIs to QGeoRoute. A route is then a group of other routes. Those route legs point back at the overall route, and know of index within the overall route. Those leg-specific APIs return -1 for the index and an empty overall route if the route is not a leg within an overall route. This saves a separate type with its own QDeclarative* wrapper, without losing any expressiveness. Task-number: QTBUG-105206 Change-Id: I8844290d245ed79215e6c7893d972e0da96ed197 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
* Register QPlaceContactDetail as a QML value typeVolker Hilsheimer2022-09-1512-227/+121
| | | | | | | | | | | | | | | Make QPlaceContactDetail a gadget, and register it as a value type with the QML engine. Remove declarative wrapper, and consolidate the documentation. Adjust the tests and remove tests that verify that the type behaves like an object. Initialize contactDetail properties as a grouped property. The QDeclarativeContactDetails implementation of QQmlPropertyMap has to stay, so rename the sources accordingly. Change-Id: I473d29405963bbe594cd5f26168a237c189d1d3e Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Register QPlaceSupplier as a QML value typeVolker Hilsheimer2022-09-1518-433/+133
| | | | | | | | | | | | | Make QPlaceSupplier a gadget, and register it as a value type with the QML engine. Remove declarative wrapper, and consolidate the documentation. Adjust the tests and remove tests that verify that the type behaves like an object. Initialize placeSupplier properties as a grouped property, or via a converter from QJSValue. Change-Id: Id35ac1d9f03ce831013e4a7231302abd7b6cd7c8 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* Use QVariant support for converting to a QGeoCoordinateVolker Hilsheimer2022-09-159-156/+7
| | | | | | | | This gets rid of the rest of the locationvaluetypehelper usages, so those files can go completely now. Change-Id: Ieaa543578ef35a8887c04c24352e72ba931badb9 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
* Change QJSValue properties to QList<QGeoCoordinate/Rectangle>Volker Hilsheimer2022-09-1515-210/+75
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The QML engine is able to operate on lists of gadgets, there is no need for using private APIs to operate on QJSValue. For the time being, this breaks a QML construct like path[0].longitude = 0 This no longer changes the value of path[0].latitude in place. Instead, use var path0 = path[0] path0.longitude = ... path[0] = path0 This is consistent with other properties that have type list<gadget>, as QML operates on copies of values, not on references. Adapt the test case accordingly. Since support for value-initializing properties of type list<gadget> requires plumbing in the QML engine, and registration of conversion routines from QVariantMap to QGeoCoordinate, augment the test. Remove the now unnecessary toList/fromList conversion functions, and the dependency to private QtQml libraries. Fixes: QTBUG-105241 Change-Id: I8f248c457a6de27a3b2680bdc948c5683ebc7fa0 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io> Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
* Refactor: for loopsVolker Hilsheimer2022-09-1433-310/+278
| | | | | | | | | | Replace indexed for loops with ranged for, replace int with qsizetype otherwise as appropriate. Apply const and line breaks in surrounding code. Pick-to: 6.2 Change-Id: I1c2ee372545b8ab2cbb84c4b4b97ae52dedff1d0 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
* Register QPlaceIcon as a QML value typeVolker Hilsheimer2022-09-1424-590/+78
| | | | | | | | | | | | | | | Make QPlaceIcon a gadget, and register it as a value type with the QML engine. Remove declarative wrapper, and consolidate the documentation. Adjust the tests and remove tests that verify that the type behaves like an object. Initialize placeIcon properties as a grouped property, or via a converter from QJSValue. That converter is a temporary solution to enable tests, and can hopefully be removed once the QML engine supports property-initialization of value types. Task-number: QTBUG-106482 Change-Id: I2aa29102ee232afb3d71396bcd3288e2f99c0fc6 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* Register QPlaceAttribute as a value typeVolker Hilsheimer2022-09-1411-354/+167
| | | | | | | | | | | | | | Make QPlaceAttribute a gadget, and register it as a value type with the QML engine. Remove declarative wrapper, and consolidate the documentation. Keep documentation for the ExtendedAttributes QML type together with the placeAttribute QML value type for now. Adjust the tests and remove tests that verify that the type behaves like an object. Initialize placeAttribute properties as a grouped property. Task-number: QTBUG-106482 Change-Id: Ia514ba4b2ae7f7af56dc0bcee19dca6dddbfd9cf Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* Register QPlaceRatings as a value typeVolker Hilsheimer2022-09-1413-343/+93
| | | | | | | | | | | | | | | | | | | Make QPlaceUser a gadget, and register it as a value type with the QML engine. Remove declarative wrapper, and consolidate the documentation. To support QML tests setting ratings properties from literal values, register a converter from QJSValue. That is temporary and will become obsolete once the QML engine can property-initialize, and perhaps even instantiate, value types. Adjust the tests and remove tests that verify that the type behaves like an object. This is not entirely complete (some tests still compare Place.ratings with `null`, but those tests pass for now, and will be changed in later commits when more types get converted in this way. Task-number: QTBUG-106482 Change-Id: I3694df414bb87adcfda3dc4b88e5206d4272bb82 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* Register QPlaceUser as a QML value typeVolker Hilsheimer2022-09-1411-292/+75
| | | | | | | | | | | Make QPlaceUser a gadget, and register it as a value type with the QML engine. Remove declarative wrapper, and consolidate the documentation. Adjust the tests, remove tests that test that the type is not a value. Use grouped properties initialization syntax in QML for now. Change-Id: I0c840911316590b7ba103e26fa99d824bb9e39c5 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* Implement generic conversion from QML types to gadgetsVolker Hilsheimer2022-09-141-0/+69
| | | | | | | | | | | | | | | | | | This is a temporary solution to facilitate the conversion of Places QML types into value types, allowing us to get rid of the thin and unnecessary QDeclarative* wrappers. Support both conversion from QJSValue and from QVariantMap is needed to allow value-initialization of nested types, such as QPlaceSupplier, which has a QPlaceIcon property. Once the QML engine implements property-by-property initialization, this solution can be removed again. It is either way primarily relevant for the unit tests, which need to be able to construct and initialize value types from QML and JavaScript. Change-Id: I253ce6415dd80ec6464c77bca197cff325149cf7 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* Refactor: remove duplicated codeVolker Hilsheimer2022-09-134-54/+7
| | | | | | | | | | | | Use the existing helper implementation to convert QJSValue to QList<QGeoCoordinate>. Remove parseCircle helper function that is not used anywhere, and unexport the helper function that is only used by another helper. Pick-to: 6.2 Change-Id: Ie01cca3e5a7bd09a88be67225185b54e0f28e773 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
* Refactor QDeclarativeGeoMapItemUtils into a namespaceVolker Hilsheimer2022-09-132-58/+67
| | | | | | | | | | | | | The class was exported, but none of the static members or nested types are used outside the library, including tests. So turn the class into a namespace. Fix coding style issues, and convert to ranged-for loops. Pick-to: 6.2 Change-Id: I57bc78eb91be721943608bacfc1b54ecd5b272a8 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* Cleanup: use nullptr instead of 0Volker Hilsheimer2022-09-1331-92/+91
| | | | | Change-Id: I2f713a9a88023c5e2b3d779ebe73c821c72dd0e3 Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
* Cleanup: Don't pass 0 to QSharedPointer constructorVolker Hilsheimer2022-09-133-4/+4
| | | | | | | Use the default constructor. Change-Id: Id9b5b9809cc2d247e50c7b37c370e9c13a19b513 Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
* Refactor QGeoSimplify into a namespace, simplify, remove dead codeVolker Hilsheimer2022-09-122-297/+73
| | | | | | | | | | | | | | The class had only static functions, with the internal helpers declared as protected. Move those helpers into an anonymous namespace inside the translation unit. This helped identify significant amounts of dead code. Remove it, simplify the remaining function, and fix the coding style, including replacing int with qsizetype. Pick-to: 6.2 Change-Id: I4936b8c5f53323e06db082b5378fa185c562a948 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
* Merge the factory versions into oneVolker Hilsheimer2022-09-125-115/+57
| | | | | Change-Id: I24ebd31750c95163d099c6f2daad2c96f468a515 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
* Constructor cleanupVolker Hilsheimer2022-09-1294-801/+351
| | | | | | | | Use member initialization, and remove unneeded implementations of special member functions. Fix coding style in related code. Change-Id: I3326e3f331762a9c1ad3c3baac0de02fc5bb2b44 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
* Remove unused QDeclarativePeriod header and QPlacePeriod testVolker Hilsheimer2022-09-122-218/+0
| | | | | | | | Those classes are neither implemented nor used anywhere. Pick-to: 6.2 Change-Id: I65e3d7be4e67a732e7ba4d2d9998699f77c7f2eb Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
* Fix whitespace in testVolker Hilsheimer2022-09-121-61/+61
| | | | | Change-Id: Icd54be6353d723a0a7d27bb69c36e318dff7f6f4 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
* Cleanup: remove virtual keyword from overridesVolker Hilsheimer2022-09-1233-177/+177
| | | | | Change-Id: Iac3ac030809f57cfcffbfcc3257551efb6c1ff0f Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
* Manually update dependencies on 'dev' in qt/qtlocationVolker Hilsheimer2022-09-091-1/+1
| | | | | | | | | Only bump to current head of qtpositioning:dev, which has the type conversion registrations we need for respective value types to work in the tests. Change-Id: I9811542b573720028bc89f9c430e430914a2505c Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Make QDeclarativeGeoRoute::legs type safeVolker Hilsheimer2022-09-092-4/+5
| | | | | | | | | We can use a QList property with a forward-declared type, so do that instead of using QList<QObject *>. Pick-to: 6.2 Change-Id: I20d8ebbf4aa2d9ca18ae0ce7b3e6b2698dd069f2 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
* Remove QDeclarativeGeoMapType wrapperVolker Hilsheimer2022-09-099-367/+137
| | | | | | | | | | | | | | | Register the QGeoMapType gadget directly as geoMapType (via a Foreign), and adapt QDeclarativeGeoMap to use it, simplifying the code. The type was uncreatable before, and is implicitly uncreatable as a value type now as well. QGeoMapType also needs to be registered as a namespace so that the MapStyle enum is available in QML. Pick-to: 6.2 Change-Id: Ibf0b26eb799005e4fabcbd5496d019da812c8d70 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Remove QDeclarativeGeoRouteSegment wrapperVolker Hilsheimer2022-09-0915-382/+117
| | | | | | | | | | | | | | | | | | | Register the QGeoRouteSegment gadget type directly as the routeSegment QML type (via a Foreign), and use it in QDeclarativeGeoRoute. The type is now uncreatable. It wasn't in 5.15, but since there is no setter-API that is exposed to QML, there is no reason to have it be a creatable type. Adjust the QML test to declare a property of type routeSegment instead. Move the QML type documentation into QGeoRouteSegment, and document the corresponding C++ properties via \property. Unify the language a bit, and follow up on the rename from RouteSegment to routeSegment. Pick-to: 6.2 Change-Id: I1ebae0c1a9d056aa59510a3ab539b1d8bce8c6c7 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io> Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Register QGeoManeuver declarativelyVolker Hilsheimer2022-09-088-25/+105
| | | | | | | | | | | Amend da10ee9b67aaf0c9218c2b891efa06b323866470 to register QGeoManeuver also via Foreign types (both as a value type and a namespace), using declarative type registration and generated plugin sources. Rename the QML type to routeManeuver to follow naming convention. Pick-to: 6.2 Change-Id: I98257c0ef4389e4de225c933425740a82161d5df Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Doc: fix type of MapItemView::autoFitViewportTasuku Suzuki2022-09-031-1/+1
| | | | | Change-Id: I751ac254cfa1f5ebd9b842bb2896d3f7d4a0f15e Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* Manually update dependencies on 'dev' in qt/qtlocationVolker Hilsheimer2022-09-031-3/+3
| | | | | | Change-Id: I8058c3a5fa3814fc7158ad1c3b70aa8197dd587c Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* Fix documentation warningsVolker Hilsheimer2022-09-022-4/+3
| | | | | | Pick-to: 6.2 Change-Id: I84052f925cf77094639d43d358b34c17c75366bd Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
* Don't use deprecated APIs in examplesVolker Hilsheimer2022-09-025-8/+0
| | | | | | | | | AA_EnableHighDpiScaling has no effect, High-DPI scaling is always enabled in Qt 6. Pick-to: 6.2 Change-Id: If96d9fa94b1248ab5bd6b7800e92df82aaec6ac9 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Bring back QML documentation for CameraCapabilitiesVolker Hilsheimer2022-09-021-43/+63
| | | | | | | | | | | Amends eb490443bcf13361aa3f3558f7b9772c86253bd5 by converting the documentation of the C++ getter/setter API into property documentation (as far as the respective properties are declared as such), and by bringing back the QML documentation from the previously deleted sources. Pick-to: 6.2 Change-Id: Ifeef91e2c3f01bba983e9e02775198950e5f1d9b Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Remove QDeclarativeGeoManeuverVolker Hilsheimer2022-09-0111-414/+153
| | | | | | | | | | | | | | | | | | | | | | Register the QGeoManeuver type directly as the RouteManeuver QML type, and use it in QDeclarativeGeoRouteSegment. The type is now uncreatable. It wasn't in Qt 5.15, but since there is no setter-API that is exposed to QML (QDeclarativeGeoRouteSegment::maneuver is a read-only property tagged as CONSTANT), there is no point in creating a RouteManeuver object in QML anyway. The QML tests can get a default-created QGeoManeuever from an empty route segment. Document the C++ properties via \property, move the QML type documentation into the qgeomaneuver.cpp file, and unify the language. Note: The QML type should be routeManeuver, as value types should start with a lower-case character. If we make that change, it will be in a separate, compatibility-breaking commit for all the value types. Pick-to: 6.2 Change-Id: I277e7011f2082e2da9e0141db9bad0a60a524c88 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Remove unnecessary QML type registration data filesVolker Hilsheimer2022-08-318-2099/+2
| | | | | | Pick-to: 6.2 Change-Id: I788362fbd2720782d5d1a313a44a908718c9d415 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* Use current touch position when switching from one to two point modeLauri Laanmets2022-08-301-2/+2
| | | | | | | | | | | | | | | | When panning the map with one finger to an offset and then placing second finger on the map, then map will not jump anymore because in 'startTwoTouchPoints()' we now use 'scenePosition()' instead of 'scenePressPosition()'. When two touch points are introduced, 'start point' of both must be reset and not be based on the very first touch point of the first finger. Task-number: QTBUG-96795 Change-Id: I846691ada9ecfb6d10c855be50be807cea2f24a6 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* Fix "invalid nullptr parameter" warning from QObject::connectVolker Hilsheimer2022-08-302-3/+19
| | | | | | | | | | | | | | | The window() of the QDeclarativeGeoMap item might be nullptr when it is used in tests. And the window might also change if the item is move into a different scene. So only connect to a valid window pointer, and reconnect when the window changes. This requires that we store a pointer to the old QQuickWindow in the item, as we need to disconnect from the old window (and the QQuickItem::itemChanged doesn't provide access to the old window). Pick-to: 6.2 Change-Id: Id79a6c19990109d3900d5e483968b4f4cd4b2fbc Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
* Remove declarative wrapper for QGeoCameraCapabilitiesVolker Hilsheimer2022-08-304-138/+6
| | | | | | | | | | With QGeoCameraCapabilities being a Q_GADGET, the wrapper is no longer needed. Pick-to: 6.2 Change-Id: I6afa28e7e1026e23cc0845947415047c8bb30a32 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
* Gadgetize Map Value typesVolker Hilsheimer2022-08-3010-0/+62
| | | | | | | | | | | | This might allow us to remove the respective declarative wrapper classes. However, QDeclarativeGeoRoute also provides access to a list of segments, the path (as a QJSValue), and the routeQuery, which are all not stored as part of QGeoRoute. Pick-to: 6.2 Change-Id: I65a25597f7d5540fb3edf837b48de160b5dde419 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
* Silence warnings in map_mouse testVolker Hilsheimer2022-08-301-18/+18
| | | | | | | | | Qt 6's QML no longer supports implicit function parameters in signal handlers, so declare them explicitly and use arrow-function syntax. Pick-to: 6.2 Change-Id: I5ffc14b4140d78c4f1dcc51aa5ca8f2d4e38d1d5 Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
* Purge remaining usage of Q_NULLPTRJohannes Kauffmann2022-08-291-2/+2
| | | | | | Pick-to: 6.2 Change-Id: Ia532f57a127d4db4be1950e86d4a54992a5c2665 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>