Merge remote-tracking branch 'origin/5.8' into dev

Conflicts:
	.qmake.conf
	examples/quickcontrols2/quickcontrols2.pro

Change-Id: If2f5e40487ba6515ba322f92380573727bdd6bc0
This commit is contained in:
J-P Nurmi 2017-01-05 16:48:06 +01:00
commit 463e462455
22 changed files with 1096 additions and 4 deletions

1
.gitignore vendored
View File

@ -12,6 +12,7 @@
/examples/quickcontrols2/chattutorial/chapter4-models/chapter4-models
/examples/quickcontrols2/chattutorial/chapter5-styling/chapter5-styling
/examples/quickcontrols2/contactlist/contactlist
/examples/quickcontrols2/flatstyle/flatstyle
/examples/quickcontrols2/gallery/gallery
/examples/quickcontrols2/sidepanel/sidepanel
/examples/quickcontrols2/swipetoremove/swipetoremove

View File

@ -0,0 +1,122 @@
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** 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.
**
** BSD License Usage
** Alternatively, you may use this file under the terms of the BSD license
** as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of The Qt Company Ltd nor the names of its
** contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.8
import QtQuick.Templates 2.1 as T
import Theme 1.0
T.Button {
id: control
font: Theme.font
implicitWidth: Math.max(background ? background.implicitWidth : 0,
contentItem.implicitWidth + leftPadding + rightPadding)
implicitHeight: Math.max(background ? background.implicitHeight : 0,
contentItem.implicitHeight + topPadding + bottomPadding)
leftPadding: 4
rightPadding: 4
background: Rectangle {
id: buttonBackground
implicitWidth: 100
implicitHeight: 40
opacity: enabled ? 1 : 0.3
border.color: Theme.mainColor
border.width: 1
radius: 2
states: [
State {
name: "normal"
when: !control.down
PropertyChanges {
target: buttonBackground
}
},
State {
name: "down"
when: control.down
PropertyChanges {
target: buttonBackground
border.color: Theme.mainColorDarker
}
}
]
}
contentItem: Text {
id: textItem
text: control.text
font: control.font
opacity: enabled ? 1.0 : 0.3
color: Theme.mainColor
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
elide: Text.ElideRight
states: [
State {
name: "normal"
when: !control.down
},
State {
name: "down"
when: control.down
PropertyChanges {
target: textItem
color: Theme.mainColorDarker
}
}
]
}
}

View File

@ -0,0 +1,146 @@
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** 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.
**
** BSD License Usage
** Alternatively, you may use this file under the terms of the BSD license
** as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of The Qt Company Ltd nor the names of its
** contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.8
import QtQuick.Templates 2.1 as T
import Theme 1.0
T.CheckBox {
id: control
font: Theme.font
implicitWidth: Math.max(background ? background.implicitWidth : 0,
contentItem.implicitWidth + leftPadding + rightPadding)
implicitHeight: Math.max(background ? background.implicitHeight : 0,
Math.max(contentItem.implicitHeight,
indicator ? indicator.implicitHeight : 0) + topPadding + bottomPadding)
leftPadding: 4
indicator: Rectangle {
id: checkboxHandle
implicitWidth: Theme.baseSize * 2.6
implicitHeight: Theme.baseSize * 2.6
x: control.leftPadding
anchors.verticalCenter: parent.verticalCenter
radius: 2
border.color: Theme.mainColor
Rectangle {
id: rectangle
width: Theme.baseSize * 1.4
height: Theme.baseSize * 1.4
x: Theme.baseSize * 0.6
y: Theme.baseSize * 0.6
radius: Theme.baseSize * 0.4
visible: false
color: Theme.mainColor
}
states: [
State {
name: "unchecked"
when: !control.checked && !control.down
},
State {
name: "checked"
when: control.checked && !control.down
PropertyChanges {
target: rectangle
visible: true
}
},
State {
name: "unchecked_down"
when: !control.checked && control.down
PropertyChanges {
target: rectangle
color: Theme.mainColorDarker
}
PropertyChanges {
target: checkboxHandle
border.color: Theme.mainColorDarker
}
},
State {
name: "checked_down"
extend: "unchecked_down"
when: control.checked && control.down
PropertyChanges {
target: rectangle
visible: true
}
}
]
}
background: Rectangle {
implicitWidth: 140
implicitHeight: Theme.baseSize * 3.8
color: Theme.lightGray
border.color: Theme.gray
}
contentItem: Text {
leftPadding: control.indicator.width + 4
text: control.text
font: control.font
color: Theme.dark
elide: Text.ElideRight
visible: control.text
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
}
}

