summaryrefslogtreecommitdiffstats
path: root/examples
Commit message (Collapse)AuthorAgeFilesLines
...
| * Doc: Update Extension exampleNico Vertriest2018-06-131-47/+53
| | | | | | | | | | | | | | | | | | | | -language review -rewrite some paragraphs Task-number: QTBUG-60635 Change-Id: I96154cd5d78b9517409ac67ec416c53031dcb909 Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
| * Doc: Sql example Books lock rating column widthPaul Wicking2018-06-081-0/+5
| | | | | | | | | | | | | | | | | | | | Lock the width of the rating column to prohibit the contents to escape the bounds of the column upon resize. Task-number: QTBUG-68652 Change-Id: I5c744833b19a8e5bcf88ef1b9ab657ac81f5aa50 Reviewed-by: Nico Vertriest <nico.vertriest@qt.io> Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
| * Doc: Update Factorial ExampleNico Vertriest2018-06-071-1/+1
| | | | | | | | | | | | | | | | | | Updated connect syntax Task-number: QTBUG-60635 Change-Id: Ib5280326c158221129c1817a4853bfd79bbcd895 Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
| * Doc: Update Elided Label exampleNico Vertriest2018-06-071-6/+5
| | | | | | | | | | | | | | | | | | Updated connect syntax Task-number: QTBUG-60635 Change-Id: I8d770f62557d5056375d72d778c4e2079511b848 Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
* | Add a secure UDP client exampleTimur Pocheptsov2018-06-2211-1/+1173
| | | | | | | | | | | | | | | | | | | | | | | | A simple application that establishes DTLS connection(s) and sends/receives datagrams. Class DtlsAssociation is essentially a QUdpSocket|QDtls pair: it initiates a handshake, handles timeouts and errors. After establishing an encrypted connection it sends messages to the server and processes responses. Task-number: QTBUG-67596 Change-Id: I92d481b7dfd2459e6a93c754b338a2e897a7feaf Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
* | Add a secure UDP server exampleTimur Pocheptsov2018-06-2111-1/+1212
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It's a simple DTLS server, implemented with QUdpSocket, QDtlsClientVerifier and QDtls. The server is configured to use PSK only (it has no certificate/key). The server uses a single QUdpSocket socket and de-multiplexes UDP datagrams internally (thus it can work with several clients simultaneously). Future update will probably add more options (like configuring with certificate/key, etc). For now - it's as minimalistic and simple as possible. Task-number: QTBUG-67596 Change-Id: Ic7d18dbab6dbcc9ed44c82e69a2b364df24aa256 Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
* | Spice up QOpenGLWindow exampleTor Arne Vestbø2018-06-151-10/+5
| | | | | | | | | | | | | | | | | | | | By drawing the same gradient for the triangle as in the rasterwindow example. We also set a default geometry and show the window without forcing it to become maximized. Change-Id: I05f9138d08f9c5d3e30eec362a3a1cd63d72753e Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io> Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Fix typo in contextinfo exampleMichal Klocek2018-06-151-1/+1
| | | | | | | | | | Change-Id: I4d788c9880ca4d52aab58a5abc13b8b91838b66e Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* | Merge remote-tracking branch 'origin/5.11' into devLiang Qi2018-06-0724-237/+425
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: .qmake.conf src/corelib/kernel/qeventdispatcher_cf.mm src/gui/kernel/qguiapplication_p.h src/gui/kernel/qwindowsysteminterface.cpp src/gui/kernel/qwindowsysteminterface.h src/plugins/platforms/cocoa/qcocoawindow.mm src/plugins/platforms/cocoa/qnswindowdelegate.mm src/plugins/platforms/ios/qioseventdispatcher.mm src/plugins/platforms/windows/qwindowsdrag.h src/plugins/platforms/windows/qwindowsinternalmimedata.h src/plugins/platforms/windows/qwindowsmime.cpp src/plugins/platforms/winrt/qwinrtscreen.cpp Change-Id: Ic817f265c2386e83839d2bb9ef7419cb29705246
| * Examples: Cleanup and modernize Plug&PaintAndre Hartmann2018-06-069-99/+91
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Use C++11 member init * Use auto where appropriate * Replace foreach with range-for * Replace last Qt4-style connects * Sort includes to common style * Fix some Clang warnings Task-number: QTBUG-60635 Change-Id: I61c98b34b954e416dd175b56ca589125217083de Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io> Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
| * Doc: Clean up SQL Example: Books - whitespace editionPaul Wicking2018-06-061-1/+1
| | | | | | | | | | | | | | | | Remove whitespace for consistency. Task-number: QTBUG-68652 Change-Id: I1ca1f449db2352cb96c88535936f2c44392693cf Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
| * Doc: Clean up SQL example: Books (part 2)Paul Wicking2018-06-061-1/+2
| | | | | | | | | | | | | | | | Improve readability, enforce consistent code formatting. Task-number: QTBUG-68652 Change-Id: I7bbe0b2baa6273e0133df84d7c3cc2aa6a0b6ff2 Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
| * Doc: Clean up and modernize SQL example: BooksPaul Wicking2018-06-063-93/+126
| | | | | | | | | | | | | | | | | | | | | | * Replace Qt4-style connects. * Reformat code to adhere to 80 column width. * Touch comments to make location and style consistent. * Rename a label in the UI form. Task-number: QTBUG-68652 Change-Id: Icc592f7b5a013d1806bc36c45057b35472b6efbb Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
| * Doc: Update connect syntax Plugandpaint ExampleNico Vertriest2018-06-053-16/+18
| | | | | | | | | | | | | | | | Task-number: QTBUG-60635 Change-Id: I354a0886b22c63be57bd927308163abd3246be77 Reviewed-by: André Hartmann <aha_1980@gmx.de> Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
| * Doc: Add formatting features to Notepad exampleNico Vertriest2018-06-017-22/+182
| | | | | | | | | | | | | | | | - bold, italic, underline - About button Change-Id: I8ece7d2bfca0b148b681a2fccb4a439ce179848a Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
| * Make sure we can build with -no-feature-draganddropJoerg Bornemann2018-05-294-6/+6
| | | | | | | | | | | | | | | | | | We move QInternalMimeData to a separate file, because this class is used, even if draganddrop is disabled. From now on, include qinternalmimedata_p.h instead of qdnd_p.h for QInternalMimeData. Change-Id: I594e08e2e90d574dc445119091686b4b69e4731b Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
* | Examples: use CBOR in the network-chat broadcast messageThiago Macieira2018-06-023-19/+39
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Instead of sending one @-separated message, send one CBOR message. The message structure is, using the CBOR Data Definition Language: broadcast = [ username: tstr, port: 0..65535 ] Change-Id: Ic38ec929fc3f4bb795dafffd150ac2614d18c6bf Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* | Examples: change the main network-chat protocol to CBORThiago Macieira2018-06-023-146/+138
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This complements the previous commit, which changed the broadcast datagram to CBOR. This commit changes the TCP protocol too. The protocol is an infinite array of commands, each of which is a map from an integer (the DataType enum) to either a string or null. The entire state machine for the connection is rewritten, relying on QCborStreamReader's ability to deal with incomplete data. Change-Id: Ic38ec929fc3f4bb795dafffd150ac674c32fac87 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
* | glextensions.h: simplify #if-ery to avoid conflictEdward Welbourne2018-05-311-12/+4
| | | | | | | | | | | | | | | | The prior #if-ery was needlessly confusing; and most of it was redundant anyway. Change-Id: I82da1b38c08b93b9dc2220dd7b15ecb7dcc002af Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* | Provide presets for QGradientTor Arne Vestbø2018-05-311-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | Similar to Qt::GlobalColor, the presets allow the user to create brushes based on predefined gradients, quickly getting pretty pixels on screen. The presets are based on the linear gradients from WebGradients, a free collection of gradients, hosted at https://webgradients.com/. The few radial and blended gradient presets have been excluded. Change-Id: I1ce8f2210a6045c9edb8829ab3eddcc313549127 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* | Merge remote-tracking branch 'origin/5.11' into devQt Forward Merge Bot2018-05-292-3/+5
|\| | | | | | | Change-Id: I8d8b03ea46c537b091b72dc7b68aa6aa3a627ba6
| * Doc: Update Echoplugin ExampleNico Vertriest2018-05-281-0/+0
| | | | | | | | | | | | | | | | | | | | - screenshot - connect syntax Task-number: QTBUG-60635 Change-Id: I18c3e1fef5c623565bbf6cf33bf88e9d8135d8be Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
| * Doc: Update Fetchmore exampleNico Vertriest2018-05-281-3/+5
| | | | | | | | | | | | | | | | | | | | - minor edit - updated screenshot Task-number: QTBUG-60635 Change-Id: I988ad28723131127eee0a93671b0562d8f446139 Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
* | Example: add a simple CBOR dumper toolThiago Macieira2018-05-284-1/+806
| | | | | | | | | | | | | | | | This is useful as well when trying to figure out what a CBOR file contains or how it may fail to parse. Change-Id: Ic38ec929fc3f4bb795dafffd150ad7c0bd8e9887 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* | Merge remote-tracking branch 'origin/5.11' into devLiang Qi2018-05-247-9/+9
|\| | | | | | | | | | | | | | | | | | | Conflicts: mkspecs/features/qt_common.prf src/corelib/tools/qstring.cpp src/plugins/platforms/windows/qwindowsmousehandler.cpp src/widgets/widgets/qmainwindowlayout_p.h Change-Id: I5df613008f6336f69b257d08e49a133d033a9d65
| * Doc: Update image, icon and screenshot for SQL example applicationPaul Wicking2018-05-223-0/+0
| | | | | | | | | | | | | | | | | | Replace image and icon in the SQL Master Detail example application, as well as the screenshot of the application on the landing page. Task-number: QTBUG-60633 Change-Id: Ic739908b569ea7f974b9dac48f673e14f6557550 Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
| * Doc: Update connect syntax Order Form ExampleNico Vertriest2018-05-162-4/+4
| | | | | | | | | | | | | | Task-number: QTBUG-60635 Change-Id: Ia474a23db7c32e68cb23ffa6ec14b9c6376cadec Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
| * Doc: Modify connect statements Echoplugin ExampleNico Vertriest2018-05-161-4/+4
| | | | | | | | | | | | | | Task-number: QTBUG-60635 Change-Id: I4313ff65875d20b768d7ad6e9c8322bd5cf7f1ab Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
| * Doc: update connect syntax digitalclock exampleNico Vertriest2018-05-161-1/+1
| | | | | | | | | | | | Task-number: QTBUG-60635 Change-Id: I9d8411b639e5cf74c9cb03de4b5f6081bb549151 Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
* | Merge remote-tracking branch 'origin/5.11' into devLiang Qi2018-05-141-1/+1
|\| | | | | | | | | | | | | | | | | Conflicts: mkspecs/features/qt_module_headers.prf tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp tests/auto/widgets/kernel/qwidget/BLACKLIST Change-Id: I2a08952d28d1d0e3d73f521a3d44700ce79ff16c
| * QLineEdit example: fix link to QLineEdit::setInputMaskChristian Ehrlicher2018-05-091-1/+1
| | | | | | | | | | | | | | | | | | | | Fix a typo to properly link to setInputMask instead setMask. Task-number: QTBUG-61775 Change-Id: I0cb00de8dcaece613467e25b41e93661d6e98308 Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: André Hartmann <aha_1980@gmx.de> Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
* | Rename the tablet example to avoid triggering a bug in tablet driversAndre de la Rocha2018-05-091-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It seems there is a subtle bug in the Wacom tablet drivers for Windows that is triggered in the very particular case where the running executable is named "tablet.exe", regardless of its installation path. It causes WM_POINTER* messages not to be delivered to the application, initially, but only after the application's window is reselected, after another application's window had been selected. It happens at least on Windows 10 systems with Wacom Bamboo tablets and drivers, and was reproduced with non-Qt-based applications also. It looks like a bad compatibility setting that makes "tablet" a cursed target name for applications using tablet functionality. It seems older versions of the drivers used to contain an executable with this name, although it seems to be absent in newer versions. Unfortunately, the Qt tablet example uses this name, which breaks it when used with upcoming WM_POINTER* messages support. Change-Id: I931cc725b9117b4604267f7b0172110ae61700de Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Topi Reiniö <topi.reinio@qt.io> Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* | Examples: fix network-chat in the presence of an IPv6 stackThiago Macieira2018-05-051-1/+1
| | | | | | | | | | | | | | | | | | | | Since we bind to QHostAddress::Any, the incoming packets are actually IPv4-mapped IPv6 addresses and the operator== strict comparison was failing. Instead, use isEqual(), which defaults to TolerantComparison. Change-Id: Ic38ec929fc3f4bb795dafffd150ac6b3a0a7e3b2 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
* | Merge remote-tracking branch 'origin/5.11' into devLiang Qi2018-05-036-7/+17
|\| | | | | | | | | | | | | | | | | | | | | | | Conflicts: examples/widgets/graphicsview/elasticnodes/graphwidget.cpp examples/widgets/graphicsview/elasticnodes/node.cpp examples/widgets/graphicsview/elasticnodes/node.h src/plugins/platforms/cocoa/qnsview.mm src/plugins/platforms/cocoa/qnsview_drawing.mm src/widgets/kernel/qmacgesturerecognizer_p.h Change-Id: I13cf06bac75d48d779d8ee7b5c91bfc976f2a32c
| * Examples: Fix unused variable warnings by ClangFriedemann Kleint2018-05-023-4/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | mainwindow.cpp(59,11): warning: unused variable 'ROWS' [-Wunused-const-variable] const int ROWS = 2; mainwindow.cpp(60,11): warning: unused variable 'COLUMNS' [-Wunused-const-variable] const int COLUMNS = 3; mainwindow.cpp(76,19): warning: unused variable 'message' [-Wunused-const-variable] Task-number: QTBUG-60635 Change-Id: I97c31462ffa826da9baa32c33c0ff0140bf46dfc Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
| * Examples: Fix Clang warning about hiding QGraphicsItem:::advance()Friedemann Kleint2018-05-023-3/+3
| | | | | | | | | | | | | | | | | | In file included from edge.cpp:52: ./node.h(76,10): warning: 'Node::advance' hides overloaded virtual function [-Woverloaded-virtual] bool advance(); Change-Id: I9d437059362c367e452b1b4f16077d4e0abd18de Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* | Merge remote-tracking branch 'origin/5.11' into devQt Forward Merge Bot2018-05-024-4/+4
|\| | | | | | | Change-Id: Ia082e20e2eb4b76afd4c1a1584ff4e5514655d7a
| * Vulkan Examples: Fix Clang warnings about initialization of VkClearColorValueFriedemann Kleint2018-04-304-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | hellovulkanwindow.cpp(97,38): warning: suggest braces around initialization of subobject [-Wmissing-braces] VkClearColorValue clearColor = { 0.0f, m_green, 0.0f, 1.0f }; hellovulkantexture.cpp(771,38): warning: suggest braces around initialization of subobject [-Wmissing-braces] VkClearColorValue clearColor = { 0, 0, 0, 1 }; ..\shared\trianglerenderer.cpp(455,38): warning: suggest braces around initialization of subobject [-Wmissing-braces] VkClearColorValue clearColor = { 0, 0, 0, 1 }; renderer.cpp(896,38): warning: suggest braces around initialization of subobject [-Wmissing-braces] VkClearColorValue clearColor = { 0.67f, 0.84f, 0.9f, 1.0f }; Change-Id: I3c2403699059dac2f88541f2a2102b774db0c887 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* | Merge remote-tracking branch 'origin/5.11' into devLiang Qi2018-04-262-41/+58
|\| | | | | | | | | | | | | | | Conflicts: src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm src/plugins/platforms/cocoa/qcocoawindow.mm Change-Id: Ideea96d1b43d47b1d9b34e11c9986a88e240aa71
| * Doc: Update doc for Dir View ExampleNico Vertriest2018-04-251-11/+10
| | | | | | | | | | | | | | Task-number: QTBUG-60635 Change-Id: I4a23f4866c76b9f5c29653ca30e44c3b844a9aa8 Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
| * Doc: Update Gradients ExampleNico Vertriest2018-04-251-30/+48
| | | | | | | | | | | | | | | | | | modify to latest syntax for connect statements Task-number: QTBUG-60635 Change-Id: Ie0f8f6bdbd5aec7379f7572e978adf65b9a96bdc Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* | Examples: fix wrong QRegExp in Custom Sort/Filter Model ExampleChristian Ehrlicher2018-04-222-14/+19
| | | | | | | | | | | | | | | | | | | | | | | | Fix wrong QRegExp in Custom Sort/Filter Model Example and replace it with QRegularExpression. Task-number: QTBUG-61129 Change-Id: I515474ee6985d36195d90dcd93876ba28a83bccc Reviewed-by: André Hartmann <aha_1980@gmx.de> Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Samuel Gaist <samuel.gaist@edeltech.ch> Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* | Merge remote-tracking branch 'origin/5.11' into devLars Knoll2018-04-121-1/+1
|\| | | | | | | Change-Id: I9f802cb9b4d9ccba77ca39428a5cb1afd2d01642
| * Fix documentation of the Event Transitions ExampleFriedemann Kleint2018-04-111-1/+1
| | | | | | | | | | | | | | | | | | | | | | Fix warning: eventtransitions.qdoc:50: (qdoc) warning: Unknown command '\s1' Amends 3b2d2ada5b1b66ad65eda10d70b5b48d32ef9c5. Task-number: QTBUG-60635 Change-Id: I4002c9769d30d9b8cb2a7255aa2258f6251ea39f Reviewed-by: Martin Smith <martin.smith@qt.io>
* | textedit example: Fix disabled Cut/Copy menu itemsGabriel de Dietrich2018-04-101-0/+2
| | | | | | | | | | | | | | This amends commit fe1ea010b946518803ca1cec1332945c26be83af. Change-Id: Ia1f9fa4a6dd4481b5295df986f882f1120c3d8b0 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* | Merge remote-tracking branch 'origin/5.11' into devQt Forward Merge Bot2018-04-105-52/+101
|\| | | | | | | Change-Id: I0120f804522c0c652e9537b6e9fe08189f071ed2
| * Doc: Update connect syntax in I18n Widgets ExampleNico Vertriest2018-04-092-4/+7
| | | | | | | | | | | | | | Task-number: QTBUG-60635 Change-Id: Icfa0d09ac6c9ad4396fbe1138277bb1dd866a803 Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
| * Doc: Add brief statements to Address Book Example chaptersNico Vertriest2018-04-091-2/+8
| | | | | | | | | | | | | | Task-number: QTBUG-60635 Change-Id: Ice6d2b6a475ba4352a87bb46366826334aed2af2 Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
| * Doc: Update Find Files exampleNico Vertriest2018-04-091-39/+66
| | | | | | | | | | | | | | | | | | | | - review text - update screenshot Task-number: QTBUG-60635 Change-Id: I596ce0e08be9ed9aea7834eeda1c3c2c19c28d7a Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
| * Doc: Update Event Transitions ExampleNico Vertriest2018-04-091-7/+20
| | | | | | | | | | | | | | | | | | | | - added screenshot - some modifications to the text Task-number QTBUG-60635 Change-Id: I57b269f93cdba696b424b5ba008d0f46ac612cda Reviewed-by: Martin Smith <martin.smith@qt.io>