| /**************************************************************************** |
| ** |
| ** Copyright (C) 2019 The Qt Company Ltd. |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the documentation of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:FDL$ |
| ** Commercial License Usage |
| ** Licensees holding valid commercial Qt licenses may use this file in |
| ** accordance with the commercial license agreement provided with the |
| ** Software or, alternatively, in accordance with the terms contained in |
| ** a written agreement between you and The Qt Company. For licensing terms |
| ** and conditions see https://www.qt.io/terms-conditions. For further |
| ** information use the contact form at https://www.qt.io/contact-us. |
| ** |
| ** GNU Free Documentation License Usage |
| ** Alternatively, this file may be used under the terms of the GNU Free |
| ** Documentation License version 1.3 as published by the Free Software |
| ** Foundation and appearing in the file included in the packaging of |
| ** this file. Please review the following information to ensure |
| ** the GNU Free Documentation License version 1.3 requirements |
| ** will be met: https://www.gnu.org/licenses/fdl-1.3.html. |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| /*! |
| \page qt5-intro.html |
| \title What's New in Qt 5 |
| \brief Qt 5 features and its benefits. |
| |
| Qt 5 is the latest version of Qt. It enables developers to develop |
| applications with intuitive user interfaces for multiple targets, faster |
| than ever before. Qt 5 makes it |
| easier to address the latest UI paradigm shifts that touch screens and |
| tablets require. |
| |
| Developers can be more productive and flexible with the improved support |
| for JavaScript and QML in Qt 5, while still having the C++ foundation |
| and Qt Widget support. HTML5 developers will feel at home with the Web |
| offering that includes Chromium-based Qt \WebEngine and Qt \WebChannel. |
| |
| Qt 5 is highly compatible with Qt 4. It is possible for developers |
| of Qt 4 applications to seamlessly move on to Qt 5 with their current |
| functionality and gradually develop new things leveraging all the great |
| items Qt 5 makes possible. |
| |
| Cross-platform portability is made simpler in Qt 5, thanks to the new |
| modularized codebase consisting of the |
| \l{All Modules}{essential and add-on} modules, and the consolidation |
| of the \l{Qt Platform Abstraction}. |
| |
| The following sections summarize some of the key features that Qt 5 brings |
| to the table. |
| |
| \section1 New Features by Qt Version |
| |
| \list |
| \li \l{What's New in Qt 5.15} |
| \li \l{What's New in Qt 5.14} |
| \li \l{What's New in Qt 5.13} |
| \li \l{What's New in Qt 5.12} |
| \li \l{What's New in Qt 5.11} |
| \li \l{What's New in Qt 5.10} |
| \li \l{What's New in Qt 5.9} |
| \li \l{What's New in Qt 5.8} |
| \li \l{What's New in Qt 5.7} |
| \li \l{What's New in Qt 5.6} |
| \li \l{What's New in Qt 5.5} |
| \li \l{What's New in Qt 5.4} |
| \li \l{What's New in Qt 5.3} |
| \li \l{What's New in Qt 5.2} |
| \li \l{What's New in Qt 5.1} |
| \li \l{What's New in Qt 5.0} |
| \li \l{Porting Guide} |
| \endlist |
| |
| \section1 Qt Everywhere on Mobile |
| |
| \raw HTML |
| <div class="table"> |
| <table style="background:transparent; border: none"> |
| <tr><td style="width:50%; border: none; vertical-align: top"> |
| \endraw |
| Qt now comes with production-ready ports for Android and iOS. |
| Extensive work has gone into these platform |
| ports, which now extend Qt’s multi-platform promise to cover desktop, |
| embedded, and mobile platforms. |
| \raw HTML |
| <br> |
| \endraw |
| With full support for Android and iOS, Qt is a |
| great solution for targeting the mobile markets with a single codebase. |
| It is fast and easy to bring existing desktop or embedded application |
| to mobile, by simply recompiling it. |
| \raw HTML |
| <br> |
| \endraw |
| You can install several demo applications that showcase the power of Qt |
| on these mobile platforms. Here is a small list of such applications: |
| \raw HTML |
| <br> |
| \endraw |
| Demo applications: |
| \list |
| \li \l{Google Play: Introduction to Qt 5}{Introduction to Qt 5} |
| (Google Play) |
| \li \l{Google Play: Qt 5 Everywhere}{Qt 5 Everywhere} (Google Play) |
| \li \l{iTunes: SubAttack}{SubAttack} (App Store) |
| \li \l{iTunes: QtQuicksand}{QtQuicksand} (App Store) |
| \li Quick Forecast on \l{iTunes: Quick Forecast}{App Store}, |
| \l{Google Play: Quick Forecast}{Google Play}, and |
| \l{Windows Store: QuickForeCast}{Windows Store}. |
| \li Qt Hangman on \l{iTunes: Qt Hangman}{App Store} and |
| \l{Google Play: Qt Hangman}{Google Play} |
| \li Flyingbus on \l{iTunes: Flyingbus}{App Store} and |
| \l{Google Play: Flyingbus}{Google Play} |
| \endlist |
| |
| Platform pages: |
| \list |
| \li \l{Qt for Android} |
| \li \l{Qt for iOS} |
| \endlist |
| \raw HTML |
| </td><td style="width:50%; vertical-align:top; border: none"> |
| \endraw |
| \image qt5_everywhere_demo.jpg |
| \caption Qt Everywhere demo on Nexus 7 |
| \raw HTML |
| </td></tr> |
| </table> |
| </div> |
| \endraw |
| |
| \section1 Amazing Graphics Capability and Performance |
| |
| \raw HTML |
| <div class="table"> |
| <table style="background:transparent; border: none"> |
| <tr><td style="width:50%; vertical-align:top; border: none"> |
| \endraw |
| \image qt5_shadereffect.jpg |
| \caption ShaderEffect on an \l Image |
| \raw HTML |
| </td><td style="width:50%; border: none; vertical-align: top"> |
| \endraw |
| Qt 5 uses an OpenGL-based scene graph to accelerate the graphics |
| of Qt Quick, making it possible to do visually appealing user |
| interfaces with animations, impressive graphical effects and |
| particle systems, even on the constrained hardware environments of |
| mobile and embedded devices. |
| \raw HTML |
| <br> |
| \endraw |
| The benefits of this architectural change in the rendering engine are |
| well demonstrated by the following projects: |
| \list |
| \li \l{Livecoding video effects with Qt5} - The Big Buck Bunny you |
| never saw before. Video effects created using Qt Quick. |
| \li \l{Pimp my video} - Video effects implemented using the shader |
| language with QML. |
| \li \l{QtMediaHub} - The power and convenience of Qt Quick. |
| \li \l{QtonPi} - Good example of Qt 5 running on the low cost hardware, |
| Raspberry PI. |
| \endlist |
| \raw HTML |
| </td></tr> |
| </table> |
| </div> |
| \endraw |
| |
| \section1 Qt Quick in Qt 5 |
| |
| \raw HTML |
| <div class="table"> |
| <table style="background:transparent; border: none"> |
| <tr><td style="width:50%; vertical-align:top; border: none"> |
| \endraw |
| \l{Qt Quick} provides the necessary infrastructure to develop QML |
| applications. The latest version (v2.0) of this technology also |
| introduces a set of new C++ classes as a replacement for the |
| QDeclarative* equivalents in Qt Quick 1. New features in Qt Quick |
| include: |
| \list |
| \li \l Canvas for drawing. Canvas provides an API that is similar to |
| the HTML5 Canvas API, along with some additional features. |
| |
| \li \l{ShaderEffect}{Shader Effects} which enable GLSL shader programs |
| to be integrated directly into QML code and applied to items and images. |
| |
| \li \l{Using the Qt Quick Particle System}{Particle Effects} for |
| creating a variety of 2D particle systems. |
| |
| \li \l{Sprite Animations}{Sprites} can be used in animating 2D |
| graphical objects and as a source for particle systems. |
| |
| \li \l{Qt Quick Local Storage QML Types}{Offline storage} is a JavaScript |
| API that conforms with the HTML5 Web Database API for storing data in |
| Qt Quick applications. |
| |
| \li \l{Qt Quick Window QML Types}{Window} provides a top-level window |
| and the Screen type for accessing a screen's resolution and other |
| details. This is useful for desktop applications developed using |
| Qt Quick. |
| |
| \li \l{Qt Quick Scene Graph}{OpenGL-based rendering architecture} for |
| optimal performance. |
| \endlist |
| \raw HTML |
| </td><td style="width:50%; vertical-align:top; border: none"> |
| \endraw |
| \image qt5_particles.jpg |
| \caption Qt Quick's \l{Qt Quick Particles QML Types}{Particle System} |
| \raw HTML |
| </td></tr><tr><td style="width:50%; vertical-align:top; border: none"> |
| \endraw |
| The \l {qtgraphicaleffects-index.html}{Qt Graphical Effects} module |
| provides a number of ready-made effects for use in Qt Quick |
| applications, including soft drop shadow, blur, glow and colorize. |
| \raw HTML |
| </td><td style="width:50%; vertical-align:top; border: none"> |
| \endraw |
| \image qt5_graphicaleffects.jpg |
| \caption Excerpts from the Qt Graphical Effects module |
| \raw HTML |
| </td></tr> |
| </table> |
| </div> |
| \endraw |
| |
| \section1 Designing UI Made Simpler |
| |
| \raw HTML |
| <div class="table"> |
| <table style="background:transparent; border: none"> |
| <tr><td style="width:50%; border: none; vertical-align: top"> |
| \endraw |
| \image qtquickcontrols2-material.png |
| \caption Qt Quick Controls Material style |
| \raw HTML |
| </td><td style="width:50%; border: none; vertical-align: top"> |
| \endraw |
| UI designing can be time consuming if there are not enough tools to help. |
| Qt Quick reduces the effort considerably compared to the traditional |
| native (C or C++) approach, especially if the \l{Qt Quick Controls} and |
| \l{Qt Quick Layouts} modules are used. These modules provide ready-to-use |
| UI controls and layouts to enable faster application development with less |
| code. |
| \raw HTML |
| <br> |
| \endraw |
| Qt Quick Controls and Qt Quick Layouts provide a vast set of UI controls |
| ranging from the most basic text field and button to the more complex |
| stack view and tumbler. The controls are also made available in |
| \l{Qt Creator: Editing QML Files in Design Mode}{Qt Quick Designer}. |
| \raw HTML |
| </td></tr> |
| </table> |
| </div> |
| \endraw |
| |
| \section1 Sensor and Location |
| |
| Reacting to sensor value changes and locating a place on the world map |
| are the common use cases supported on most portable devices. Now you |
| can support such use cases in your Qt application using the |
| \l{Qt Sensors} and \l{Qt Positioning} modules. |
| |
| \raw HTML |
| <div class="table"> |
| <table style="background:transparent; border: none"> |
| <tr><td style="width:50%; vertical-align:top; border: none"> |
| \endraw |
| \image qtsensors_accelbubble_ex.jpg |
| \caption Accelerating SVG image |
| \raw HTML |
| </td><td style="width:50%; vertical-align:top; border: none"> |
| \endraw |
| \image qtpositioning_weatherinfo_ex.jpg |
| \caption Location-based weather information |
| \raw HTML |
| </td></tr> |
| </table> |
| </div> |
| \endraw |
| |
| \section1 Web Engine and HTML5 |
| |
| \raw HTML |
| <div class="table"> |
| <table style="background:transparent; border: none"> |
| <tr><td colspan=2 style="width:50%; border: none; vertical-align: top"> |
| \endraw |
| \image qtwebengine_quicknanobrowser.jpg |
| \caption Qt Quick nano browser |
| \raw HTML |
| </td><td style="width:50%; border: none; vertical-align: top"> |
| \endraw |
| \l{Qt WebEngine} is a web content rendering engine based on Chromium |
| featuring broad support for standard web technologies. It provides |
| integration with both Qt Quick and traditional widgets. The module brings |
| the latest in HTML5 advancements to Qt 5, including CSS filters, animations |
| and video, and Canvas. |
| \raw HTML |
| <br> |
| \endraw |
| This Chromium-based Web Engine support in Qt is complemented with |
| \l{Qt WebChannel}, which bridges the gap between QML/C++ and |
| HTML/JavaScript. It enables sharing QObjects from QML/C++ with |
| HTML/JavaScript-based clients. |
| \raw HTML |
| </td></tr> |
| </table> |
| </div> |
| \endraw |
| |
| \section1 Multimedia |
| |
| \raw HTML |
| <div class="table"> |
| <table style="background:transparent; border: none"> |
| <tr><td colspan=2 style="width:50%; border: none; vertical-align: top"> |
| \endraw |
| \l {Qt Multimedia} provides a rich set of QML types and C++ classes to |
| handle multimedia content. It also provides necessary APIs to access |
| the camera and radio functionality. Qt 5 brings the Qt Multimedia |
| module into the set of essential modules with support on all major |
| platforms. |
| \raw HTML |
| </td><td style="width:50%; border: none;"> |
| \endraw |
| \image qt5_video.jpg |
| \caption Video embedded into a Qt Quick application with a displacement effect |
| \raw HTML |
| </td></tr> |
| </table> |
| </div> |
| \endraw |
| |
| \section1 Platform-specific Extras |
| |
| Qt is a cross-platform development framework enabling you to target |
| multiple platforms with a single codebase. It provides common APIs across |
| all supported platforms to access a feature without having to worry about |
| how that feature is implemented on a platform. In some applications there |
| will be a need to use a platform-specific feature, and that's |
| when the following modules can be useful: |
| |
| \list |
| |
| \li \l{Qt Android Extras} enables you to integrate Java code into your Qt |
| application. |
| |
| \li \l{Qt Mac Extras} enables you to access specific features on \macos and |
| iOS. |
| |
| \li \l{Qt Windows Extras} enables you to use Windows-specific features |
| such as jump lists, progress indicator on a taskbar button, and so on. |
| |
| \li \l{Qt X11 Extras} enables you to access the display configuration on |
| Linux (X11). |
| \endlist |
| |
| \section1 Modularized Qt Libraries |
| |
| Qt 5 splits the Qt libraries into domain specific libraries and |
| modules. This means that an application can choose which libraries |
| it requires and only compile, use and deploy those. |
| |
| For a complete list of modules and libraries, see \l {All |
| Modules}{all Qt modules}. |
| |
| \section2 Widgets in Qt 5 |
| |
| The \l {Qt Widgets} have been separated into their own module in |
| Qt 5, the Qt Widgets module. It is part of the essential modules. |
| |
| \raw HTML |
| <div class="table"> |
| <table style="background:transparent; border: none"> |
| <tr><td colspan=2 style="width:50%; border: none; vertical-align: top"> |
| \endraw |
| \image qt5_widgets.jpg |
| \caption Screen capture of a widget application. |
| \raw HTML |
| </td></tr> |
| </table> |
| </div> |
| \endraw |
| |
| Designing the UI for widget-based applications can be quick with |
| \l{Qt Designer Manual}{Qt Designer}. |
| |
| \section1 Provide Map-based Solutions with Qt |
| |
| \raw HTML |
| <div class="table"> |
| <table style="background:transparent; border: none"> |
| <tr><td style="width:50%; vertical-align:top; border: none"> |
| \endraw |
| In today's world, location and maps information is more widely used, be it |
| to look up nearby restaurants or plan commute to the office. With Qt, |
| it is now possible to cater to these use cases by consuming map data |
| provided by the third-party vendors. The \l{QtLocation}{Qt Location} module |
| provides the APIs and the necessary backend to fetch map data from some of |
| the popular third-party mapping solutions. Here is a snapshot of the demo |
| application running on Android, presenting OpenStreetMap data from |
| \l {http://www.mapquest.com/}{www.mapquest.com}. |
| \raw HTML |
| </td><td style="width:50%; border: none; vertical-align: top"> |
| \endraw |
| \image qtlocation-mapviewer-demo.jpg |
| \caption Mapviewer example screenshot |
| \raw HTML |
| </td></tr> |
| </table> |
| </div> |
| \endraw |
| |
| \section1 Qt Platform Abstraction |
| |
| The windowing system dependent parts of Qt have been completely |
| rewritten for Qt 5, based on the Qt Platform Abstraction, a plugin |
| architecture which allows Qt to dynamically load a windowing |
| system integration based on what system it is running on. This |
| gives several benefits: |
| |
| \list |
| |
| \li Centralize the windowing system integration codebase into |
| classes shared for all platforms. |
| |
| \li Simplify the work required when porting Qt to new platforms. |
| |
| \li Remove the windowing system dependency from Qt, making it |
| possible to have the same Qt binaries run against multiple |
| windowing systems. For instance, the Qt Linux binaries can run |
| against both X11 and Wayland. |
| |
| \endlist |
| |
| \section1 New Connection Syntax |
| |
| In addition to the still available well known way to connect signals and slots, |
| new overloads of QObject::connect have been added allowing you to connect signals |
| and slot using pointer to member functions: |
| |
| \code |
| QObject::connect(sender, &Sender::valueChanged, receiver, &Receiver::updateValue); |
| \endcode |
| |
| The new syntax provides compile time checking of the compatibility between signals |
| and slots, automatic conversion of the arguments if there is an implicit cast between |
| the types, and solve many problems occurring because of typedef or namespaces. |
| |
| Additionally, if your compiler supports C++11 lambdas, you can even connect directly |
| to a lambda function. |
| |
| \code |
| connect(sender, &QObject::destroyed, [=](){ this->m_objects.remove(sender); }); |
| \endcode |
| |
| For a detailed comparison with the original string-based syntax, see \l{Differences |
| between String-Based and Functor-Based Connections}. |
| |
| \section1 Connectivity and Networking |
| |
| Qt 5 provides better support for IPv6 and dual mode networks. Most |
| applications using host names and network layer transparent protocols |
| can now gain IPv6 support transparently. Such applications can also choose |
| to receive both IPv4 and IPv6 connections or bind to only one of the two |
| connection types. In the case of outgoing HTTP connections using |
| \c{QNetworkAccessManager}, both IPv4 and IPv6 connections are attempted in |
| parallel, and the one that succeeds first is used. This is useful in |
| environments where one of the two types has limited connectivity. |
| |
| Qt 5 also provides better ways to handle TCP socket-based connections and |
| SSL certificates. This means developers can now: |
| \list |
| \li bind a TCP socket to an IP address before connecting, |
| \li verify an SSL certificate chain, |
| \li and access legacy systems. |
| \endlist |
| |
| Stricter client authentication is one of the primary concerns for many |
| applications handling confidential or critical data. The opaque Private |
| Keys support in Qt 5 enables applications to read private keys from devices |
| such as PKCS#11 dongles for stricter client authentication. The \l{qsslkey |
| example} illustrates reading private keys from a device. |
| |
| \section2 Extended Connectivity |
| |
| The connectivity options are endless with Qt 5. The two new modules, |
| \l{Qt Bluetooth} and \l{Qt NFC}, enable developers to add support for |
| sophisticated ways to connect and share information in their application. |
| |
| \section1 JSON Support |
| |
| Qt applications that use simple data structures to store small amount of |
| data, can now choose to use JSON documents over the complex database |
| backends that need necessary drivers or plugins to access data. The fact |
| that JSON is a text-based open standard derived from JavaScript, makes it |
| the obvious choice for QML applications as well. |
| |
| The Qt Core provides a set of classes to enable parsing and generating JSON |
| documents. These classes also allow you to convert between an in-memory |
| binary representation of JSON to a standard textual JSON format. The goal |
| is to make common operations on JSON faster. |
| |
| \section1 User Input |
| |
| Qt 4 already had support for handling multi-point touch input in |
| C++. Qt 5 extends this support to include Qt Quick, covering all |
| the information about the touch points, including the touch |
| position, pressure, and velocity. |
| |
| The mouse event handling in Qt 5 has been improved from its |
| predecessor. Applications have more control to handle mouse |
| events in Qt Quick. The mouse area in a QML document can propagate |
| the mouse wheel and click events and also ignore propagated |
| events. |
| |
| Besides this, Qt 5 adds support for more mouse buttons on |
| platforms where this is supported. This comes in handy for gaming |
| applications developed using Qt. |
| |
| */ |