View File

@ -0,0 +1,140 @@
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** 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.
**
** BSD License Usage
** Alternatively, you may use this file under the terms of the BSD license
** as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of The Qt Company Ltd nor the names of its
** contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.8
import QtQuick.Templates 2.1 as T
import Theme 1.0
T.Switch {
id: control
implicitWidth: indicator.implicitWidth
implicitHeight: background.implicitHeight
background: Rectangle {
implicitWidth: 140
implicitHeight: Theme.baseSize * 3.8
color: Theme.lightGray
border.color: Theme.gray
}
leftPadding: 4
indicator: Rectangle {
id: switchHandle
implicitWidth: Theme.baseSize * 4.8
implicitHeight: Theme.baseSize * 2.6
x: control.leftPadding
anchors.verticalCenter: parent.verticalCenter
radius: Theme.baseSize * 1.3
color: Theme.light
border.color: Theme.lightGray
Rectangle {
id: rectangle
width: Theme.baseSize * 2.6
height: Theme.baseSize * 2.6
radius: Theme.baseSize * 1.3
color: Theme.light
border.color: Theme.gray
}
states: [
State {
name: "off"
when: !control.checked && !control.down
},
State {
name: "on"
when: control.checked && !control.down
PropertyChanges {
target: switchHandle
color: Theme.mainColor
border.color: Theme.mainColor
}
PropertyChanges {
target: rectangle
x: parent.width - width
}
},
State {
name: "off_down"
when: !control.checked && control.down
PropertyChanges {
target: rectangle
color: Theme.light
}
},
State {
name: "on_down"
extend: "off_down"
when: control.checked && control.down
PropertyChanges {
target: rectangle
x: parent.width - width
color: Theme.light
}
PropertyChanges {
target: switchHandle
color: Theme.mainColorDarker
border.color: Theme.mainColorDarker
}
}
]
}
}

View File

