Hi,

My QML `ListView` doesn't show my data until I perturb it with the mouse (e.g. 
just drag it up and down.)  After this the view shows the model without issue.  
Is there way to kick this `ListView` into working?

I'm using Qt 5.8 on Linux 14.04.  My model is a subclass of 
`QAbstractListModel`.  I build it by following the 
AbstractItemModel<http://doc.qt.io/qt-5/qtquick-models-abstractitemmodel-example.html>.
  The main difference is that my list model is a property of an entity, rather 
than being set with `setContextProperty` in `main.cpp`.

There are a few similar issues on SO, and the Qt forums, about the `ListView`s 
not updating, but none seem to only have an issue at the start.  Most of them 
relate to the OP calling `dataChanged` manually instead of `beforeInsertRows()` 
& `endInsertRows()` - both methods I'm calling (see below.)

My `ListView` is in an item loaded with a `SceneLoader`.

I posted all the relevant code 
here<https://gist.github.com/kheaactua/13e3943e10a25f3df295148b1d2f1f86>, 
because I'm a little suspicious of how I use the Layouts on my `ListView` 
(maybe that's causing it?  Maybe my hierarchy is broken?  I haven't been able 
to prove that though.)

The most important parts though (code is formatted in the SO style)

ListView:

    ListView {
        anchors.fill: parent
        model: sceneGraph.blobs
        delegate: delegate
    }


BlobModel.cpp:

    auto BlobModel::addBlob(const BlobPointDataPtr& data) -> void
    {
        // ...

        // Each blob has a uuid

        const auto idx = Contains(uuid);
        if (-1 != idx)
        {
            blobs_[idx]->Update(data);
            Q_EMIT dataChanged(createIndex(idx, 0), createIndex(idx, 0));
        }
        else
        {
            beginInsertRows(QModelIndex(), rowCount(), rowCount());
            blobs_ << new Blob{data, id_count_}; id_count_++;
            endInsertRows(); // responsible for the QQmlChangeSet

            Q_EMIT dataChanged(createIndex(rowCount(), 0), 
createIndex(rowCount(), 0));
        }
    }

Also, on my terminal, I receive the message:

    QObject::connect: Cannot queue arguments of type 'QQmlChangeSet'
    (Make sure 'QQmlChangeSet' is registered using qRegisterMetaType().)

This seems to be emitted by `endInsertRows()`, but I'm not sure why.  In the 
past the solution has been to register the missing type, e.g. 
`qRegisterMetaType<QQmlChangeSet*>("QQmlChangeSet");` but this seems not to be 
a public type with Qt, and because everything mostly works without it, I'm not 
sure missing that is the exact issue.

(I also cross-posted this question on SO at 
http://stackoverflow.com/questions/43620606/listview-not-initially-showing-data 
, just so the code would show better than in an email.)

Thanks for any help,
_______________________________________________
Interest mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to