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. Modal Flickable List
Qt 6.11 is out! See what's new in the release blog

Modal Flickable List

Scheduled Pinned Locked Moved QML and Qt Quick
13 Posts 4 Posters 8.5k 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.
  • K Offline
    K Offline
    kyleplattner
    wrote on last edited by
    #1

    I am still relatively new to QML. What I am after is a modal list to appear after a button is pressed and the user is able flick through the list with drag gestures. How would I accomplish this in QML?

    Kyle

    1 Reply Last reply
    0
    • A Offline
      A Offline
      anselmolsm
      wrote on last edited by
      #2

      Put a ListView (which inherits Flickable) inside an Item that appears only when this button is clicked. Something like this:

      @
      import Qt 4.7

      Item {
      width: 360
      height: 360

      //Button
      Rectangle {
          width: 50
          height: 50
          color: "red"
          MouseArea {
              anchors.fill:  parent
              onClicked: {
                  list.visible = true;
              }
          }
      }
      
      // This List is a custom element
      List {
          id: list
          visible: false
          anchors.fill:  parent
      }
      

      }
      @

      Of course, it is just a pretty simple example. You have to add stuff to close the List element, etc.
      (Did I understand what you want to do?)

      Anselmo L. S. Melo (anselmolsm)

      1 Reply Last reply
      0
      • K Offline
        K Offline
        kyleplattner
        wrote on last edited by
        #3

        Where do I add the items in my list?

        1 Reply Last reply
        0
        • A Offline
          A Offline
          anselmolsm
          wrote on last edited by
          #4

          kyleplattner, for more details, check "this example":http://doc.qt.nokia.com/4.7/qml-listview.html#example-usage .

          Anselmo L. S. Melo (anselmolsm)

          1 Reply Last reply
          0
          • K Offline
            K Offline
            kyleplattner
            wrote on last edited by
            #5

            I followed the example exactly and the text will not show up.

            1 Reply Last reply
            0
            • K Offline
              K Offline
              kyleplattner
              wrote on last edited by
              #6

              Here is code I am using:

              @ Rectangle {
              id: rectangle2
              x: 155
              y: 117
              width: 248
              height: 336
              radius: 22
              border.width: 1
              smooth: true
              border.color: "#000000"
              gradient: Gradient {
              GradientStop {
              position: 0
              color: "#5e5e5e"
              }

                      GradientStop {
                          position: 1
                          color: "#444444"
                      }
                  }
              
                  ListView {
                      id: list_view1
                      x: 155
                      y: 117
                      width: 250
                      height: 338
                      model: ListModel {}
                          delegate: Text {
                              text: name + ": " + number
                          }
              
                  }
              }@
              
              1 Reply Last reply
              0
              • B Offline
                B Offline
                baysmith
                wrote on last edited by
                #7

                Here is a complete example. Is something like this what you are looking for?

                @

                import Qt 4.7

                Item {
                width: 360
                height: 360

                Rectangle {
                    id: button
                    width: buttonText.width + 10
                    height: buttonText.height + 10
                    radius: 3
                    border.width: 1
                    smooth: true
                    border.color: "#000000"
                    gradient: Gradient {
                        GradientStop {
                            position: 0
                            color: "#5e5e5e"
                        }
                        GradientStop {
                            position: 1
                            color: "#444444"
                        }
                    }
                    Text {
                        x: 5
                        y: 5
                        id: buttonText
                        text: "Press here"
                        color: "#ffffff"
                    }
                    MouseArea {
                        anchors.fill:  parent
                        onClicked: {
                            list.visible = !list.visible
                        }
                    }
                }
                
                ListView {
                    id: list
                    visible: false
                    anchors.top:  button.bottom
                    anchors.bottom:  parent.bottom
                    anchors.right:  parent.right
                    anchors.left:  parent.left
                    model: ListModel {
                        ListElement {
                            name: "Bill Smith"
                            number: "555 3264"
                        }
                        ListElement {
                            name: "John Brown"
                            number: "555 8426"
                        }
                        ListElement {
                            name: "Sam Wise"
                            number: "555 0473"
                        }
                    }
                    delegate: Text {
                        text: name + ": " + number
                    }
                }
                

                }
                @

                Nokia Certified Qt Specialist.

                1 Reply Last reply
                0
                • K Offline
                  K Offline
                  kyleplattner
                  wrote on last edited by
                  #8

                  Great, that gets the list to show up but what about scrolling with a flick gesture?

                  1 Reply Last reply
                  0
                  • B Offline
                    B Offline
                    baysmith
                    wrote on last edited by
                    #9

                    Sorry. Forgot to anchor the width. Updated. Try it now.

                    Nokia Certified Qt Specialist.

                    1 Reply Last reply
                    0
                    • K Offline
                      K Offline
                      kyleplattner
                      wrote on last edited by
                      #10

                      So I implemented a list with a highlight but how can I set it up so that my highlight moves with mouse clicks (screen taps)?

                      1 Reply Last reply
                      0
                      • B Offline
                        B Offline
                        baysmith
                        wrote on last edited by
                        #11

                        I would add something like this to the ListView

                        @

                            highlight: Rectangle {
                                width: list.currentItem.width
                                color: "lightsteelblue"
                                radius: 5
                            }
                            focus: true
                            MouseArea {
                                anchors.fill: parent
                                onClicked: {
                                    list.currentIndex = list.indexAt(mouseX, mouseY)
                                }
                            }
                        

                        @

                        Nokia Certified Qt Specialist.

                        1 Reply Last reply
                        0
                        • K Offline
                          K Offline
                          kyleplattner
                          wrote on last edited by
                          #12

                          Thanks so much, that does it.

                          1 Reply Last reply
                          0
                          • H Offline
                            H Offline
                            hyperborean72
                            wrote on last edited by
                            #13

                            Hello,
                            I have a problem with that snippet.
                            When I click on the list within its initial view, it performs fine: the highlight runs to the item currently clicked. But when I scroll that flickable ListView, and my visible area starts for instance with 'index=3' item, this line:

                            list.currentIndex = list.indexAt(mouseX, mouseY)

                            still seems to calculate currentIndex as index at initial view when the visible area starts with 'index=1' item.
                            So the larger list and the scrolling distance, the further the highlight from the actual item it should be below.

                            Did I misunderstand your idea?
                            Please help.

                            1 Reply Last reply
                            0

                            • Login

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