diff options
Diffstat (limited to 'src/corelib/kernel/qvariant.cpp')
-rw-r--r-- | src/corelib/kernel/qvariant.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp index c28476af17..104a7263b4 100644 --- a/src/corelib/kernel/qvariant.cpp +++ b/src/corelib/kernel/qvariant.cpp @@ -1715,10 +1715,11 @@ QVariant::QVariant(const QVariant &p) { if (d.is_shared) { d.data.shared->ref.ref(); - } else if (d.type().isValid()) { - customConstruct(&d, p.constData()); - d.is_null = p.d.is_null; + return; } + QMetaType t = d.type(); + if (t.isValid()) + t.construct(&d, p.constData()); } #ifndef QT_NO_DATASTREAM @@ -2200,8 +2201,9 @@ QVariant& QVariant::operator=(const QVariant &variant) d = variant.d; } else { d = variant.d; - customConstruct(&d, reinterpret_cast<const void *>(&variant.d.data)); - d.is_null = variant.d.is_null; + QMetaType t = d.type(); + if (t.isValid()) + t.construct(&d, variant.constData()); } return *this; |