diff options
Diffstat (limited to 'src/remoteobjects/qremoteobjectsource.cpp')
-rw-r--r-- | src/remoteobjects/qremoteobjectsource.cpp | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/remoteobjects/qremoteobjectsource.cpp b/src/remoteobjects/qremoteobjectsource.cpp index 36bee20..5cbc195 100644 --- a/src/remoteobjects/qremoteobjectsource.cpp +++ b/src/remoteobjects/qremoteobjectsource.cpp @@ -137,9 +137,10 @@ QRemoteObjectSourceBase::QRemoteObjectSourceBase(QObject *obj, Private *d, const QRemoteObjectSource::QRemoteObjectSource(QObject *obj, Private *d, const SourceApiMap *api, QObject *adapter) : QRemoteObjectSourceBase(obj, d, api, adapter) - , m_name(adapter ? MODEL().arg(api->name()) : CLASS().arg(api->name())) + , m_name(api->typeName() == QLatin1String("QAbstractItemModelAdapter") ? MODEL().arg(api->name()) : CLASS().arg(api->name())) { - d->m_sourceIo->registerSource(this); + if (obj) + d->m_sourceIo->registerSource(this); } QRemoteObjectRootSource::QRemoteObjectRootSource(QObject *obj, const SourceApiMap *api, @@ -182,11 +183,21 @@ void QRemoteObjectSourceBase::setConnections() void QRemoteObjectSourceBase::resetObject(QObject *newObject) { - QObject::disconnect(m_object, 0, this, 0); - if (m_adapter) - QObject::disconnect(m_adapter, 0, this, 0); + if (m_object) + m_object->disconnect(this); + if (m_adapter) { + m_adapter->disconnect(this); + delete m_adapter; + m_adapter = nullptr; + } m_object = newObject; + auto model = qobject_cast<QAbstractItemModel *>(newObject); + if (model) { + d->m_sourceIo->registerSource(this); + m_adapter = new QAbstractItemModelSourceAdapter(model, nullptr, model->roleNames().keys().toVector()); + } + setParent(newObject); if (newObject) setConnections(); |