main.qml Example File

styles/main.qml

  /****************************************************************************
  **
  ** Copyright (C) 2016 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.2
  import QtQuick.Window 2.2
  import QtQuick.Layouts 1.1
  import QtQuick.Controls 1.2
  import QtQuick.Controls.Styles 1.2
  import QtQuick.Particles 2.0

  Window {
      id: window
      width: 640
      height: 480
      visible: true
      title: qsTr("Styles Example")

      property int columnFactor: 5

      GridLayout {
          rowSpacing: 12
          columnSpacing: 30
          anchors.top: parent.top
          anchors.horizontalCenter: parent.horizontalCenter
          anchors.margins: 30

          Button {
              text: "Button"
              implicitWidth: window.width / columnFactor
          }
          Button {
              text: "Button"
              style: ButtonStyle {
                  background: BorderImage {
                      source: control.pressed ? "images/button-pressed.png" : "images/button.png"
                      border.left: 4 ; border.right: 4 ; border.top: 4 ; border.bottom: 4
                  }
              }
              implicitWidth: window.width / columnFactor
          }
          Button {
              text: "Button"
              style: buttonStyle
              implicitWidth: window.width / columnFactor
          }

          TextField {
              Layout.row: 1
              implicitWidth: window.width / columnFactor
          }
          TextField {
              style: TextFieldStyle {
                  background: BorderImage {
                      source: "images/textfield.png"
                      border.left: 4 ; border.right: 4 ; border.top: 4 ; border.bottom: 4
                  }
              }
              implicitWidth: window.width / columnFactor
          }
          TextField {
              style: textFieldStyle
              implicitWidth: window.width / columnFactor
          }

          Slider {
              id: slider1
              Layout.row: 2
              value: 0.5
              implicitWidth: window.width / columnFactor
          }
          Slider {
              id: slider2
              value: 0.5
              implicitWidth: window.width / columnFactor
              style: SliderStyle {
                  groove: BorderImage {
                      height: 6
                      border.top: 1
                      border.bottom: 1
                      source: "images/progress-background.png"
                      border.left: 6
                      border.right: 6
                      BorderImage {
                          anchors.verticalCenter: parent.verticalCenter
                          source: "images/progress-fill.png"
                          border.left: 5 ; border.top: 1
                          border.right: 5 ; border.bottom: 1
                          width: styleData.handlePosition
                          height: parent.height
                      }
                  }
                  handle: Item {
                      width: 13
                      height: 13
                      Image {
                          anchors.centerIn: parent
                          source: "images/slider-handle.png"
                      }
                  }
              }
          }
          Slider {
              id: slider3
              value: 0.5
              implicitWidth: window.width / columnFactor
              style: sliderStyle
          }

          ProgressBar {
              Layout.row: 3
              value: slider1.value
              implicitWidth: window.width / columnFactor
          }
          ProgressBar {
              value: slider2.value
              implicitWidth: window.width / columnFactor
              style: progressBarStyle
          }
          ProgressBar {
              value: slider3.value
              implicitWidth: window.width / columnFactor
              style: progressBarStyle2
          }

          CheckBox {
              text: "CheckBox"
              Layout.row: 4
              implicitWidth: window.width / columnFactor
          }

          RadioButton {
              text: "RadioButton"
              implicitWidth: window.width / columnFactor
          }

          ComboBox {
              model: ["Paris", "Oslo", "New York"]
              implicitWidth: window.width / columnFactor
          }

          TabView {
              Layout.row: 5
              Layout.columnSpan: 3
              Layout.fillWidth: true
              implicitHeight: 30
              Tab { title: "One" ; Item {} }
              Tab { title: "Two" ; Item {} }
              Tab { title: "Three" ; Item {} }
              Tab { title: "Four" ; Item {} }
          }

          TabView {
              Layout.row: 6
              Layout.columnSpan: 3
              Layout.fillWidth: true
              implicitHeight: 30
              Tab { title: "One" ; Item {}}
              Tab { title: "Two" ; Item {}}
              Tab { title: "Three" ; Item {}}
              Tab { title: "Four" ; Item {}}
              style: tabViewStyle
          }
      }

      // Style delegates:

      Component {
          id: buttonStyle
          ButtonStyle {

              background: Rectangle {
                  implicitHeight: 22
                  implicitWidth: window.width / columnFactor
                  color: control.pressed ? "darkGray" : control.activeFocus ? "#cdd" : "#ccc"
                  antialiasing: true
                  border.color: "gray"
                  radius: height/2
                  Rectangle {
                      anchors.fill: parent
                      anchors.margins: 1
                      color: "transparent"
                      antialiasing: true
                      visible: !control.pressed
                      border.color: "#aaffffff"
                      radius: height/2
                  }
              }
          }
      }

      Component {
          id: textFieldStyle
          TextFieldStyle {
              background: Rectangle {
                  implicitWidth: window.width / columnFactor
                  color: "#f0f0f0"
                  antialiasing: true
                  border.color: "gray"
                  radius: height/2
                  Rectangle {
                      anchors.fill: parent
                      anchors.margins: 1
                      color: "transparent"
                      antialiasing: true
                      border.color: "#aaffffff"
                      radius: height/2
                  }
              }
          }
      }

      Component {
          id: sliderStyle
          SliderStyle {
              handle: Rectangle {
                  width: 18
                  height: 18
                  color: control.pressed ? "darkGray" : "lightGray"
                  border.color: "gray"
                  antialiasing: true
                  radius: height/2
                  Rectangle {
                      anchors.fill: parent
                      anchors.margins: 1
                      color: "transparent"
                      antialiasing: true
                      border.color: "#eee"
                      radius: height/2
                  }
              }

              groove: Rectangle {
                  height: 8
                  implicitWidth: window.width / columnFactor
                  implicitHeight: 22

                  antialiasing: true
                  color: "#ccc"
                  border.color: "#777"
                  radius: height/2
                  Rectangle {
                      anchors.fill: parent
                      anchors.margins: 1
                      color: "transparent"
                      antialiasing: true
                      border.color: "#66ffffff"
                      radius: height/2
                  }
              }
          }
      }

      Component {
          id: progressBarStyle
          ProgressBarStyle {
              background: BorderImage {
                  source: "images/progress-background.png"
                  border.left: 2 ; border.right: 2 ; border.top: 2 ; border.bottom: 2
              }
              progress: Item {
                  clip: true
                  BorderImage {
                      anchors.fill: parent
                      anchors.rightMargin: (control.value < control.maximumValue) ? -4 : 0
                      source: "images/progress-fill.png"
                      border.left: 10 ; border.right: 10
                      Rectangle {
                          width: 1
                          color: "#a70"
                          opacity: 0.8
                          anchors.top: parent.top
                          anchors.bottom: parent.bottom
                          anchors.bottomMargin: 1
                          anchors.right: parent.right
                          visible: control.value < control.maximumValue
                          anchors.rightMargin: -parent.anchors.rightMargin
                      }
                  }
                  ParticleSystem { id: bubbles; running: visible }
                  ImageParticle {
                      id: fireball
                      system: bubbles
                      source: "images/bubble.png"
                      opacity: 0.7
                  }
                  Emitter {
                      system: bubbles
                      anchors.bottom: parent.bottom
                      anchors.margins: 4
                      anchors.bottomMargin: -4
                      anchors.left: parent.left
                      anchors.right: parent.right
                      size: 4
                      sizeVariation: 4
                      acceleration: PointDirection { y: -6; xVariation: 3 }
                      emitRate: 6 * control.value
                      lifeSpan: 3000
                  }
              }
          }
      }

      Component {
          id: progressBarStyle2
          ProgressBarStyle {
              background: Rectangle {
                  implicitWidth: window.width / columnFactor
                  implicitHeight: 24
                  color: "#f0f0f0"
                  border.color: "gray"
              }
              progress: Rectangle {
                  color: "#ccc"
                  border.color: "gray"
                  Rectangle {
                      color: "transparent"
                      border.color: "#44ffffff"
                      anchors.fill: parent
                      anchors.margins: 1
                  }
              }
          }
      }

      Component {
          id: tabViewStyle
          TabViewStyle {
              tabOverlap: 16
              frameOverlap: 4
              tabsMovable: true

              frame: Rectangle {
                  gradient: Gradient {
                      GradientStop { color: "#e5e5e5" ; position: 0 }
                      GradientStop { color: "#e0e0e0" ; position: 1 }
                  }
                  border.color: "#898989"
                  Rectangle { anchors.fill: parent ; anchors.margins: 1 ; border.color: "white" ; color: "transparent" }
              }
              tab: Item {
                  property int totalOverlap: tabOverlap * (control.count - 1)
                  implicitWidth: Math.min ((styleData.availableWidth + totalOverlap)/control.count - 4, image.sourceSize.width)
                  implicitHeight: image.sourceSize.height
                  BorderImage {
                      id: image
                      anchors.fill: parent
                      source: styleData.selected ? "images/tab_selected.png" : "images/tab.png"
                      border.left: 30
                      smooth: false
                      border.right: 30
                  }
                  Text {
                      text: styleData.title
                      anchors.centerIn: parent
                  }
              }
              leftCorner: Item { implicitWidth: 12 }
          }
      }
  }