diff options
Diffstat (limited to 'src/quick/items')
-rw-r--r-- | src/quick/items/qquickrepeater.cpp | 10 | ||||
-rw-r--r-- | src/quick/items/qquickrepeater_p_p.h | 2 |
2 files changed, 11 insertions, 1 deletions
diff --git a/src/quick/items/qquickrepeater.cpp b/src/quick/items/qquickrepeater.cpp index d26ebed85e..1f7578c583 100644 --- a/src/quick/items/qquickrepeater.cpp +++ b/src/quick/items/qquickrepeater.cpp @@ -51,7 +51,7 @@ QT_BEGIN_NAMESPACE QQuickRepeaterPrivate::QQuickRepeaterPrivate() - : model(0), ownModel(false), inRequest(false), itemCount(0), createFrom(-1) + : model(0), ownModel(false), inRequest(false), dataSourceIsObject(false), itemCount(0), createFrom(-1) { } @@ -175,6 +175,12 @@ QQuickRepeater::~QQuickRepeater() QVariant QQuickRepeater::model() const { Q_D(const QQuickRepeater); + + if (d->dataSourceIsObject) { + QObject *o = d->dataSourceAsObject; + return QVariant::fromValue(o); + } + return d->dataSource; } @@ -194,6 +200,8 @@ void QQuickRepeater::setModel(const QVariant &model) } d->dataSource = model; QObject *object = qvariant_cast<QObject*>(model); + d->dataSourceAsObject = object; + d->dataSourceIsObject = object != 0; QQuickVisualModel *vim = 0; if (object && (vim = qobject_cast<QQuickVisualModel *>(object))) { if (d->ownModel) { diff --git a/src/quick/items/qquickrepeater_p_p.h b/src/quick/items/qquickrepeater_p_p.h index 88e0c94218..41d77ad977 100644 --- a/src/quick/items/qquickrepeater_p_p.h +++ b/src/quick/items/qquickrepeater_p_p.h @@ -75,8 +75,10 @@ private: QQuickVisualModel *model; QVariant dataSource; + QQmlGuard<QObject> dataSourceAsObject; bool ownModel : 1; bool inRequest : 1; + bool dataSourceIsObject : 1; int itemCount; int createFrom; |