diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp index 05662b385a5..f9df95ebce3 100644 --- a/src/corelib/kernel/qmetaobject.cpp +++ b/src/corelib/kernel/qmetaobject.cpp @@ -3775,8 +3775,10 @@ bool QMetaProperty::write(QObject *object, QVariant &&v) const return false; QMetaType t(mobj->d.metaTypes[data.index(mobj)]); if (t != QMetaType::fromType() && t != v.metaType()) { - if (isEnumType() && !t.metaObject() && v.metaType().id() == QMetaType::QString) { + if (isEnumType() && !t.metaObject() && v.metaType() == QMetaType::fromType()) { // Assigning a string to a property of type Q_ENUMS (instead of Q_ENUM) + // means the QMetaType has no associated QMetaObject, so it can't + // do the conversion (see qmetatype.cpp:convertToEnum()). bool ok; if (isFlagType()) v = QVariant(menum.keysToValue(v.toByteArray(), &ok)); @@ -3784,7 +3786,8 @@ bool QMetaProperty::write(QObject *object, QVariant &&v) const v = QVariant(menum.keyToValue(v.toByteArray(), &ok)); if (!ok) return false; - } else if (!v.isValid()) { + } + if (!v.isValid()) { if (isResettable()) return reset(object); v = QVariant(t, nullptr);