Forums

OverviewFelgo 2 Support (Qt 5) › Edit json property in JsonListModel

Viewing 3 posts - 1 through 3 (of 3 total)
  • Author
    Posts
  • #23470

    Edward

    Hey Guys!
    I’m currently trying to adjust a value of some data in my JsonModel from true/false, the information isn’t downloaded from a webserver or anything, it’s hardcoded into my application, what i’m trying to do is create a drop-down list using, the JsonListModel;

    I have tried working with the jsonModel.set() or jsonModel.setPropertys() – neither error, and both log the corrent change, but dont update the entry, i’m not looking at adding a new property – simply changing a Boolean within; working with a previous ‘dropdown’ list tutorial I have so far:

    What I am looking to do, is change the ‘jsonData’ property from true/false when I send the signal (when I console.log my current signal, It is ‘flicking the switch’ so to speak, but not updating my JSON – how could I go about this?

    I further want the ‘height’ property to naturally be adjusted dependant on the ‘content’ of the row, is there a way I can access ‘contentHeight’ of my simpleRow delegate?
    Code below!

    Thanks!

    Page {
        id: faqPage
        property bool expanded: false
        property var currIndex
        JsonListModel {
            id: jsonModel
            source: faqPage.jsonData
            keyField: "id"
            fields: ["id", "title", "content", "avisible"]
        }
        SortFilterProxyModel {
        id: sortedModel
        Component.onCompleted: sourceModel = jsonModel
        sorters: StringSorter { id: typeSorter; roleName:              "title"; ascendingOrder: true }
    }
        AppListView {
        id: listView
        anchors.fill: parent
        property string expandedSection: ""
        model: sortedModel
        delegate: SimpleRow {
            id: rowDelegate
            visible: model.avisible
            onVisibleChanged: {
            if(visible){
                (listView.currentIndex = currIndex) ===   currIndex
                 height = dp(350)
             }else
                 height = 0
         }
    }
            section.property: "title"
            section.delegate: SimpleSection {
                id: sectionHeadRect
                property bool isExpanded: false
                property string currentExpandedSection:               ListView.view.expandedSection
                onCurrentExpandedSectionChanged: {
                    if(currentExpandedSection === section) {
                        isExpanded = true
                    } else {
                        isExpanded = false
                 }
             }
              onIsExpandedChanged: {
                  if(isExpanded){
                      expanded = true
                      ListView.view.expandedSection = section;
                  } else
                      expanded = false
                      for(var i=0; i<jsonModel.count; i++){
                          var animal = jsonModel.get(i);
                          if(title === animal.title)
                              animal.aVisible = sectionHeadRect.isExpanded;
                          }
                     }
                     onSelected: {
                        currIndex = jsonModel.indexOf("title",  title)
                        sectionHeadRect.isExpanded = ! sectionHeadRect.isExpanded;
                    }
                    enabled: true
                }
           }
            property var jsonData: [
                {
    "id": 1,
    "title": "title 1",
    "content": "cont1",
    "avisible": false
    },
    {
    "id": 2,
    "title": "title2",
    "content": "cont2",
    "avisible": false
    },
    {
    "id": 3,
    "title": "title3",
    "content": "cont3",
    "avisible": false
    }
    ]
    }

     

    #23472

    jrrobles79
    #23475

    Edward

    Hey!

     

    Yeah I’ve figured it out – I was being foolish with where I was trying to adjust data, so when my ‘section’ is selected I simply;

    onSelected: {
                   currIndex = jsonModel.indexOf("title", title)
                   jsonData[currIndex].avisible === true ? jsonData[currIndex].avisible = false : jsonData[currIndex].avisible = true
    
                   sectionHeadRect.isExpanded = !sectionHeadRect.isExpanded;
               }

    and it works as intended!

     

    Now I simple need to make the height of each listView.delegate dynamic depending on the length of the content……

Viewing 3 posts - 1 through 3 (of 3 total)

RSS feed for this thread

You must be logged in to reply to this topic.

Voted #1 for:

  • Easiest to learn
  • Most time saving
  • Best support

Develop Cross-Platform Apps and Games 50% Faster!

  • Voted the best supported, most time-saving and easiest to learn cross-platform development tool
  • Based on the Qt framework, with native performance and appearance on all platforms including iOS and Android
  • Offers a variety of plugins to monetize, analyze and engage users
FREE!
create apps
create games
cross platform
native performance
3rd party services
game network
multiplayer
level editor
easiest to learn
biggest time saving
best support