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 2 ComboBox Customization
Forum Update on Monday, May 27th 2025

QtQuick Controls 2 ComboBox Customization

Scheduled Pinned Locked Moved Solved QML and Qt Quick
qtquickcomboboxcustomizeqml
4 Posts 2 Posters 9.7k Views
  • 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.
  • J Offline
    J Offline
    JLimbocker
    wrote on 15 Jul 2016, 21:51 last edited by
    #1

    Hello,

    I am attempting to create a ComboBox with a custom look and feel. I have successfully changed the Background, Indicator, ContentItem, and Background; however, I have not been able to change the look of the drop-down menu. I have attempted to use the popup object, but have not been able to get the ListModel content to work. The examples shown here conveniently leave the popup out. My ComboBox code is shown below:

    ComboBox {
      id: groupSelect
      y: 3
      width: 85
      height: 33
      model: groupList
      anchors.verticalCenter: parent.verticalCenter
      anchors.right: parent.right
      anchors.rightMargin: 6
      anchors.left: btnGroup.right
      anchors.leftMargin: 6
      contentItem: Text {
        color : "#ffffff"
        text: groupSelect.displayText
        font.family: "Arial";
        font.pixelSize: 16;
        verticalAlignment: Text.AlignVCenter;
        horizontalAlignment: Text.AlignLeft;
      }
      background: Rectangle{ 
        gradient: Gradient { 
          GradientStop { position: 0.0; color: "#69697C" } 
          GradientStop { position: 1.0; color: "#424251" }
        } 
      }
      indicator: Rectangle { }
      delegate: ItemDelegate {
        width: groupSelect.width
        height: groupSelect.height
        text: modelData
        highlighted: groupSelect.highlightedIndex == index
      }
      popup: Popup {
        id: groupPopup
        y: parent.height
        width: parent.width
        height: parent.height*parent.count
        contentHeight: height
        contentWidth: width
        contentItem: ListView {
          anchors.fill:groupPopup
          model: groupList
          boundsBehavior: Flickable.StopAtBounds
          highlight: Rectangle {
            color: "#69697C"
          }
          spacing: 6
          highlightFollowsCurrentItem: true
          delegate: Text {
            height: parent.height/parent.count
            text: key
            color: "#ffffff"
            anchors.horizontalCenter: parent.horizontalCenter
            anchors.verticalCenter: parent.verticalCenter
          }
        }
        background: Rectangle { color: "#424251" }
      }
      textRole: "key"
      ListModel  {
        id: groupList
        ListElement { key: "Group 1"; }
        ListElement { key: "Group 2"; }
        ListElement { key: "Group 3"; }
      }
    }
    

    The end goal is to have a ComboBox dropdown that has a dark grey background, is editable, and highlights the hovered list item. The combobox should not have an indicator arrow.

    Thank you for your help. Let me know what else I can provide.

    1 Reply Last reply
    0
    • J Offline
      J Offline
      jpnurmi
      wrote on 16 Jul 2016, 09:05 last edited by
      #2

      Hi. I can't run and test your code until next week, but meanwhile, you could check the built-in styles to see if you can notice something:

      • http://code.qt.io/cgit/qt/qtquickcontrols2.git/tree/src/imports/controls/ComboBox.qml
      • http://code.qt.io/cgit/qt/qtquickcontrols2.git/tree/src/imports/controls/material/ComboBox.qml
      • http://code.qt.io/cgit/qt/qtquickcontrols2.git/tree/src/imports/controls/universal/ComboBox.qml

      The examples shown here conveniently leave the popup out.

      Hmm, there used to be a snippet extracted straight from the default ComboBox implementation. Even the QDoc markers are still there. :) Unfortunately, looks like the popup part went missing when we revised the customization docs to include standalone copy-pasteable snippets. Thanks for bringing this up, we'll include a customized popup to the docs.

      J 1 Reply Last reply 18 Jul 2016, 17:05
      0
      • J jpnurmi
        16 Jul 2016, 09:05

        Hi. I can't run and test your code until next week, but meanwhile, you could check the built-in styles to see if you can notice something:

        • http://code.qt.io/cgit/qt/qtquickcontrols2.git/tree/src/imports/controls/ComboBox.qml
        • http://code.qt.io/cgit/qt/qtquickcontrols2.git/tree/src/imports/controls/material/ComboBox.qml
        • http://code.qt.io/cgit/qt/qtquickcontrols2.git/tree/src/imports/controls/universal/ComboBox.qml

        The examples shown here conveniently leave the popup out.

        Hmm, there used to be a snippet extracted straight from the default ComboBox implementation. Even the QDoc markers are still there. :) Unfortunately, looks like the popup part went missing when we revised the customization docs to include standalone copy-pasteable snippets. Thanks for bringing this up, we'll include a customized popup to the docs.

        J Offline
        J Offline
        JLimbocker
        wrote on 18 Jul 2016, 17:05 last edited by
        #3

        @jpnurmi

        Thank you for the links, I've just about figured it out using those. I'll post my code to this thread when I get it working.

        Good to know it was in the plans to have that example in there - I was worried it was supposed to be obvious and I was just missing something!

        JL

        1 Reply Last reply
        0
        • J Offline
          J Offline
          JLimbocker
          wrote on 18 Jul 2016, 18:01 last edited by
          #4

          I've worked it out. Here's my code for the ComboBox. It has the following behavior:

          • Currently selected value is highlighted
          • When "Enter" Pressed: ComboBox Closes/loses focus
          • No indicator
          • button has custom background

          Code is below:

          ComboBox {
            id: groupSelect
            y: 3
            width: 85
            height: 33
            model: groupList
            anchors.verticalCenter: parent.verticalCenter
            anchors.right: parent.right
            anchors.rightMargin: 6
            anchors.left: btnGroup.right
            anchors.leftMargin: 6
          
            Keys.onPressed:
            {
                if(event.key == Qt.Key_Enter || event.key == Qt.Key_Return)
                {
                    groupSelect.focus = false
                }
            }
            contentItem: Text {
                color : "#ffffff"
                text: parent.displayText
                font.family: "Arial";
                font.pixelSize: 16;
                verticalAlignment: Text.AlignVCenter;
                horizontalAlignment: Text.AlignLeft;
            }
            background: Rectangle{
                gradient: Gradient {
                    GradientStop {
                        position: 0.0;
                        color: "#69697C"
                    }
                    GradientStop { position: 1.0;
                        color: "#424251"
                    }
                }
            }
            indicator: Rectangle { }
            delegate: ItemDelegate {
                width: groupSelect.width
                contentItem: Text {
                    text:modelData;
                    horizontalAlignment: Text.AlignHCenter
                    verticalAlignment: Text.AlignVCenter
                    font.family: "Arial";
                    font.pixelSize: 16;
                    color: "#ffffff"
                }
                onClicked:
                {
                    groupSelect.currentIndex = index
                    listview.currentIndex = index
                }
            }
            popup: Popup {
                id: groupPopup
                width: parent.width
                height: parent.height*parent.count
                implicitHeight: listview.contentHeight
                margins: 0
                background: Rectangle { color: "#424251" }
                contentItem: ListView {
                    id: listview
                    anchors.fill: parent
                    model: groupSelect.model
                    boundsBehavior: Flickable.StopAtBounds
                    highlight: Rectangle { color: "#69697C" }
                    spacing: 0
                    highlightFollowsCurrentItem: true
                    currentIndex: groupSelect.highlightedIndex
                    delegate: groupSelect.delegate
                }
            }
            textRole: "key"
            ListModel
            {
                id: groupList
                ListElement { key: "Group 1"; }
                ListElement { key: "Group 2"; }
                ListElement { key: "Group 3"; }
            }
          }
          
          
          1 Reply Last reply
          0

          2/4

          16 Jul 2016, 09:05

          • Login

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