SlideShare a Scribd company logo
Qt 6.0
Lars Knoll, Qt Chief Architect, The Qt Company
Tuukka Turunen, SVP R&D, The Qt Company
Wednesday 20th January
Qt 6 Timeline
20 January 2021 © The Qt Company
3
Qt 6 Development Timeline
Research. Setting the initial vision and
scope of Qt 6.
Planning the right timing for next major
version and evolution of Qt 5.x to match
user needs.
2017
Research and development of key
concepts (e.g. Graphics 2020),
timeline for development and releasing
at the end of 2020 set.
2018
Development of graphics, build
system, C++17, new QML, and other
key changes.
Using Qt 5.x to provide a preview as
much as possible.
2019
Main year of Qt 6.0 development.
Requirements of Qt 6.0 finalized and
initial scope for Qt 6.1 and 6.2 set.
Qt 6.0.0 release in December
2020
Release the first feature release Qt
6.1 and the first long-term supported
Qt 6.2 LTS.
More add-ons and platforms.
2021
Package Manager – Additional Libraries for Qt 6
Qt 6.x
Qt essentials +
“essential add-ons”
 Qt Core
 Qt Gui
 Qt Network
 Qt Widgets
 Qt QML
 Qt Quick
 Qt Quick 3D
 Qt Quick
Controls
 Qt Print
Support
 Qt Wayland +
Compositor
 etc etc
Package Manager
Qt user
Supported
Qt add-ons
Other
libraries
from external
repositories
Upcoming
Qt add-ons
Other
libraries from
The Qt
Company
20 January 2021 © The Qt Company
4
› Qt Concurrent
› Qt Core
› Qt Core Compat
› Qt D-Bus
› Qt GUI
› Qt Help
› Qt Network
› Qt OpenGL
› Qt Print Support
› Qt QML
› Qt Quick
› Qt Quick 3D
› Qt Quick Controls
› Qt Quick Layouts
› Qt Quick Timeline
› Qt Quick Widgets
Supported Essential and Add-on Modules in Qt 6
› Qt Bluetooth
› Qt Multimedia
› Qt NFC
› Qt Positioning
› Qt Quick Dialogs: Folder,
Message Box
› Qt Remote Objects
› Qt Sensors
› Qt SerialBus
› Qt SerialPort
› Qt WebChannel
› Qt WebEngine
› Qt WebSockets
› Qt WebView
› Active Qt
› Qt Charts
› Qt Data Visualization
› Qt Lottie Animation
› Qt Quick Dialogs
(File dialog)
› Qt ScXML
› Qt Virtual Keyboard
› Qt Shader Tools
› Qt SQL
› Qt SVG
› Qt Test
› Qt UI Tools
› Qt Wayland
› Qt Wayland Compositor
› Qt Widgets
› Qt XML
› Qt 3D
› Qt Image Formats
› Qt Network Authorization
› M2M package: Qt CoAP
› M2M package: Qt MQTT
› M2M package: Qt OpcUA
Qt 6.0 (released) Qt 6.1 (planned) Qt 6.2 (planned)
20 January 2021 © The Qt Company
5
Designer Tools
Unified 2D and 3D Design Tool
QT DESIGN STUDIO 2.0
› Create 3D UI’s with Qt Quick 3D in
addition to traditional 2D UI design
› Import designs from favorite 2D and 3D tools
› Visual 3D editor to work with the scenes
› Define keyframe-based timeline animations
› Assign 3D effects
› Mix 2D and 3D content seamlessly inside
your application Import
20 January 2021 © The Qt Company
7
Cross Product-line
Development
QT DESIGN STUDIO 2.0
Cortex-M4 MCU (<10 EUR BOM) – 640x480
ARMv7A 32bitlow end MPU (<30 EUR BOM) – 854x480
ARM-v8A 64bit Quad Core high end MPU (<100 EUR BOM) – 960x480
Low-end
Mid-range
High-end
Companion app
 Higher resolution
 2.5D Graphics
 Full Qt Framework
 Advanced animations
 Linux or RTOS
 Qt for MCUs
 Smartphone-like UX
 Basic animations
 Bare metal or
freeRTOS
 Complex/
simple apps
 Win, Mac,
Linux,
Android,
iOS
 WEBASM
 Highest
resolution
 Dual screen
support
 2D/3D
Graphics
 Full Qt
Framework
 Linux or
RTOS
20 January 2021 © The Qt Company
8
Developer Tools
Developer Tooling Fully Supporting Qt 6
QT CREATOR 4.14
› Wizards generate Qt 6 compliant projects
› Inspect Qt 6 types in the debugger
› Editor knows the new QML and C++
language features
› Access Qt 6 documentation and
examples
20 January 2021 © The Qt Company
10
Constantly Improving CMake Support
QT CREATOR 4.14
› Improved kit detection when importing
builds
› Allow to re-use existing build directory
› Out-of-the box support for
QML debugging and profiling
› Applications can still use qmake, if
desired
20 January 2021 © The Qt Company
11
New Tools for C++ Development
QT CREATOR 4.14
› New and improved refactoring operations
› Clang code model to Clang 11
› Tighter integration of Clazy and Clang-
Tidy
› Multiple improvements to C++
development throughout
20 January 2021 © The Qt Company
12
Qt 6
Goals
> Fix architectural limitations in Qt 5
> Improved performance
> House cleaning
> Package management support
> Smaller and modular core product
> Compatibility with Qt 5
20 January 2021 © The Qt Company
14
Core Values
> Cross platform
> Maintainability and compatibility
> Scalable
> Intuitive and easy to use
> Documentation
> Tooling
20 January 2021 © The Qt Company
15
Focus on cleaning up our
code base and architecture,
not on new features
20 January 2021 © The Qt Company
16
Compatibility
> Mostly source compatible with Qt 5
> Some porting required
• Requires some changes to source code
• Requires a recompile
• Deprecated functionality has been removed
> Those changes prepare us for the years to come
20 January 2021 © The Qt Company
17
What’s new in 6.0?
Require C++17
› Require a C++17 compliant compiler
› Use features available in C++17
› Structured bindings
› if constexpr ()
› Template argument deduction rules
› New std library features
› …
20 January 2021 © The Qt Company
19
Containers
> Closed API gaps towards STL containers
• Consistent support for move operations
• Emplace
• initializer_list
> Removed 2G size limitation
• qsizetype
> Default constructors constexpr and non allocating
20 January 2021 © The Qt Company
20
QList and QVector
> Only one class
• QVector is an alias to QList
> Simplifies our API
> Removed performance issues in Qt5 QList
• vector-based data structure
• Improves performance in almost all cases
> Almost 100% source compatible
• Exception: References to stored items not stable under
modification
20 January 2021 © The Qt Company
21
QMap and QHash
> Separated QHash/QMap and QMultiHash/QMultiMap
• Don’t inherit from each other anymore
> Q(Multi)Map implemented on top of std::(multi_)map
• Move support from/to std::map
• Implicitly shared
> New QHash implementation
• Open Adressing
• Fast
• Low memory usage
20 January 2021 © The Qt Company
22
Performance: Hash<int64_t, int64_t>
0
2
4
6
8
10
12
1000 10000 100000 1000000 10000000
Benchmark results (lower is better)
QHash (Qt 6) QHash (Qt 5) std::unordered_map tsl::sparse_map
0
20
40
60
80
100
120
10000 100000 1000000 10000000
Memory usage (bytes/entry)
QHash (Qt 6) QHash (Qt 5) std::unordered_map tsl::sparse_map
Measurements done using
https://github.com/Tessil/hash-table-shootout.git
20 January 2021 © The Qt Company
23
> All text handling Unicode based
• UTF-16 the default string encoding
• UTF-8 the default storage format
> Source code is UTF-8
> Clean up string related classes
• Consistent set
• QUtf8StringView
> Move legacy encoding support out of Qt Core
Unicode & String classes
20 January 2021 © The Qt Company
24
String classes
> QByteArray
• ASCII only, not Latin1
• Meant for storing binary data
> QUtf8StringView class
• Wrapper to tag UTF-8 specific data
> Completed QStringView API
• Supports the const methods of QString
> Removed QStringRef
• Still available in Qt5 compatibility library
20 January 2021 © The Qt Company
25
Regular expressions
> Qt 6 uses QRegularExpression everywhere
• Only one regular expression engine
• Based on PCRE2
> QRegExp has been removed
• Porting to QRegularExpression usually straightforward
• Still available in Qt5 compatibility library
20 January 2021 © The Qt Company
26
Text conversions
> New QStringEncoder/Decoder API
• Value based, stateful
• Supports UTF-8, UTF-16, UTF32, Latin1 and Local 8 bit
• Extensible to support full code conversions after Qt 6.0
> QTextCodec has been removed
• Still available in Qt5 compatibility library
20 January 2021 © The Qt Company
27
Properties and bindings
import QtQuick 2.15
Rectangle {
property int width
property int height: width
property int border: height/10
}
20 January 2021 © The Qt Company
29
Goals
> Bring the best part of QML to all of Qt
> Move binding infrastructure into Qt Core
• Extend existing properties in QObjects with support for bindings
• Add binding support to any other class
> Support lazy binding evaluation
• Mark bindings as dirty when dependency changes
• Only re-evaluate when value is required
> Make it fast
20 January 2021 © The Qt Company
30
struct Rectangle {
QProperty<int> width;
QProperty<int> height;
QProperty<int> border;
Rectangle() {
height.setBinding(Qt::makePropertyBinding(width));
border.setBinding([this]() {
return this->height / 10;
}
}
};
20 January 2021 © The Qt Company
31
template <typename T> class QProperty {
std::function<T()> binding = nullptr;
T data;
public:
T value() const {
if (binding) return binding();
return data;
}
void setValue(const T &newValue) {
if (binding) binding = nullptr;
data = newValue;
}
void setBinding(std::function<T> b) { binding = b; }
};
20 January 2021 © The Qt Company
32
template <typename T>
class QProperty {
T val;
QPropertyBindingData d;
public:
T value() const {
if (d.hasBinding()) d.evaluateIfDirty(this);
d.registerWithCurrenlyEvaluatingBinding();
return this->val;
}
void setValue(const T &t) {
d.removeBinding();
if (this->val == t) return;
this->val = t;
notify();
}
}; 20 January 2021 © The Qt Company
33
QObject complicates the picture
> Existing property infrastructure
• Avoid breaking compatibility with Qt 5
• Extend the existing property()/setProperty() mechanism
> Data hiding
• Data lives in QObjectPrivate
> Avoid overhead if bindings aren’t used
20 January 2021 © The Qt Company
34
Solution
> Binding support a simple addition to the existing system
> Add a getter for a binding interface
• QBindable<PropertyType> bindableProperty();
> Extend Q_PROPERTY with a BINDABLE tag
• Tells moc about the binding interface
> Use Q_OBJECT_BINDABLE_PROPERTY to implement the data storage
• Only works as a member of a QObject
> Low overhead if bindings aren’t used
• One additional pointer in QObjectPrivate
20 January 2021 © The Qt Company
35
class MyObject : public QObject {
Q_PROPERTY(int x GET x SET setX BINDABLE bindableX)
Q_OBJECT_BINDABLE_PROPERTY(MyObject, int, xData)
public:
int x() { return xData; }
void setX(int x) { xData = x; }
QBindable<int> bindableX() { return &xData; }
};
myObject->bindableX().setBinding([otherObject]() {
return otherObject->x() + otherObject->width();
}
20 January 2021 © The Qt Company
36
QMetatype and QVariant
> Common backend for QMetaType and QVariant
• QMetaType can finally handle all types
> High performance, fast code paths
• QMetaType contains one pointer to a handler struct
• Automatic registration
• Automatic support for comparisons and QDataStream
> Deprecated integer-based type id
• Use QMetaType directly
20 January 2021 © The Qt Company
37
struct QMetaTypeInterface {
uint size, alignment;
const char *name;
ConstructFn construct;
DestructFn destruct;
EqualsFn equals;
...
};
class QMetaType {
QMetaTypeInterface *iface;
public:
const char *name() const { return iface->name; }
void construct(void *where) { iface->construct(where); }
};
20 January 2021 © The Qt Company
38
Improvements to moc
> Store and resolve required metatype information at compile time
• No more string lookups for type information
• Faster and more efficient runtime resolution of methods
> Added support for bindable properties
• Dynamically add and remove bindings
20 January 2021 © The Qt Company
39
Rewritten Concurrent
> Simple chaining of computations
• QFuture::then()
> Attach failure and cancellation handlers
• QFuture::connect()
> Convert signals to QFuture objects
> Added a QPromise class
> Support for custom thread pools
20 January 2021 © The Qt Company
40
QByteArray download(const QUrl &url);
QImage loadImage(const QByteArray &data);
void show(const QImage &image);
auto future = QtConcurrent::run(download, url)
.then(loadImage)
.then(show)
.onFailed([](QNetworkReply::NetworkError) {
// handle network errors
});
20 January 2021 © The Qt Company
41
Further improvements
> Multiple improvements in Qt Network
• SSL/TLS improvements
• HTTP/2 support by default
• Write your own plugins for QNetworkAccesManager
> Added Qt5Compat module
• Ease porting to Qt 6
• Contains some deprecated classes from Qt 5
20 January 2021 © The Qt Company
42
Unified Pointer events
> Unified handling of mouse, touch and tablet events
• One common base class: QPointerEvent
• Specializations for mouse, touch and tablet events
• Common data
• Tracking of input device and history of event points
> Resolves recurring issues with touch handling in complex controls
• e.g. touch enabled controls inside Flickable
20 January 2021 © The Qt Company
43
Graphics
Graphics Architecture
OpenGL
(ES)
Vulkan Metal Direct 3D 11
Platform API
RHI
Qt Shader
Tools
Qt Quick Scene Graph
Qt Frameworks
Qt Quick (2D + 3D)
Qt Design Studio
Qt Tools Qt Creator
20 January 2021 © The Qt Company
45
Rendering Hardware Interface
> Abstraction layer for 3D graphics APIs
• OpenGL, Metal, Direct 3D 11, Vulkan
> Abstracts graphical objects
• Materials, Meshes, Shaders, etc.
• Internal API tuned towards the needs of Qt
> Integrated with Qt Platform and Window system abstraction layers
> Qt Quick and Qt Quick 3D are fully ported to RHI
20 January 2021 © The Qt Company
46
Qt Shader Tools
> Support for cross platform shaders
• Write shader once
• Recompile to all graphics APIs
> Support for build time and runtime shader compilation
• Dynamically generate shaders at runtime
• Bake the shaders offline
20 January 2021 © The Qt Company
47
Qt 6 uses the native graphics API of
each operating system
> Efficiently combine 2D and 3D in one scene
• One optimized scene graph
> Enhanced PBR support
• Materials look like they are designed
> Greatly improved support for GlTF2
• Support base spec
• Most of the common extensions
Quick 3D
20 January 2021 © The Qt Company
49
Native look and feel for
Qt Quick Controls on
macOS, Windows and
Linux
Desktop style for Quick
Controls
20 January 2021 © The Qt Company
50
Native look and feel for
Qt Quick Controls on
macOS, Windows and
Linux
Desktop style for Quick
Controls
20 January 2021 © The Qt Company
51
CMake
Supported platforms
> Host platforms
• Windows 10
• macOS 10.15 and 11.0
• Linux (Ubuntu 20.04, CentOS 8.1, SLES 15, OpenSUSE 15.1)
> Target platforms
• All host platforms
• Yocto 3.1 Dunfell
• iOS 13/14
• Android (28 built-time, 21 run-time)
20 January 2021 © The Qt Company
53
Roadmap for other platforms
> macOS on ARM
• Timing not yet confirmed
> Yocto 3.2
• Planned for Qt 6.1
> QNX & INTEGRITY
• Technology Preview with Qt 6.1
• Full support planned for Qt 6.2
20 January 2021 © The Qt Company
54
Release roadmap
 Qt 6.0 December 2020
 Qt 6.1 End of April 2021
 Qt 6.2 LTS End of September 2021
20 January 2021 © The Qt Company
55
Outlook
 Porting the remaining Qt Add-ons to Qt 6
• Delivered through the package manager as they are ready
 Make most properties bindable
 Wider C++ API for Qt Quick and Qt Quick Controls
 Improvements to QML performance
 Improvements in native styling, accessibility and graphics
features
20 January 2021 © The Qt Company
56
Want to Know More?
57
20 January 2021 © The Qt Company
57
Thank you!
info@qt.io
www.qt.io/contact-us
Lars Knoll, Qt Chief Architect, The Qt Company
Tuukka Turunen, SVP R&D, The Qt Company

More Related Content

PPTX
Qt user interface
meriem sari
 
PPT
Qt Technical Presentation
Daniel Rocha
 
PDF
Qt Application Programming with C++ - Part 1
Emertxe Information Technologies Pvt Ltd
 
PDF
Introduction to Qt Creator
Qt
 
PDF
QThreads: Are You Using Them Wrong?
ICS
 
PDF
Qt programming-using-cpp
Emertxe Information Technologies Pvt Ltd
 
PPTX
Qt for beginners part 1 overview and key concepts
ICS
 
PDF
Kubernetes Deployment Strategies
Abdennour TM
 
Qt user interface
meriem sari
 
Qt Technical Presentation
Daniel Rocha
 
Qt Application Programming with C++ - Part 1
Emertxe Information Technologies Pvt Ltd
 
Introduction to Qt Creator
Qt
 
QThreads: Are You Using Them Wrong?
ICS
 
Qt for beginners part 1 overview and key concepts
ICS
 
Kubernetes Deployment Strategies
Abdennour TM
 

What's hot (20)

PDF
Introduction to Qt programming
Dragos Tudor Acostachioaie
 
PPTX
Introduction to Qt
Puja Pramudya
 
PDF
Introduction to the Qt Quick Scene Graph
ICS
 
PDF
Intro to Kubernetes
Joonathan Mägi
 
PDF
Development with OpenGL and Qt
Ronny Yabar Aizcorbe
 
ODP
Qt 5 - C++ and Widgets
Juha Peltomäki
 
PDF
Kubernetes Basics
Eueung Mulyana
 
PPTX
Kubernetes & Google Kubernetes Engine (GKE)
Akash Agrawal
 
PDF
Achieving CI/CD with Kubernetes
Ramit Surana
 
PDF
Gstreamer: an Overview
Rodrigo Costa
 
PDF
Devops - Microservice and Kubernetes
NodeXperts
 
PDF
GitOps 101 Presentation.pdf
ssuser31375f
 
PPTX
Qt Framework Events Signals Threads
Neera Mital
 
PDF
Kubernetes: A Short Introduction (2019)
Megan O'Keefe
 
PDF
Writing the Container Network Interface(CNI) plugin in golang
HungWei Chiu
 
PPTX
Jetpack Compose.pptx
GDSCVJTI
 
PPTX
Introduction to github slideshare
Rakesh Sukumar
 
PDF
OpenShift 4, the smarter Kubernetes platform
Kangaroot
 
PPTX
Qt 6.2 lts vs. qt 5.15 the big feature parity comparison
Qt
 
PDF
Introduction to kubernetes
Raffaele Di Fazio
 
Introduction to Qt programming
Dragos Tudor Acostachioaie
 
Introduction to Qt
Puja Pramudya
 
Introduction to the Qt Quick Scene Graph
ICS
 
Intro to Kubernetes
Joonathan Mägi
 
Development with OpenGL and Qt
Ronny Yabar Aizcorbe
 
Qt 5 - C++ and Widgets
Juha Peltomäki
 
Kubernetes Basics
Eueung Mulyana
 
Kubernetes & Google Kubernetes Engine (GKE)
Akash Agrawal
 
Achieving CI/CD with Kubernetes
Ramit Surana
 
Gstreamer: an Overview
Rodrigo Costa
 
Devops - Microservice and Kubernetes
NodeXperts
 
GitOps 101 Presentation.pdf
ssuser31375f
 
Qt Framework Events Signals Threads
Neera Mital
 
Kubernetes: A Short Introduction (2019)
Megan O'Keefe
 
Writing the Container Network Interface(CNI) plugin in golang
HungWei Chiu
 
Jetpack Compose.pptx
GDSCVJTI
 
Introduction to github slideshare
Rakesh Sukumar
 
OpenShift 4, the smarter Kubernetes platform
Kangaroot
 
Qt 6.2 lts vs. qt 5.15 the big feature parity comparison
Qt
 
Introduction to kubernetes
Raffaele Di Fazio
 
Ad

Similar to Meet Qt 6.0 (20)

PDF
Qt everywhere a c++ abstraction platform
Develer S.r.l.
 
PDF
Qt for beginners
Sergio Shevchenko
 
PDF
QtQuick Day 1
Timo Strömmer
 
ODP
Cross Platform Qt
Johan Thelin
 
PDF
Porting Qt 5 QML Modules to Qt 6 Webinar
ICS
 
PPT
Qt S60 Technical Presentation Fn Stripped
Nokia
 
PDF
Qt 6 Chat - Are You Ready?
ICS
 
PDF
Qt Technology Overview for: MedAcuity
Qt
 
PPTX
Building Cross-Platform Apps using Qt and Qyoto
Jeff Alstadt
 
PPT
cpp-2013 #18 Qt Part 2
Amazon Web Services
 
PDF
Necessitas - Qt on Android - from FSCONS 2011
Johan Thelin
 
PPTX
Hello, QML
Jack Yang
 
PDF
Migrating from Photon to Qt
Janel Heilbrunn
 
PDF
Migrating from Photon to Qt
ICS
 
PDF
So I Downloaded Qt, Now What?
Janel Heilbrunn
 
PDF
So I downloaded Qt, Now What?
ICS
 
PPT
Developing and Benchmarking Qt applications on Hawkboard with Xgxperf
Prabindh Sundareson
 
PDF
Qt for beginners part 4 doing more
ICS
 
PDF
Qt introduction
Ahmed Toulan
 
Qt everywhere a c++ abstraction platform
Develer S.r.l.
 
Qt for beginners
Sergio Shevchenko
 
QtQuick Day 1
Timo Strömmer
 
Cross Platform Qt
Johan Thelin
 
Porting Qt 5 QML Modules to Qt 6 Webinar
ICS
 
Qt S60 Technical Presentation Fn Stripped
Nokia
 
Qt 6 Chat - Are You Ready?
ICS
 
Qt Technology Overview for: MedAcuity
Qt
 
Building Cross-Platform Apps using Qt and Qyoto
Jeff Alstadt
 
cpp-2013 #18 Qt Part 2
Amazon Web Services
 
Necessitas - Qt on Android - from FSCONS 2011
Johan Thelin
 
Hello, QML
Jack Yang
 
Migrating from Photon to Qt
Janel Heilbrunn
 
Migrating from Photon to Qt
ICS
 
So I Downloaded Qt, Now What?
Janel Heilbrunn
 
So I downloaded Qt, Now What?
ICS
 
Developing and Benchmarking Qt applications on Hawkboard with Xgxperf
Prabindh Sundareson
 
Qt for beginners part 4 doing more
ICS
 
Qt introduction
Ahmed Toulan
 
Ad

More from Qt (20)

PPTX
Learn how to addressing medical and industrial challenges with BlackBerry QNX...
Qt
 
PPTX
Turn your product into a revenue machine with the new Qt Digital Advertising ...
Qt
 
PPTX
Modern microcontroller (mcu) application development with qt
Qt
 
PDF
Improve Time to Market for Industrial Edge Devices
Qt
 
PDF
How are Companies Overcoming the Global Chip Shortage
Qt
 
PPTX
Meet Qt 6.2 LTS - Ask Us Anything!
Qt
 
PDF
UI/UX Design Trends in Appliances
Qt
 
PDF
Meet Qt Canada
Qt
 
PPTX
Machine learning meets embedded development
Qt
 
PDF
Driving Down Automotive Costs for Richer HMIs with Qt & i.MX RT1170
Qt
 
PDF
Companion App Design with Qt
Qt
 
PDF
Qt Core UI, Live Forum
Qt
 
PDF
Top 10 User Interface Trends
Qt
 
PDF
Embracing Qt for Python
Qt
 
PPTX
10 PRINCIPAIS RAZÕES PARA TRABALHAR COM
Qt
 
PDF
Build and run embedded apps faster from qt creator with docker
Qt
 
PDF
How to create a medical device proof of-concept prototype overnight
Qt
 
PDF
Qt Software Development Framework - Medical
Qt
 
PDF
Webinar- Qt OPC UA - An Overview
Qt
 
PDF
User Experience Design for Software Engineers, ICS & The Qt Company
Qt
 
Learn how to addressing medical and industrial challenges with BlackBerry QNX...
Qt
 
Turn your product into a revenue machine with the new Qt Digital Advertising ...
Qt
 
Modern microcontroller (mcu) application development with qt
Qt
 
Improve Time to Market for Industrial Edge Devices
Qt
 
How are Companies Overcoming the Global Chip Shortage
Qt
 
Meet Qt 6.2 LTS - Ask Us Anything!
Qt
 
UI/UX Design Trends in Appliances
Qt
 
Meet Qt Canada
Qt
 
Machine learning meets embedded development
Qt
 
Driving Down Automotive Costs for Richer HMIs with Qt & i.MX RT1170
Qt
 
Companion App Design with Qt
Qt
 
Qt Core UI, Live Forum
Qt
 
Top 10 User Interface Trends
Qt
 
Embracing Qt for Python
Qt
 
10 PRINCIPAIS RAZÕES PARA TRABALHAR COM
Qt
 
Build and run embedded apps faster from qt creator with docker
Qt
 
How to create a medical device proof of-concept prototype overnight
Qt
 
Qt Software Development Framework - Medical
Qt
 
Webinar- Qt OPC UA - An Overview
Qt
 
User Experience Design for Software Engineers, ICS & The Qt Company
Qt
 

Recently uploaded (20)

PPTX
TRAVEL APIs | WHITE LABEL TRAVEL API | TOP TRAVEL APIs
philipnathen82
 
PPTX
AI-Ready Handoff: Auto-Summaries & Draft Emails from MQL to Slack in One Flow
bbedford2
 
PDF
Protecting the Digital World Cyber Securit
dnthakkar16
 
PDF
Using licensed Data Loss Prevention (DLP) as a strategic proactive data secur...
Q-Advise
 
PDF
Download iTop VPN Free 6.1.0.5882 Crack Full Activated Pre Latest 2025
imang66g
 
PDF
Bandai Playdia The Book - David Glotz
BluePanther6
 
PDF
MiniTool Power Data Recovery Crack New Pre Activated Version Latest 2025
imang66g
 
PDF
Salesforce Implementation Services Provider.pdf
VALiNTRY360
 
PDF
Exploring AI Agents in Process Industries
amoreira6
 
PDF
Key Features to Look for in Arizona App Development Services
Net-Craft.com
 
PPTX
Visualising Data with Scatterplots in IBM SPSS Statistics.pptx
Version 1 Analytics
 
PDF
Generating Union types w/ Static Analysis
K. Matthew Dupree
 
PPTX
Role Of Python In Programing Language.pptx
jaykoshti048
 
PDF
49784907924775488180_LRN2959_Data_Pump_23ai.pdf
Abilash868456
 
PDF
Immersive experiences: what Pharo users do!
ESUG
 
PDF
ChatPharo: an Open Architecture for Understanding How to Talk Live to LLMs
ESUG
 
PPTX
classification of computer and basic part of digital computer
ravisinghrajpurohit3
 
PDF
advancepresentationskillshdhdhhdhdhdhhfhf
jasmenrojas249
 
PPTX
Odoo Integration Services by Candidroot Solutions
CandidRoot Solutions Private Limited
 
PDF
On Software Engineers' Productivity - Beyond Misleading Metrics
Romén Rodríguez-Gil
 
TRAVEL APIs | WHITE LABEL TRAVEL API | TOP TRAVEL APIs
philipnathen82
 
AI-Ready Handoff: Auto-Summaries & Draft Emails from MQL to Slack in One Flow
bbedford2
 
Protecting the Digital World Cyber Securit
dnthakkar16
 
Using licensed Data Loss Prevention (DLP) as a strategic proactive data secur...
Q-Advise
 
Download iTop VPN Free 6.1.0.5882 Crack Full Activated Pre Latest 2025
imang66g
 
Bandai Playdia The Book - David Glotz
BluePanther6
 
MiniTool Power Data Recovery Crack New Pre Activated Version Latest 2025
imang66g
 
Salesforce Implementation Services Provider.pdf
VALiNTRY360
 
Exploring AI Agents in Process Industries
amoreira6
 
Key Features to Look for in Arizona App Development Services
Net-Craft.com
 
Visualising Data with Scatterplots in IBM SPSS Statistics.pptx
Version 1 Analytics
 
Generating Union types w/ Static Analysis
K. Matthew Dupree
 
Role Of Python In Programing Language.pptx
jaykoshti048
 
49784907924775488180_LRN2959_Data_Pump_23ai.pdf
Abilash868456
 
Immersive experiences: what Pharo users do!
ESUG
 
ChatPharo: an Open Architecture for Understanding How to Talk Live to LLMs
ESUG
 
classification of computer and basic part of digital computer
ravisinghrajpurohit3
 
advancepresentationskillshdhdhhdhdhdhhfhf
jasmenrojas249
 
Odoo Integration Services by Candidroot Solutions
CandidRoot Solutions Private Limited
 
On Software Engineers' Productivity - Beyond Misleading Metrics
Romén Rodríguez-Gil
 

Meet Qt 6.0

  • 1. Qt 6.0 Lars Knoll, Qt Chief Architect, The Qt Company Tuukka Turunen, SVP R&D, The Qt Company Wednesday 20th January
  • 3. 20 January 2021 © The Qt Company 3 Qt 6 Development Timeline Research. Setting the initial vision and scope of Qt 6. Planning the right timing for next major version and evolution of Qt 5.x to match user needs. 2017 Research and development of key concepts (e.g. Graphics 2020), timeline for development and releasing at the end of 2020 set. 2018 Development of graphics, build system, C++17, new QML, and other key changes. Using Qt 5.x to provide a preview as much as possible. 2019 Main year of Qt 6.0 development. Requirements of Qt 6.0 finalized and initial scope for Qt 6.1 and 6.2 set. Qt 6.0.0 release in December 2020 Release the first feature release Qt 6.1 and the first long-term supported Qt 6.2 LTS. More add-ons and platforms. 2021
  • 4. Package Manager – Additional Libraries for Qt 6 Qt 6.x Qt essentials + “essential add-ons”  Qt Core  Qt Gui  Qt Network  Qt Widgets  Qt QML  Qt Quick  Qt Quick 3D  Qt Quick Controls  Qt Print Support  Qt Wayland + Compositor  etc etc Package Manager Qt user Supported Qt add-ons Other libraries from external repositories Upcoming Qt add-ons Other libraries from The Qt Company 20 January 2021 © The Qt Company 4
  • 5. › Qt Concurrent › Qt Core › Qt Core Compat › Qt D-Bus › Qt GUI › Qt Help › Qt Network › Qt OpenGL › Qt Print Support › Qt QML › Qt Quick › Qt Quick 3D › Qt Quick Controls › Qt Quick Layouts › Qt Quick Timeline › Qt Quick Widgets Supported Essential and Add-on Modules in Qt 6 › Qt Bluetooth › Qt Multimedia › Qt NFC › Qt Positioning › Qt Quick Dialogs: Folder, Message Box › Qt Remote Objects › Qt Sensors › Qt SerialBus › Qt SerialPort › Qt WebChannel › Qt WebEngine › Qt WebSockets › Qt WebView › Active Qt › Qt Charts › Qt Data Visualization › Qt Lottie Animation › Qt Quick Dialogs (File dialog) › Qt ScXML › Qt Virtual Keyboard › Qt Shader Tools › Qt SQL › Qt SVG › Qt Test › Qt UI Tools › Qt Wayland › Qt Wayland Compositor › Qt Widgets › Qt XML › Qt 3D › Qt Image Formats › Qt Network Authorization › M2M package: Qt CoAP › M2M package: Qt MQTT › M2M package: Qt OpcUA Qt 6.0 (released) Qt 6.1 (planned) Qt 6.2 (planned) 20 January 2021 © The Qt Company 5
  • 7. Unified 2D and 3D Design Tool QT DESIGN STUDIO 2.0 › Create 3D UI’s with Qt Quick 3D in addition to traditional 2D UI design › Import designs from favorite 2D and 3D tools › Visual 3D editor to work with the scenes › Define keyframe-based timeline animations › Assign 3D effects › Mix 2D and 3D content seamlessly inside your application Import 20 January 2021 © The Qt Company 7
  • 8. Cross Product-line Development QT DESIGN STUDIO 2.0 Cortex-M4 MCU (<10 EUR BOM) – 640x480 ARMv7A 32bitlow end MPU (<30 EUR BOM) – 854x480 ARM-v8A 64bit Quad Core high end MPU (<100 EUR BOM) – 960x480 Low-end Mid-range High-end Companion app  Higher resolution  2.5D Graphics  Full Qt Framework  Advanced animations  Linux or RTOS  Qt for MCUs  Smartphone-like UX  Basic animations  Bare metal or freeRTOS  Complex/ simple apps  Win, Mac, Linux, Android, iOS  WEBASM  Highest resolution  Dual screen support  2D/3D Graphics  Full Qt Framework  Linux or RTOS 20 January 2021 © The Qt Company 8
  • 10. Developer Tooling Fully Supporting Qt 6 QT CREATOR 4.14 › Wizards generate Qt 6 compliant projects › Inspect Qt 6 types in the debugger › Editor knows the new QML and C++ language features › Access Qt 6 documentation and examples 20 January 2021 © The Qt Company 10
  • 11. Constantly Improving CMake Support QT CREATOR 4.14 › Improved kit detection when importing builds › Allow to re-use existing build directory › Out-of-the box support for QML debugging and profiling › Applications can still use qmake, if desired 20 January 2021 © The Qt Company 11
  • 12. New Tools for C++ Development QT CREATOR 4.14 › New and improved refactoring operations › Clang code model to Clang 11 › Tighter integration of Clazy and Clang- Tidy › Multiple improvements to C++ development throughout 20 January 2021 © The Qt Company 12
  • 13. Qt 6
  • 14. Goals > Fix architectural limitations in Qt 5 > Improved performance > House cleaning > Package management support > Smaller and modular core product > Compatibility with Qt 5 20 January 2021 © The Qt Company 14
  • 15. Core Values > Cross platform > Maintainability and compatibility > Scalable > Intuitive and easy to use > Documentation > Tooling 20 January 2021 © The Qt Company 15
  • 16. Focus on cleaning up our code base and architecture, not on new features 20 January 2021 © The Qt Company 16
  • 17. Compatibility > Mostly source compatible with Qt 5 > Some porting required • Requires some changes to source code • Requires a recompile • Deprecated functionality has been removed > Those changes prepare us for the years to come 20 January 2021 © The Qt Company 17
  • 19. Require C++17 › Require a C++17 compliant compiler › Use features available in C++17 › Structured bindings › if constexpr () › Template argument deduction rules › New std library features › … 20 January 2021 © The Qt Company 19
  • 20. Containers > Closed API gaps towards STL containers • Consistent support for move operations • Emplace • initializer_list > Removed 2G size limitation • qsizetype > Default constructors constexpr and non allocating 20 January 2021 © The Qt Company 20
  • 21. QList and QVector > Only one class • QVector is an alias to QList > Simplifies our API > Removed performance issues in Qt5 QList • vector-based data structure • Improves performance in almost all cases > Almost 100% source compatible • Exception: References to stored items not stable under modification 20 January 2021 © The Qt Company 21
  • 22. QMap and QHash > Separated QHash/QMap and QMultiHash/QMultiMap • Don’t inherit from each other anymore > Q(Multi)Map implemented on top of std::(multi_)map • Move support from/to std::map • Implicitly shared > New QHash implementation • Open Adressing • Fast • Low memory usage 20 January 2021 © The Qt Company 22
  • 23. Performance: Hash<int64_t, int64_t> 0 2 4 6 8 10 12 1000 10000 100000 1000000 10000000 Benchmark results (lower is better) QHash (Qt 6) QHash (Qt 5) std::unordered_map tsl::sparse_map 0 20 40 60 80 100 120 10000 100000 1000000 10000000 Memory usage (bytes/entry) QHash (Qt 6) QHash (Qt 5) std::unordered_map tsl::sparse_map Measurements done using https://github.com/Tessil/hash-table-shootout.git 20 January 2021 © The Qt Company 23
  • 24. > All text handling Unicode based • UTF-16 the default string encoding • UTF-8 the default storage format > Source code is UTF-8 > Clean up string related classes • Consistent set • QUtf8StringView > Move legacy encoding support out of Qt Core Unicode & String classes 20 January 2021 © The Qt Company 24
  • 25. String classes > QByteArray • ASCII only, not Latin1 • Meant for storing binary data > QUtf8StringView class • Wrapper to tag UTF-8 specific data > Completed QStringView API • Supports the const methods of QString > Removed QStringRef • Still available in Qt5 compatibility library 20 January 2021 © The Qt Company 25
  • 26. Regular expressions > Qt 6 uses QRegularExpression everywhere • Only one regular expression engine • Based on PCRE2 > QRegExp has been removed • Porting to QRegularExpression usually straightforward • Still available in Qt5 compatibility library 20 January 2021 © The Qt Company 26
  • 27. Text conversions > New QStringEncoder/Decoder API • Value based, stateful • Supports UTF-8, UTF-16, UTF32, Latin1 and Local 8 bit • Extensible to support full code conversions after Qt 6.0 > QTextCodec has been removed • Still available in Qt5 compatibility library 20 January 2021 © The Qt Company 27
  • 29. import QtQuick 2.15 Rectangle { property int width property int height: width property int border: height/10 } 20 January 2021 © The Qt Company 29
  • 30. Goals > Bring the best part of QML to all of Qt > Move binding infrastructure into Qt Core • Extend existing properties in QObjects with support for bindings • Add binding support to any other class > Support lazy binding evaluation • Mark bindings as dirty when dependency changes • Only re-evaluate when value is required > Make it fast 20 January 2021 © The Qt Company 30
  • 31. struct Rectangle { QProperty<int> width; QProperty<int> height; QProperty<int> border; Rectangle() { height.setBinding(Qt::makePropertyBinding(width)); border.setBinding([this]() { return this->height / 10; } } }; 20 January 2021 © The Qt Company 31
  • 32. template <typename T> class QProperty { std::function<T()> binding = nullptr; T data; public: T value() const { if (binding) return binding(); return data; } void setValue(const T &newValue) { if (binding) binding = nullptr; data = newValue; } void setBinding(std::function<T> b) { binding = b; } }; 20 January 2021 © The Qt Company 32
  • 33. template <typename T> class QProperty { T val; QPropertyBindingData d; public: T value() const { if (d.hasBinding()) d.evaluateIfDirty(this); d.registerWithCurrenlyEvaluatingBinding(); return this->val; } void setValue(const T &t) { d.removeBinding(); if (this->val == t) return; this->val = t; notify(); } }; 20 January 2021 © The Qt Company 33
  • 34. QObject complicates the picture > Existing property infrastructure • Avoid breaking compatibility with Qt 5 • Extend the existing property()/setProperty() mechanism > Data hiding • Data lives in QObjectPrivate > Avoid overhead if bindings aren’t used 20 January 2021 © The Qt Company 34
  • 35. Solution > Binding support a simple addition to the existing system > Add a getter for a binding interface • QBindable<PropertyType> bindableProperty(); > Extend Q_PROPERTY with a BINDABLE tag • Tells moc about the binding interface > Use Q_OBJECT_BINDABLE_PROPERTY to implement the data storage • Only works as a member of a QObject > Low overhead if bindings aren’t used • One additional pointer in QObjectPrivate 20 January 2021 © The Qt Company 35
  • 36. class MyObject : public QObject { Q_PROPERTY(int x GET x SET setX BINDABLE bindableX) Q_OBJECT_BINDABLE_PROPERTY(MyObject, int, xData) public: int x() { return xData; } void setX(int x) { xData = x; } QBindable<int> bindableX() { return &xData; } }; myObject->bindableX().setBinding([otherObject]() { return otherObject->x() + otherObject->width(); } 20 January 2021 © The Qt Company 36
  • 37. QMetatype and QVariant > Common backend for QMetaType and QVariant • QMetaType can finally handle all types > High performance, fast code paths • QMetaType contains one pointer to a handler struct • Automatic registration • Automatic support for comparisons and QDataStream > Deprecated integer-based type id • Use QMetaType directly 20 January 2021 © The Qt Company 37
  • 38. struct QMetaTypeInterface { uint size, alignment; const char *name; ConstructFn construct; DestructFn destruct; EqualsFn equals; ... }; class QMetaType { QMetaTypeInterface *iface; public: const char *name() const { return iface->name; } void construct(void *where) { iface->construct(where); } }; 20 January 2021 © The Qt Company 38
  • 39. Improvements to moc > Store and resolve required metatype information at compile time • No more string lookups for type information • Faster and more efficient runtime resolution of methods > Added support for bindable properties • Dynamically add and remove bindings 20 January 2021 © The Qt Company 39
  • 40. Rewritten Concurrent > Simple chaining of computations • QFuture::then() > Attach failure and cancellation handlers • QFuture::connect() > Convert signals to QFuture objects > Added a QPromise class > Support for custom thread pools 20 January 2021 © The Qt Company 40
  • 41. QByteArray download(const QUrl &url); QImage loadImage(const QByteArray &data); void show(const QImage &image); auto future = QtConcurrent::run(download, url) .then(loadImage) .then(show) .onFailed([](QNetworkReply::NetworkError) { // handle network errors }); 20 January 2021 © The Qt Company 41
  • 42. Further improvements > Multiple improvements in Qt Network • SSL/TLS improvements • HTTP/2 support by default • Write your own plugins for QNetworkAccesManager > Added Qt5Compat module • Ease porting to Qt 6 • Contains some deprecated classes from Qt 5 20 January 2021 © The Qt Company 42
  • 43. Unified Pointer events > Unified handling of mouse, touch and tablet events • One common base class: QPointerEvent • Specializations for mouse, touch and tablet events • Common data • Tracking of input device and history of event points > Resolves recurring issues with touch handling in complex controls • e.g. touch enabled controls inside Flickable 20 January 2021 © The Qt Company 43
  • 45. Graphics Architecture OpenGL (ES) Vulkan Metal Direct 3D 11 Platform API RHI Qt Shader Tools Qt Quick Scene Graph Qt Frameworks Qt Quick (2D + 3D) Qt Design Studio Qt Tools Qt Creator 20 January 2021 © The Qt Company 45
  • 46. Rendering Hardware Interface > Abstraction layer for 3D graphics APIs • OpenGL, Metal, Direct 3D 11, Vulkan > Abstracts graphical objects • Materials, Meshes, Shaders, etc. • Internal API tuned towards the needs of Qt > Integrated with Qt Platform and Window system abstraction layers > Qt Quick and Qt Quick 3D are fully ported to RHI 20 January 2021 © The Qt Company 46
  • 47. Qt Shader Tools > Support for cross platform shaders • Write shader once • Recompile to all graphics APIs > Support for build time and runtime shader compilation • Dynamically generate shaders at runtime • Bake the shaders offline 20 January 2021 © The Qt Company 47
  • 48. Qt 6 uses the native graphics API of each operating system
  • 49. > Efficiently combine 2D and 3D in one scene • One optimized scene graph > Enhanced PBR support • Materials look like they are designed > Greatly improved support for GlTF2 • Support base spec • Most of the common extensions Quick 3D 20 January 2021 © The Qt Company 49
  • 50. Native look and feel for Qt Quick Controls on macOS, Windows and Linux Desktop style for Quick Controls 20 January 2021 © The Qt Company 50
  • 51. Native look and feel for Qt Quick Controls on macOS, Windows and Linux Desktop style for Quick Controls 20 January 2021 © The Qt Company 51
  • 52. CMake
  • 53. Supported platforms > Host platforms • Windows 10 • macOS 10.15 and 11.0 • Linux (Ubuntu 20.04, CentOS 8.1, SLES 15, OpenSUSE 15.1) > Target platforms • All host platforms • Yocto 3.1 Dunfell • iOS 13/14 • Android (28 built-time, 21 run-time) 20 January 2021 © The Qt Company 53
  • 54. Roadmap for other platforms > macOS on ARM • Timing not yet confirmed > Yocto 3.2 • Planned for Qt 6.1 > QNX & INTEGRITY • Technology Preview with Qt 6.1 • Full support planned for Qt 6.2 20 January 2021 © The Qt Company 54
  • 55. Release roadmap  Qt 6.0 December 2020  Qt 6.1 End of April 2021  Qt 6.2 LTS End of September 2021 20 January 2021 © The Qt Company 55
  • 56. Outlook  Porting the remaining Qt Add-ons to Qt 6 • Delivered through the package manager as they are ready  Make most properties bindable  Wider C++ API for Qt Quick and Qt Quick Controls  Improvements to QML performance  Improvements in native styling, accessibility and graphics features 20 January 2021 © The Qt Company 56
  • 57. Want to Know More? 57 20 January 2021 © The Qt Company 57
  • 58. Thank you! [email protected] www.qt.io/contact-us Lars Knoll, Qt Chief Architect, The Qt Company Tuukka Turunen, SVP R&D, The Qt Company