diff options
author | Fabian Kosmale <fabian.kosmale@qt.io> | 2020-08-31 16:42:36 +0200 |
---|---|---|
committer | Fabian Kosmale <fabian.kosmale@qt.io> | 2020-09-02 22:50:50 +0200 |
commit | 19874d6a6386b55fe502e3a36a9adb6813b315dc (patch) | |
tree | 57a54e2c0f8aa34bc744660e8d4f127f8689f6fd /src/corelib | |
parent | 3ddffd2d8b619863930854705ca5577c0389d65f (diff) |
QVariant: Fix conversion code
Fixes: QTBUG-86330
Change-Id: Ib89dcf1195e0081b4c4e2845f90c52c612e5911a
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src/corelib')
-rw-r--r-- | src/corelib/kernel/qmetatype.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp index a87b98b12d..95557bf021 100644 --- a/src/corelib/kernel/qmetatype.cpp +++ b/src/corelib/kernel/qmetatype.cpp @@ -2050,8 +2050,17 @@ bool QMetaType::convert(QMetaType fromType, const void *from, QMetaType toType, // handle QObject conversion if ((fromType.flags() & QMetaType::PointerToQObject) && (toType.flags() & QMetaType::PointerToQObject)) { QObject *fromObject = *static_cast<QObject * const *>(from); - *static_cast<QObject **>(to) = fromObject ? fromObject->metaObject()->cast(fromObject) : nullptr; - return true; + // use dynamic metatype of from if possible + if (fromObject && fromObject->metaObject()->inherits(toType.metaObject())) { + *static_cast<QObject **>(to) = toType.metaObject()->cast(fromObject); + return true; + } else if (!fromObject) { + // if fromObject is null, use static fromType to check if conversion works + *static_cast<void **>(to) = nullptr; + return fromType.metaObject()->inherits(toType.metaObject()); + } else { + return false; + } } #endif |