diff options
author | Stephen Kelly <stephen.kelly@kdab.com> | 2013-04-05 13:26:35 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-05-08 06:02:53 +0200 |
commit | 620f788f8690b10ef101f883d4cdacd2a277f948 (patch) | |
tree | 0fa8f9a6ff732fbba307837f3fb27045677a97a2 /src/corelib/kernel/qvariant.h | |
parent | 01fb843af88d949cd38b494a60bb64b730a045d2 (diff) |
Add QVariantList extraction from a QVariant with a sequential container.
Change-Id: Id9fac7bf47ed3fbb385222b25941215ac24b8b88
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
Diffstat (limited to 'src/corelib/kernel/qvariant.h')
-rw-r--r-- | src/corelib/kernel/qvariant.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/corelib/kernel/qvariant.h b/src/corelib/kernel/qvariant.h index 97fb8089a4..5588cdb27c 100644 --- a/src/corelib/kernel/qvariant.h +++ b/src/corelib/kernel/qvariant.h @@ -674,6 +674,22 @@ namespace QtPrivate { return QSequentialIterable(v.value<QtMetaTypePrivate::QSequentialIterableImpl>()); } }; + template<> + struct QVariantValueHelperInterface<QVariantList> + { + static QVariantList invoke(const QVariant &v) + { + if (v.userType() == qMetaTypeId<QStringList>() || QMetaType::hasRegisteredConverterFunction(v.userType(), qMetaTypeId<QtMetaTypePrivate::QSequentialIterableImpl>())) { + QSequentialIterable iter = QVariantValueHelperInterface<QSequentialIterable>::invoke(v); + QVariantList l; + l.reserve(iter.size()); + for (QSequentialIterable::const_iterator it = iter.begin(), end = iter.end(); it != end; ++it) + l << *it; + return l; + } + return QVariantValueHelper<QVariantList>::invoke(v); + } + }; } template<typename T> inline T qvariant_cast(const QVariant &v) |