summaryrefslogtreecommitdiffstats
path: root/src/corelib
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 /src/corelib
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>
Diffstat (limited to 'src/corelib')
-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);