diff options
Diffstat (limited to 'src/qml/qml/qqmlpropertycache.cpp')
-rw-r--r-- | src/qml/qml/qqmlpropertycache.cpp | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/src/qml/qml/qqmlpropertycache.cpp b/src/qml/qml/qqmlpropertycache.cpp index b51fc963f7..ddab42336f 100644 --- a/src/qml/qml/qqmlpropertycache.cpp +++ b/src/qml/qml/qqmlpropertycache.cpp @@ -84,27 +84,44 @@ void QQmlPropertyData::load(const QMetaMethod &m) { setCoreIndex(m.methodIndex()); setArguments(nullptr); + m_flags.type = Flags::FunctionType; - setPropType(m.returnMetaType()); + // We need to set the constructor, signal, constant, arguments, V4Function, cloned flags. + // These are specific to methods and change with each method. + // The same QQmlPropertyData may be loaded with multiple methods in sequence. - m_flags.type = Flags::FunctionType; - if (m.methodType() == QMetaMethod::Signal) { + switch (m.methodType()) { + case QMetaMethod::Signal: m_flags.setIsSignal(true); - } else if (m.methodType() == QMetaMethod::Constructor) { + m_flags.setIsConstructor(false); + setPropType(m.returnMetaType()); + break; + case QMetaMethod::Constructor: + m_flags.setIsSignal(false); m_flags.setIsConstructor(true); setPropType(QMetaType::fromType<QObject *>()); + break; + default: + m_flags.setIsSignal(false); + m_flags.setIsConstructor(false); + setPropType(m.returnMetaType()); + break; } + m_flags.setIsConstant(m.isConst()); const int paramCount = m.parameterCount(); if (paramCount) { m_flags.setHasArguments(true); - if ((paramCount == 1) && (m.parameterMetaType(0) == QMetaType::fromType<QQmlV4Function *>())) - m_flags.setIsV4Function(true); + m_flags.setIsV4Function( + paramCount == 1 && + m.parameterMetaType(0) == QMetaType::fromType<QQmlV4Function *>()); + } else { + m_flags.setHasArguments(false); + m_flags.setIsV4Function(false); } - if (m.attributes() & QMetaMethod::Cloned) - m_flags.setIsCloned(true); + m_flags.setIsCloned(m.attributes() & QMetaMethod::Cloned); Q_ASSERT(m.revision() <= std::numeric_limits<quint16>::max()); setRevision(QTypeRevision::fromEncodedVersion(m.revision())); |