summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2019-04-11 16:16:37 +0200
committerFabian Kosmale <fabian.kosmale@qt.io>2020-06-11 19:39:57 +0200
commit03107d0ccd4bed91b13f05c5ab36776e054dde8f (patch)
tree503d824a8468f73684297182f66e2641995a0997
parentd0689ec867244a25635fb9504f2e6ff6e5c4a77b (diff)
Add some support to flag alias properties
This is required if we want to be able to get rid of the property cache. Also reserve a flag for var properties, in case it turns out that we need to keep the distinction between var and QVariant properties in QML. Change-Id: I55c2191adcc2d94bd8f148216e26423defaa900f Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
-rw-r--r--src/corelib/kernel/qmetaobject.cpp14
-rw-r--r--src/corelib/kernel/qmetaobject.h1
-rw-r--r--src/corelib/kernel/qmetaobject_p.h2
-rw-r--r--src/corelib/kernel/qmetaobjectbuilder.cpp23
-rw-r--r--src/corelib/kernel/qmetaobjectbuilder_p.h2
5 files changed, 42 insertions, 0 deletions
diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp
index add1f3b86e..a94c0c7d5f 100644
--- a/src/corelib/kernel/qmetaobject.cpp
+++ b/src/corelib/kernel/qmetaobject.cpp
@@ -3033,6 +3033,20 @@ bool QMetaProperty::hasStdCppSet() const
/*!
\internal
+
+ Returns \c true if the property is an alias.
+ This is for instance true for a property declared in QML
+ as 'property alias'.
+*/
+bool QMetaProperty::isAlias() const
+{
+ if (!mobj)
+ return false;
+ return (data.flags() & Alias);
+}
+
+/*!
+ \internal
Executes metacall with QMetaObject::RegisterPropertyMetaType flag.
Returns id of registered type or QMetaType::UnknownType if a type
could not be registered for any reason.
diff --git a/src/corelib/kernel/qmetaobject.h b/src/corelib/kernel/qmetaobject.h
index e9290e0844..474e4da0f1 100644
--- a/src/corelib/kernel/qmetaobject.h
+++ b/src/corelib/kernel/qmetaobject.h
@@ -314,6 +314,7 @@ public:
bool resetOnGadget(void *gadget) const;
bool hasStdCppSet() const;
+ bool isAlias() const;
inline bool isValid() const { return isReadable(); }
inline const QMetaObject *enclosingMetaObject() const { return mobj; }
diff --git a/src/corelib/kernel/qmetaobject_p.h b/src/corelib/kernel/qmetaobject_p.h
index 79d090cc4b..02ede4d376 100644
--- a/src/corelib/kernel/qmetaobject_p.h
+++ b/src/corelib/kernel/qmetaobject_p.h
@@ -71,6 +71,8 @@ enum PropertyFlags {
Writable = 0x00000002,
Resettable = 0x00000004,
EnumOrFlag = 0x00000008,
+ Alias = 0x00000010,
+ //Reserved for future usage = 0x00000020,
StdCppSet = 0x00000100,
Constant = 0x00000400,
Final = 0x00000800,
diff --git a/src/corelib/kernel/qmetaobjectbuilder.cpp b/src/corelib/kernel/qmetaobjectbuilder.cpp
index 0f778af644..204ba8f51b 100644
--- a/src/corelib/kernel/qmetaobjectbuilder.cpp
+++ b/src/corelib/kernel/qmetaobjectbuilder.cpp
@@ -2368,6 +2368,19 @@ bool QMetaPropertyBuilder::isFinal() const
}
/*!
+ * Returns \c true if the property is an alias.
+ * The default value is false
+ */
+bool QMetaPropertyBuilder::isAlias() const
+{
+ QMetaPropertyBuilderPrivate *d = d_func();
+ if (d)
+ return d->flag(Alias);
+ else
+ return false;
+}
+
+/*!
Sets this property to readable if \a value is true.
\sa isReadable(), setWritable()
@@ -2503,6 +2516,16 @@ void QMetaPropertyBuilder::setFinal(bool value)
}
/*!
+ Sets the \c ALIAS flag on this property to \a value
+ */
+void QMetaPropertyBuilder::setAlias(bool value)
+{
+ QMetaPropertyBuilderPrivate *d = d_func();
+ if (d)
+ d->setFlag(Alias, value);
+}
+
+/*!
Returns the revision of this property.
\sa setRevision()
diff --git a/src/corelib/kernel/qmetaobjectbuilder_p.h b/src/corelib/kernel/qmetaobjectbuilder_p.h
index 974fbd4a64..a473e68cec 100644
--- a/src/corelib/kernel/qmetaobjectbuilder_p.h
+++ b/src/corelib/kernel/qmetaobjectbuilder_p.h
@@ -262,6 +262,7 @@ public:
bool isEnumOrFlag() const;
bool isConstant() const;
bool isFinal() const;
+ bool isAlias() const;
void setReadable(bool value);
void setWritable(bool value);
@@ -274,6 +275,7 @@ public:
void setEnumOrFlag(bool value);
void setConstant(bool value);
void setFinal(bool value);
+ void setAlias(bool value);
int revision() const;
void setRevision(int revision);