Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. QtQuick.Controls vs QtQuick.Templates for Slider
Forum Updated to NodeBB v4.3 + New Features

QtQuick.Controls vs QtQuick.Templates for Slider

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
2 Posts 2 Posters 469 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    markugra
    wrote on last edited by
    #1

    Hi there,

    I am customizing a number of controls for my application and so far I followed the example using the QtQuick.Templates, mostly to derive from the AbstractButton template. I tried to do the same for Slider now and noticed that the availableHeight (readonly) is 0 when deriving from the Templates whereas it has a positive value when deriving from Controls. To be clear I am just using the example code that is provided by the documentation for customizing Sliders (see below). In the documentation I cannot find a difference between the usage for the two modules, am I missing something? Not that it is crucial, since I can just derive from Controls, but I thought it is better "Style" to derive from the Templates.

    Here's the code:

    import QtQuick 2.6
    import QtQuick.Controls 2.1
    import QtQuick.Templates 2.1 as T
    
    T.Slider {
        id: control
        value: 0.5
    
        background: Rectangle {
            x: control.leftPadding
            y: control.topPadding + control.availableHeight / 2 - height / 2
            implicitWidth: 200
            implicitHeight: 4
            width: control.availableWidth
            height: implicitHeight
            radius: 2
            color: "#bdbebf"
    
            Rectangle {
                width: control.visualPosition * parent.width
                height: parent.height
                color: "#21be2b"
                radius: 2
            }
        }
    
        handle: Rectangle {
            x: control.leftPadding + control.visualPosition * (control.availableWidth - width)
            y: control.topPadding + control.availableHeight / 2 - height / 2
            implicitWidth: 26
            implicitHeight: 26
            radius: 13
            color: control.pressed ? "#f0f0f0" : "#f6f6f6"
            border.color: "#bdbebf"
        }
        Component.onCompleted: {
            console.log("available H/W: "+control.availableHeight+"  "+control.availableWidth)
            console.log("implicit H/W: "+control.implicitHeight+"  "+control.implicitWidth)
        }
    }
    

    That prints:
    qml: available H/W: 0 404
    qml: implicit H/W: 0 0
    qml: available H/W: 0 404
    qml: implicit H/W: 0 0
    for T.Slider{...}

    and

    qml: available H/W: 26 404
    qml: implicit H/W: 41 200
    qml: available H/W: 26 404
    qml: implicit H/W: 41 200
    for Slider{...}

    1 Reply Last reply
    0
    • jpnurmiJ Offline
      jpnurmiJ Offline
      jpnurmi
      wrote on last edited by
      #2

      When you implement a template, you need to specify how the implicit size is calculated. For example, the ready-made styles calculate it like this:

      implicitWidth: Math.max(background ? background.implicitWidth : 0,
                             (handle ? handle.implicitWidth : 0) + leftPadding + rightPadding)
      implicitHeight: Math.max(background ? background.implicitHeight : 0,
                              (handle ? handle.implicitHeight : 0) + topPadding + bottomPadding)
      

      Unless you are implementing a general purpose style that anyone can take and customize, you can probably simplify that a lot. You can, for example, assume that the background and handle items always exist because you define then right below. Furthermore, it's up to you to decide whether you want to support paddings.

      1 Reply Last reply
      1

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved