Ben,

Item is of class Item
itemList model is of class QList<Item*>

Item has the property tags which is of type QStringList
Each item has ItemManager, the holder of itemList model, as parent

On toggleTag I’m doing this:

void DRCPatch::toggleTag(QString tag)
{
    if (_tags.contains(tag))
        _tags.removeOne(tag);
    else
        _tags.append(tag);

    emit _manager->tagsChanged();
}

And in fact, the model is returned. I have confirmed that the model property 
has been called. However, ListView doesn’t update or re-layout if the items are 
exactly the same. 

If here I do _tags.append(“something”) it will update and behave as expected. 

QStringList ItemManager::tags()
{
    return _tags;
}

Any ideas on how to work around this?

Regards,

Nuno

> On 28 Sep 2015, at 10:54, Ben Lau <xben...@gmail.com> wrote:
> 
> How do you use the toggleTag? And what is the data type of element in 
> itemList.model?
> 
> 
> 
> On 28 September 2015 at 17:19, Nuno Santos <nunosan...@imaginando.pt 
> <mailto:nunosan...@imaginando.pt>> wrote:
> Hi,
> 
> I was trying to implement a tag cloud with a ListView but I'm facing some 
> unexpected problems. My idea was the following:
> 
> A ListView would have a model of tags, based on a QStringList. Other list 
> view would have items (custom model), each item would have associated tags. I 
> want to concentrate the tags in a single list in the UI. So, when you select 
> an item, it will display all the tags, and the ones which are present in that 
> item would get highlighted.
> 
> Every time I click a tag, it will toggle that tag for the respective item. 
> The problem is that for some reason, ListView seems to cache the data model 
> and thus it doesn’t get redrawn. Because the tags are the exactly the same. 
> What changed was item tags list. 
> 
> Is there anyway to bypass the model cache or force the ListView to redraw? I 
> can’t find any suitable method on ListView documentation.
> 
> I’m not finding an obvious solution for this problem and I believe that is a 
> simple solution for it. Any ideas?
> 
> ListView {
>       id: tagsList
>       model: tags
>       delegate: Rectangle {
>           color: "transparent"
>           border.color: "white"
>           border.width: 1
> 
>           Text {
>               id: tagLabel
>               color: "gray"
>               text: "#"+modelData
>               Component.onCompleted: {
>                   var tags = itemList.model[itemList.currentIndex].tags;
> 
>                   for (var i=0;i<tags.length;i++)
>                   {
>                       if (tags[i]==modelData)
>                           color = "white"
>                   }
>               }
>           }
> 
>           MouseArea {
>               anchors.fill: parent
>               onClicked: 
> itemList.model[itemList.currentIndex].toggleTag(modelData)
>           }
>       }
> }
> 
> Thanks in advance,
> 
> Regards,
> 
> Nuno
> 
> _______________________________________________
> Interest mailing list
> Interest@qt-project.org <mailto:Interest@qt-project.org>
> http://lists.qt-project.org/mailman/listinfo/interest 
> <http://lists.qt-project.org/mailman/listinfo/interest>
> 
> 

_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to