diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2020-04-07 11:50:39 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2020-04-28 11:46:03 +0200 |
commit | c2de5643cd4f1b8d8b10e2bb62fdf95f12fdd9e3 (patch) | |
tree | 55cfa6610c91315d5ae6cbbf2c961fb2fbfcabd8 /src/qml/qml/qqmlmetatype.cpp | |
parent | 1029b2b9f3d0ff88c0900fbfec2fac873aa6bcd4 (diff) |
Register value types declaratively
For now this has the effect of adding them to the .qmltypes files. In
the future, the registration shall actually add additional value types
you can declare as properties in QML.
Change-Id: Ifee5a8ec054f35cc7bd07eb992a136730be68da7
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/qml/qml/qqmlmetatype.cpp')
-rw-r--r-- | src/qml/qml/qqmlmetatype.cpp | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/qml/qml/qqmlmetatype.cpp b/src/qml/qml/qqmlmetatype.cpp index 51931ccb6c..4587ac3cc8 100644 --- a/src/qml/qml/qqmlmetatype.cpp +++ b/src/qml/qml/qqmlmetatype.cpp @@ -366,10 +366,12 @@ QString registrationTypeString(QQmlType::RegistrationType typeType) // NOTE: caller must hold a QMutexLocker on "data" bool checkRegistration(QQmlType::RegistrationType typeType, QQmlMetaTypeData *data, - const char *uri, const QString &typeName, QTypeRevision version) + const char *uri, const QString &typeName, QTypeRevision version, + QMetaType::TypeFlags flags) { if (!typeName.isEmpty()) { - if (typeName.at(0).isLower()) { + if (typeName.at(0).isLower() + && !(flags & (QMetaType::PointerToGadget | QMetaType::IsGadget))) { QString failure(QCoreApplication::translate("qmlRegisterType", "Invalid QML %1 name \"%2\"; type names must begin with an uppercase letter")); data->recordTypeRegFailure(failure.arg(registrationTypeString(typeType)).arg(typeName)); return false; @@ -453,8 +455,10 @@ QQmlType QQmlMetaType::registerType(const QQmlPrivate::RegisterType &type) QQmlMetaTypeDataPtr data; QString elementName = QString::fromUtf8(type.elementName); - if (!checkRegistration(QQmlType::CppType, data, type.uri, elementName, type.version)) + if (!checkRegistration(QQmlType::CppType, data, type.uri, elementName, type.version, + QMetaType(type.typeId).flags())) { return QQmlType(); + } QQmlTypePrivate *priv = createQQmlType(data, elementName, type); @@ -473,8 +477,10 @@ QQmlType QQmlMetaType::registerSingletonType(const QQmlPrivate::RegisterSingleto QQmlMetaTypeDataPtr data; QString typeName = QString::fromUtf8(type.typeName); - if (!checkRegistration(QQmlType::SingletonType, data, type.uri, typeName, type.version)) + if (!checkRegistration(QQmlType::SingletonType, data, type.uri, typeName, type.version, + QMetaType(type.typeId).flags())) { return QQmlType(); + } QQmlTypePrivate *priv = createQQmlType(data, typeName, type); @@ -496,7 +502,7 @@ QQmlType QQmlMetaType::registerCompositeSingletonType(const QQmlPrivate::Registe if (*(type.uri) == '\0') fileImport = true; if (!checkRegistration(QQmlType::CompositeSingletonType, data, fileImport ? nullptr : type.uri, - typeName, type.version)) { + typeName, type.version, {})) { return QQmlType(); } @@ -521,8 +527,10 @@ QQmlType QQmlMetaType::registerCompositeType(const QQmlPrivate::RegisterComposit bool fileImport = false; if (*(type.uri) == '\0') fileImport = true; - if (!checkRegistration(QQmlType::CompositeType, data, fileImport?nullptr:type.uri, typeName, type.version)) + if (!checkRegistration(QQmlType::CompositeType, data, fileImport?nullptr:type.uri, typeName, + type.version, {})) { return QQmlType(); + } QQmlTypePrivate *priv = createQQmlType(data, typeName, type); addTypeToData(priv, data); @@ -814,7 +822,7 @@ QQmlType QQmlMetaType::typeForUrl(const QString &urlString, const QQmlType::RegistrationType registrationType = isCompositeSingleton ? QQmlType::CompositeSingletonType : QQmlType::CompositeType; - if (checkRegistration(registrationType, data, nullptr, typeName, version)) { + if (checkRegistration(registrationType, data, nullptr, typeName, version, {})) { auto *priv = new QQmlTypePrivate(registrationType); priv->setName(QString(), typeName); priv->version = version; |