aboutsummaryrefslogtreecommitdiffstats
path: root/src/imports/controls/doc/src/qtquickcontrols2-differences.qdoc
diff options
context:
space:
mode:
Diffstat (limited to 'src/imports/controls/doc/src/qtquickcontrols2-differences.qdoc')
-rw-r--r--src/imports/controls/doc/src/qtquickcontrols2-differences.qdoc378
1 files changed, 378 insertions, 0 deletions
diff --git a/src/imports/controls/doc/src/qtquickcontrols2-differences.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-differences.qdoc
new file mode 100644
index 00000000..a85890f5
--- /dev/null
+++ b/src/imports/controls/doc/src/qtquickcontrols2-differences.qdoc
@@ -0,0 +1,378 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://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 http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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: http://www.gnu.org/copyleft/fdl.html.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+ \page qtquickcontrols2-differences.html
+ \title Differences between Qt Quick Controls
+
+ Qt Quick Controls were originally developed to support desktop platforms,
+ with mobile and embedded support coming shortly afterwards. They have a
+ very broad scope, in that they provide a styling system flexible enough to
+ allow the development of applications that have either a platform-dependent
+ or platform-independent style.
+
+ On embedded systems, where the hardware has limited resources, this approach
+ can be inefficient. Qt Quick Controls 2 were designed to solve this problem,
+ using
+ \l {https://blog.qt.io/blog/2015/03/31/qt-quick-controls-for-embedded/}{benchmarks}
+ to guide the development.
+
+ \section2 C++ and QML
+
+ In many cases, the internal state of a control can be more efficiently
+ processed in C++. For example, handling input events in C++ makes a
+ difference for controls that would otherwise need to create internal
+ MouseAreas and attached Keys objects.
+
+ \section2 Styles
+
+ Not only does handling events and logic in C++ increase performance, but it
+ allows the visual QML layer to be a simple, declarative layer on top. This
+ is reflected in the structure of the controls project: all visual
+ implementations sit in the \e imports folder, so that users who want to
+ create their own complete style can copy the folder and start tweaking.
+ Read more about implementing a style plugin
+ \l {Creating a Custom Style}{here}.
+
+ In Qt Quick Controls 2, styles no longer provide components that are
+ dynamically instantiated by controls, but controls themselves consist of
+ item delegates that can be replaced. In effect, this means that delegates
+ are Qt Quick items that are instantiated on the spot, as properties of the
+ control, and are simply parented to the control.
+
+ \section2 Modularity and Simplicity
+
+ When it comes to more complex controls, it is sometimes better to split
+ them up into separate building blocks. As an example, the complex
+ ScrollView control:
+
+ \qml
+ ScrollView {
+ horizontalScrollBarPolicy: Qt.ScrollBarAlwaysOff
+ Flickable {
+ // ...
+ }
+ }
+ \endqml
+
+ Is replaced with simple ScrollBar/ScrollIndicator controls that can be
+ attached to any Flickable:
+
+ \qml
+ Flickable {
+ // ...
+ ScrollBar.vertical: ScrollBar { }
+ }
+ \endqml
+
+ The API of Qt Quick Controls 2 aims to be clean and simple. Common
+ operations are easy, and more advanced ones are liberally documented with
+ snippets that can be copied into your code.
+
+ \section2 Feature Comparison Table
+
+ \table
+ \header
+ \li
+ \li Qt Quick Controls
+ \li Qt Quick Controls 2
+ \row
+ \li Stylable delegates
+ \li Yes
+ \li Yes
+ \row
+ \li Pre-built native styles
+ \li Yes
+ \li No
+ \row
+ \li Runtime style/theme changes
+ \li Yes \sup 1
+ \li Yes \sup 2
+ \row
+ \li Can be used on Desktop
+ \li Yes
+ \li Yes \sup 3
+ \row
+ \li Can be used on Mobile
+ \li Yes \sup 4
+ \li Yes
+ \row
+ \li Can be used on Embedded
+ \li Yes \sup 4
+ \li Yes
+ \row
+ \li Internal event handling
+ \li QML
+ \li C++
+ \endtable
+
+ \list 1
+ \li Not officially supported, but technically possible via private APIs
+ \li Only themes for specific styles can be changed at runtime, styles are fixed
+ \li No hover effects
+ \li Performance may not be optimal
+ \endlist
+
+ \section2 Porting Qt Quick Controls Code
+
+ The API of Qt Quick Controls 2 is very similar to Qt Quick Controls, but it
+ does come with some changes necessary to facilitate the improvements. The
+ majority of changes are to do with styling; all of a control's delegates
+ are now accessible in the control itself, instead of in a separate style
+ object.
+
+ For example, to style a button in Qt Quick Controls:
+
+ \badcode
+ Button {
+ style: ButtonStyle {
+ label: Label {
+ // ...
+ }
+ }
+ }
+ \endcode
+
+ To style a button in Qt Quick Controls 2:
+
+ \qml
+ Button {
+ contentItem: Label {
+ // ...
+ }
+ }
+ \endqml
+
+ \section3 Preparing for Migration
+
+ With this in mind, a good way to prepare for a migration to Qt Quick
+ Controls 2 is to place each control that you have a custom style for in its
+ own QML file. For example, the Qt Quick Controls button above could be
+ moved to a file named \c Button.qml in a directory named \c controls, and
+ used in the following manner:
+
+ \badcode
+ import "controls" as Controls
+
+ Controls.Button {
+ ...
+ }
+ \endcode
+
+ This works with both modules, and will reduce the amount of work needed
+ when the migration begins.
+
+ \section3 Type Comparison Table
+
+ \table
+ \header
+ \li Qt Quick Controls 1, Qt Quick Extras
+ \li Qt Quick Controls 2, Qt Labs Calendar
+ \row
+ \li \mdash
+ \li \l [QML QtQuickControls2] {AbstractButton}
+ \row
+ \li \l [QML QtQuickControls] {Action}
+ \li \span {} {\mdash \nbsp \sub {(see \l [QML QtQuick] {Shortcut} instead)}}
+ \row
+ \li \l [QML QtQuickControls] {ApplicationWindow}
+ \li \l [QML QtQuickControls2] {ApplicationWindow}
+ \row
+ \li \l [QML QtQuickControls] {BusyIndicator}
+ \li \l [QML QtQuickControls2] {BusyIndicator}
+ \row
+ \li \l [QML QtQuickControls] {Button}
+ \li \l [QML QtQuickControls2] {Button}
+ \row
+ \li \l [QML QtQuickExtras] {CircularGauge}
+ \li \mdash
+ \row
+ \li \mdash
+ \li \l [QML QtQuickControls2] {Control}
+ \row
+ \li \mdash
+ \li \l [QML QtQuickControls2] {Container}
+ \row
+ \li \l [QML QtQuickControls] {Calendar}
+ \li \l [QML QtLabsCalendar] {MonthGrid},
+ \l [QML QtLabsCalendar] {DayOfWeekRow},
+ \l [QML QtLabsCalendar] {WeekNumberColumn}
+ \row
+ \li \l [QML QtQuickControls] {CheckBox}
+ \li \l [QML QtQuickControls2] {CheckBox}
+ \row
+ \li \mdash
+ \li \l [QML QtQuickControls2] {CheckDelegate}
+ \row
+ \li \l [QML QtQuickControls] {ComboBox}
+ \li \l [QML QtQuickControls2] {ComboBox}
+ \row
+ \li \l [QML QtQuickExtras] {DelayButton}
+ \li \mdash
+ \row
+ \li \l [QML QtQuickExtras] {Dial}
+ \li \l [QML QtQuickControls2] {Dial}
+ \row
+ \li \mdash
+ \li \l [QML QtQuickControls2] {Drawer}
+ \row
+ \li \l [QML QtQuickControls] {ExclusiveGroup}
+ \li \l [QML QtQuickControls2] {ButtonGroup}
+ \row
+ \li \mdash
+ \li \l [QML QtQuickControls2] {Frame}
+ \row
+ \li \l [QML QtQuickExtras] {Gauge}
+ \li \mdash
+ \row
+ \li \l [QML QtQuickControls] {GroupBox}
+ \li \l [QML QtQuickControls2] {GroupBox}
+ \row
+ \li \mdash
+ \li \l [QML QtQuickControls2] {ItemDelegate}
+ \row
+ \li \l [QML QtQuickControls] {Label}
+ \li \l [QML QtQuickControls2] {Label}
+ \row
+ \li \l [QML QtQuickControls] {Menu}
+ \li \l [QML QtQuickControls2] {Menu}
+ \row
+ \li \l [QML QtQuickControls] {MenuBar}
+ \li \mdash
+ \row
+ \li \l [QML QtQuickControls] {MenuItem}
+ \li \l [QML QtQuickControls2] {MenuItem}
+ \row
+ \li \mdash
+ \li \l [QML QtQuickControls2] {Page}
+ \row
+ \li \mdash
+ \li \l [QML QtQuickControls2] {PageIndicator}
+ \row
+ \li \mdash
+ \li \l [QML QtQuickControls2] {Pane}
+ \row
+ \li \l [QML QtQuickExtras] {Picture}
+ \li \mdash
+ \row
+ \li \l [QML QtQuickExtras] {PieMenu}
+ \li \mdash
+ \row
+ \li \mdash
+ \li \l [QML QtQuickControls2] {Popup}
+ \row
+ \li \l [QML QtQuickControls] {ProgressBar}
+ \li \l [QML QtQuickControls2] {ProgressBar}
+ \row
+ \li \l [QML QtQuickControls] {RadioButton}
+ \li \l [QML QtQuickControls2] {RadioButton}
+ \row
+ \li \mdash
+ \li \l [QML QtQuickControls2] {RadioDelegate}
+ \row
+ \li \mdash
+ \li \l [QML QtQuickControls2] {RangeSlider}
+ \row
+ \li \l [QML QtQuickControls] {ScrollView}
+ \li \l [QML QtQuickControls2] {ScrollBar},
+ \l [QML QtQuickControls2] {ScrollIndicator}
+ \row
+ \li \l [QML QtQuickControls] {Slider}
+ \li \l [QML QtQuickControls2] {Slider}
+ \row
+ \li \l [QML QtQuickControls] {SplitView}
+ \li \mdash
+ \row
+ \li \l [QML QtQuickControls] {SpinBox}
+ \li \l [QML QtQuickControls2] {SpinBox}
+ \row
+ \li \l [QML QtQuickControls] {StackView},
+ \l [QML QtQuickControls] {StackViewDelegate},
+ \l [QML QtQuickControls] {Stack}
+ \li \l [QML QtQuickControls2] {StackView}
+ \row
+ \li \l [QML QtQuickControls] {StatusBar}
+ \li \mdash
+ \row
+ \li \l [QML QtQuickExtras] {StatusIndicator}
+ \li \mdash
+ \row
+ \li \mdash
+ \li \l [QML QtQuickControls2] {SwipeDelegate}
+ \row
+ \li \mdash
+ \li \l [QML QtQuickControls2] {SwipeView}
+ \row
+ \li \l [QML QtQuickControls] {Switch}
+ \li \l [QML QtQuickControls2] {Switch}
+ \row
+ \li \mdash
+ \li \l [QML QtQuickControls2] {SwitchDelegate}
+ \row
+ \li \l [QML QtQuickControls] {TabView},
+ \l [QML QtQuickControls] {Tab}
+ \li \l [QML QtQuickControls2] {TabBar},
+ \l [QML QtQuickControls2] {TabButton}
+ \row
+ \li \l [QML QtQuickControls] {TableView}
+ \li \mdash
+ \row
+ \li \l [QML QtQuickControls] {TextArea}
+ \li \l [QML QtQuickControls2] {TextArea}
+ \row
+ \li \l [QML QtQuickControls] {TextField}
+ \li \l [QML QtQuickControls2] {TextField}
+ \row
+ \li \l [QML QtQuickExtras] {ToggleButton}
+ \li \mdash
+ \row
+ \li \l [QML QtQuickControls] {ToolBar}
+ \li \l [QML QtQuickControls2] {ToolBar}
+ \row
+ \li \l [QML QtQuickControls] {ToolButton}
+ \li \l [QML QtQuickControls2] {ToolButton}
+ \row
+ \li \mdash
+ \li \l [QML QtQuickControls2] {ToolTip}
+ \row
+ \li \l [QML QtQuickControls] {TreeView}
+ \li \mdash
+ \row
+ \li \l [QML QtQuickExtras] {Tumbler},
+ \l [QML QtQuickExtras] {TumblerColumn}
+ \li \l [QML QtQuickControls2] {Tumbler}
+ \endtable
+
+ \section1 Related Information
+
+ \list
+ \li \l{Qt Quick}
+ \li \l{Qt Quick Controls 2 QML Types}
+ \li \l{Qt Quick Controls QML Types}
+ \li \l{Qt Quick Extras QML Types}
+ \endlist
+*/