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. variable items in ListView delegates
Qt 6.11 is out! See what's new in the release blog

variable items in ListView delegates

Scheduled Pinned Locked Moved Solved QML and Qt Quick
3 Posts 2 Posters 578 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.
  • mzimmersM Offline
    mzimmersM Offline
    mzimmers
    wrote on last edited by
    #1

    Hi all -

    I'm trying to code a page with a ListView that (partiallly) uses a ListModel for the data. I know the values in the ListElements must be simple constants, so I can't use my ListModel for this. How would it be done?

    Here's what I have so far:

    ListModel {
        id: adminModel
        ListElement { rowIcon: "qrc:/icons/Display.svg"; rowText: "About" }
        ListElement { rowIcon: "qrc:/icons/LockKey.svg"; rowText: "Lockouts" }
        ListElement { rowIcon: "qrc:/icons/ProfileAdmin.svg"; rowText: "Backup & Restore" }
    }
    
    ListView {
        model: adminModel
        delegate: ExpandingPane {
            lineIcon: rowIcon
            lineText: rowText
            extraItems: Loader { sourceComponent: resetRowDetails } // how to change this for each element?
        }
    }
    
    Component {
        id: resetRowDetails
        ...
    

    How can I make my extraItems different for each list element?

    Thanks...

    B 1 Reply Last reply
    0
    • mzimmersM mzimmers

      Hi all -

      I'm trying to code a page with a ListView that (partiallly) uses a ListModel for the data. I know the values in the ListElements must be simple constants, so I can't use my ListModel for this. How would it be done?

      Here's what I have so far:

      ListModel {
          id: adminModel
          ListElement { rowIcon: "qrc:/icons/Display.svg"; rowText: "About" }
          ListElement { rowIcon: "qrc:/icons/LockKey.svg"; rowText: "Lockouts" }
          ListElement { rowIcon: "qrc:/icons/ProfileAdmin.svg"; rowText: "Backup & Restore" }
      }
      
      ListView {
          model: adminModel
          delegate: ExpandingPane {
              lineIcon: rowIcon
              lineText: rowText
              extraItems: Loader { sourceComponent: resetRowDetails } // how to change this for each element?
          }
      }
      
      Component {
          id: resetRowDetails
          ...
      

      How can I make my extraItems different for each list element?

      Thanks...

      B Offline
      B Offline
      Bob64
      wrote on last edited by
      #2

      @mzimmers are you saying you want to use a difference component depending on your model item? In that case you can have some field in your model to tag the different types and use a switch in your Loader. Something like this:

      Component {
          id: delegateA
          A { ...}
      }
      
      Component {
          id: delegateB
          B { ...}
      }
      
      Loader {
          ...
          sourceComponent: {
              switch (delegate_type) {
              case "A": return delegateA
              case "B": return delegateB
              ...
      }
      
      mzimmersM 1 Reply Last reply
      1
      • B Bob64

        @mzimmers are you saying you want to use a difference component depending on your model item? In that case you can have some field in your model to tag the different types and use a switch in your Loader. Something like this:

        Component {
            id: delegateA
            A { ...}
        }
        
        Component {
            id: delegateB
            B { ...}
        }
        
        Loader {
            ...
            sourceComponent: {
                switch (delegate_type) {
                case "A": return delegateA
                case "B": return delegateB
                ...
        }
        
        mzimmersM Offline
        mzimmersM Offline
        mzimmers
        wrote on last edited by mzimmers
        #3

        @Bob64 nice. I didn't know that QML had a switch statement. Thanks!

        ListModel {
            id: adminModel
            ListElement { rowName: "about"; rowIcon: "qrc:/icons/Display.svg"; rowText: "About" }
            ListElement { rowName: "lockouts"; rowIcon: "qrc:/icons/LockKey.svg"; rowText: "Lockouts" }
            ListElement { rowName: "backup"; rowIcon: "qrc:/icons/ProfileAdmin.svg"; rowText: "Backup & Restore" }
            ListElement { rowName: "reboot"; rowIcon: "qrc:/icons/ShieldStar.svg"; rowText: "Soft Reboot" }
            ListElement { rowName: "reset"; rowIcon: "qrc:/icons/DateTime.svg"; rowText: "Factory Reset" }
        }
        
        ListView {
            model: adminModel
            delegate: ExpandingRow {
                lineIcon: rowIcon
                lineText: rowText
                extraItems: Loader { sourceComponent:
                        switch (rowName) {
                        case "reset": resetRowDetails; break;
                        }
                }
            }
        
        1 Reply Last reply
        0
        • mzimmersM mzimmers has marked this topic as solved on

        • Login

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