@ -0,0 +1,146 @@
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** 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.
**
** BSD License Usage
** Alternatively, you may use this file under the terms of the BSD license
** as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of The Qt Company Ltd nor the names of its
** contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.8
import QtQuick.Controls 2.1
import QtQuick.Layouts 1.0
import Theme 1.0
Item {
id: form
width: 320
height: 480
property alias slider: slider
property alias checkBoxUnderline: checkBoxUnderline
property alias checkBoxBold: checkBoxBold
property alias sizeSwitch: sizeSwitch
property alias button: button
Slider {
id: slider
width: 297
height: 38
stepSize: 1
to: 18
from: 10
value: 14
anchors.topMargin: Theme.baseSize
anchors.top: gridLayout.bottom
anchors.right: gridLayout.right
anchors.left: gridLayout.left
handle: Rectangle {
id: sliderHandle
x: slider.leftPadding + slider.visualPosition * (slider.availableWidth - width)
y: slider.topPadding + slider.availableHeight / 2 - height / 2
implicitWidth: 26
implicitHeight: 26
radius: 13
color: slider.pressed ? Theme.mainColorDarker : Theme.mainColor
border.color: Theme.gray
}
}
GridLayout {
id: gridLayout
anchors.top: parent.top
anchors.topMargin: 64
anchors.horizontalCenter: parent.horizontalCenter
columnSpacing: Theme.baseSize * 0.5
rowSpacing: Theme.baseSize * 0.5
rows: 4
columns: 2
Label {
text: qsTr("Toggle Size")
font: Theme.font
}
Switch {
id: sizeSwitch
Layout.fillWidth: true
}
CheckBox {
id: checkBoxBold
text: qsTr("Bold")
checked: true
Layout.fillWidth: true
}
CheckBox {
id: checkBoxUnderline
text: qsTr("Underline")
Layout.fillWidth: true
}
Rectangle {
id: rectangle
color: Theme.mainColor
Layout.fillWidth: true
Layout.columnSpan: 2
Layout.preferredHeight: 38
Layout.preferredWidth: 297
}
Label {
id: label
text: qsTr("Customization")
font: Theme.font
}
Button {
id: button
text: qsTr("Change Color")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,93 @@
/****************************************************************************
**
** Copyright (C) 2017 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$
**
****************************************************************************/
/*!
\example flatstyle
\title Qt Quick Controls 2 - Flat Style
\ingroup qtquickcontrols2-examples
\brief A QML app using Qt Quick Controls 2 and a QML plugin
with customized controls.
\e Flat Style shows how to integrate customized controls into Qt Quick Designer.
The example uses a pure QML plugin to define constants in a singleton. For the
declarative parts of the UI, \c .ui.qml files are used. These can be edited
visually in Qt Quick Designer.
\borderedimage qtquickcontrols2-flatstyle.png
\section1 QML Plugin
The example contains a plugin called Theme. The plugin consists of a QML file
\c Theme.qml and a \c qmldir file. The plugin is located in the imports subdirectory
and added as a resource.
To ensure the plugin is found by QML, we add the import directory to the import
paths of the engine in \c main.cpp.
\code
...
engine.addImportPath(":/imports");
...
\endcode
To ensure the code model and Qt Quick Designer can find the plugin, we add the following
line to \e flatstyle.pro.
\code
QML_IMPORT_PATH = $$PWD/imports
\endcode
All colors, font parameters, and size constants that are used in this example
are defined as properties in the singleton called \e Theme.qml.
Usually such attribute values are defined as constants as they are not suppose to change at run time.
In this example, we allow the user to change some attributes like the main color, the size parameter,
and some font parameters while the application is running.
Defining these attribute values in a singleton makes it easy to maintain and change them.
This pattern makes it easy to implement theming.
\section1 Implementing Custom Controls
The plugin also contains a style for a couple of controls that implement a custom look and feel.
This style is located in \c Flat and is set as the style for the application in \c qtquickcontrols2.conf.
The example uses the states of a Qt Quick Item to implement the different states of a control.
This has the advantage that we can define the custom look in Qt Quick Designer and we can easily
verify the different states of a control.
To edit the indicator of a switch in Qt Quick Designer we can open Switch.qml and then enter the implementation
of the indicator called \c switchHandle using the combo box on the top next to the combo box for the open documents.
\borderedimage qtquickcontrols2-flatstyle-creator.png
The application itself is just a simple form that allows the user to adjust a couple of parameters of the custom controls.
The user can choose another main color, set the font to bold or underline, and increase the size of the controls by
toggling a switch.
\e MainForm.ui.qml is just the pure declarative definition of the form, while \e flatstyle.qml instantiates the form
and implements the logic.
\include examples-run.qdocinc
*/

View File

@ -0,0 +1,18 @@
TEMPLATE = app
TARGET = flatstyle
QT += quick quickcontrols2 widgets
SOURCES += main.cpp
RESOURCES += \
qtquickcontrols2.conf \
$$files(*.qml) \
$$files(imports/Theme/*) \
$$files(Flat/*.qml)
# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH = $$PWD/imports
target.path = $$[QT_INSTALL_EXAMPLES]/quickcontrols2/flatstyle
INSTALLS += target

View File

@ -0,0 +1,80 @@
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** 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.
**
** BSD License Usage
** Alternatively, you may use this file under the terms of the BSD license
** as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of The Qt Company Ltd nor the names of its
** contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.8
import QtQuick.Controls 2.1
import Qt.labs.platform 1.0
import Theme 1.0
ApplicationWindow {
id: window
visible: true
minimumWidth: 360
height: 480
title: qsTr("Flat Style")
MainForm {
id: form
anchors.fill: parent
button.onClicked: colorDialog.open()
sizeSwitch.onCheckedChanged: Theme.baseSize = (sizeSwitch.checked ? Theme.largeSize : Theme.smallSize)
checkBoxBold.onCheckedChanged: Theme.font.bold = checkBoxBold.checked
checkBoxUnderline.onCheckedChanged: Theme.font.underline = checkBoxUnderline.checked
slider.onPositionChanged: Theme.font.pixelSize = slider.valueAt(slider.position)
}
ColorDialog {
id: colorDialog
onCurrentColorChanged: Theme.mainColor = currentColor
}
}

View File

@ -0,0 +1,74 @@
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** 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.
**
** BSD License Usage
** Alternatively, you may use this file under the terms of the BSD license
** as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of The Qt Company Ltd nor the names of its
** contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
pragma Singleton
import QtQuick 2.8
QtObject {
readonly property color gray: "#b2b1b1"
readonly property color lightGray: "#dddddd"
readonly property color light: "#ffffff"
readonly property color blue: "#2d548b"
property color mainColor: "#17a81a"
readonly property color dark: "#222222"
readonly property color mainColorDarker: Qt.darker(mainColor, 1.5)
property int baseSize: 10
readonly property int smallSize: 10
readonly property int largeSize: 16
property font font
font.bold: true
font.underline: false
font.pixelSize: 14
font.family: "arial"
}

View File

@ -0,0 +1,2 @@
module Theme
singleton Theme 1.0 Theme.qml

View File

@ -0,0 +1,64 @@
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** 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.
**
** BSD License Usage
** Alternatively, you may use this file under the terms of the BSD license
** as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of The Qt Company Ltd nor the names of its
** contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include <QApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.addImportPath(":/imports");
engine.load(QUrl(QStringLiteral("qrc:/flatstyle.qml")));
return app.exec();
}

View File

@ -0,0 +1,2 @@
[Controls]
Style=Flat

View File

@ -5,4 +5,5 @@ SUBDIRS += \
texteditor \
contactlist \
sidepanel \
swipetoremove
swipetoremove \
flatstyle

View File

@ -2,6 +2,7 @@ QMAKE_DOCS = $$PWD/qtquickcontrols2.qdocconf
OTHER_FILES += \
$$files($$PWD/snippets/*.qml) \
$$files($$PWD/snippets/screenshots/*.qml) \
$$files($$PWD/src/*.qdoc) \
$$files($$PWD/src/calendar/*.qdoc) \
$$files($$PWD/src/templates/*.qdoc)

View File

@ -754,7 +754,7 @@ void QQuickDial::wheelEvent(QWheelEvent *event)
if (d->wheelEnabled) {
const qreal oldValue = d->value;
const QPointF angle = event->angleDelta();
const qreal delta = (qFuzzyIsNull(angle.y()) ? angle.x() : angle.y()) / QWheelEvent::DefaultDeltasPerStep;
const qreal delta = (qFuzzyIsNull(angle.y()) ? angle.x() : (event->inverted() ? -angle.y() : angle.y())) / QWheelEvent::DefaultDeltasPerStep;
const qreal step = qFuzzyIsNull(d->stepSize) ? 0.1 : d->stepSize;
setValue(oldValue + step * delta);
event->setAccepted(!qFuzzyCompare(d->value, oldValue));

View File

@ -461,8 +461,13 @@ void QQuickMenu::componentComplete()
void QQuickMenu::contentItemChange(QQuickItem *newItem, QQuickItem *oldItem)
{
Q_D(QQuickMenu);
Q_UNUSED(oldItem);
QQuickPopup::contentItemChange(newItem, oldItem);
if (oldItem)
QQuickItemPrivate::get(oldItem)->removeItemChangeListener(d, QQuickItemPrivate::Children);
if (newItem)
QQuickItemPrivate::get(newItem)->addItemChangeListener(d, QQuickItemPrivate::Children);
d->contentItem = newItem;
}

View File

@ -710,7 +710,7 @@ void QQuickSlider::wheelEvent(QWheelEvent *event)
if (d->wheelEnabled) {
const qreal oldValue = d->value;
const QPointF angle = event->angleDelta();
const qreal delta = (qFuzzyIsNull(angle.y()) ? angle.x() : angle.y()) / QWheelEvent::DefaultDeltasPerStep;
const qreal delta = (qFuzzyIsNull(angle.y()) ? angle.x() : (event->inverted() ? -angle.y() : angle.y())) / QWheelEvent::DefaultDeltasPerStep;
const qreal step = qFuzzyIsNull(d->stepSize) ? 0.1 : d->stepSize;
setValue(oldValue + step * delta);
const bool wasMoved = !qFuzzyCompare(d->value, oldValue);

View File

@ -0,0 +1,71 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of The Qt Company Ltd nor the names of its
** contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.6
import QtQuick.Controls 2.1
ApplicationWindow {
width: 200
height: 200
property alias menu: menu
Component {
id: menuItem
MenuItem { }
}
Menu {
id: menu
property alias repeater: repeater
MenuItem { text: "static_1" }
Repeater {
id: repeater
model: 2
MenuItem { text: "repeated_" + (index + 2) }
}
MenuItem { text: "static_4" }
Component.onCompleted: {
addItem(menuItem.createObject(menu.contentItem, {text: "dynamic_5"}))
addItem(menuItem.createObject(menu.contentItem, {text: "dynamic_6"}))
insertItem(0, menuItem.createObject(menu.contentItem, {text: "dynamic_0"}))
}
}
}

View File

@ -0,0 +1,59 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of The Qt Company Ltd nor the names of its
** contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.6
import QtQuick.Controls 2.1
ApplicationWindow {
width: 200
height: 200
property alias menu: menu
property alias repeater: repeater
Menu {
id: menu
Repeater {
id: repeater
model: 5
MenuItem { property int idx: index }
}
}
}

View File

@ -67,6 +67,8 @@ private slots:
void menuButton();
void addItem();
void menuSeparator();
void repeater();
void order();
};
void tst_menu::defaults()
@ -317,6 +319,71 @@ void tst_menu::menuSeparator()
QTRY_VERIFY(!menu->isVisible());
}
void tst_menu::repeater()
{
QQuickApplicationHelper helper(this, QLatin1String("repeater.qml"));
QQuickWindow *window = helper.window;
window->show();
QVERIFY(QTest::qWaitForWindowActive(window));
QQuickMenu *menu = window->property("menu").value<QQuickMenu*>();
QVERIFY(menu);
menu->open();
QVERIFY(menu->isVisible());
QObject *repeater = window->property("repeater").value<QObject*>();
QVERIFY(repeater);
int count = repeater->property("count").toInt();
QCOMPARE(count, 5);
for (int i = 0; i < count; ++i) {
QQuickItem *item = menu->itemAt(i);
QVERIFY(item);
QCOMPARE(item->property("idx").toInt(), i);
QQuickItem *repeaterItem = nullptr;
QVERIFY(QMetaObject::invokeMethod(repeater, "itemAt", Q_RETURN_ARG(QQuickItem*, repeaterItem), Q_ARG(int, i)));
QCOMPARE(item, repeaterItem);
}
repeater->setProperty("model", 3);
count = repeater->property("count").toInt();
QCOMPARE(count, 3);
for (int i = 0; i < count; ++i) {
QQuickItem *item = menu->itemAt(i);
QVERIFY(item);
QCOMPARE(item->property("idx").toInt(), i);
QQuickItem *repeaterItem = nullptr;
QVERIFY(QMetaObject::invokeMethod(repeater, "itemAt", Q_RETURN_ARG(QQuickItem*, repeaterItem), Q_ARG(int, i)));
QCOMPARE(item, repeaterItem);
}
}
void tst_menu::order()
{
QQuickApplicationHelper helper(this, QLatin1String("order.qml"));
QQuickWindow *window = helper.window;
window->show();
QVERIFY(QTest::qWaitForWindowActive(window));
QQuickMenu *menu = window->property("menu").value<QQuickMenu*>();
QVERIFY(menu);
menu->open();
QVERIFY(menu->isVisible());
const QStringList texts = {"dynamic_0", "static_1", "repeated_2", "repeated_3", "static_4", "dynamic_5", "dynamic_6"};
for (int i = 0; i < texts.count(); ++i) {
QQuickItem *item = menu->itemAt(i);
QVERIFY(item);
QCOMPARE(item->property("text").toString(), texts.at(i));
}
}
QTEST_MAIN(tst_menu)
#include "tst_menu.moc"