diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2019-12-16 10:11:02 +0100 |
---|---|---|
committer | Tim Jenssen <tim.jenssen@qt.io> | 2019-12-17 10:08:00 +0000 |
commit | 2f2787c4a8518fc31086a2cf7b317dccdb3a1624 (patch) | |
tree | 606028d69be3999045352f1ee9b9e0cde7da43f6 | |
parent | e5d4224fe447e1af538ca8a7fa83e621a7e62883 (diff) | |
download | qt-creator-2f2787c4a8518fc31086a2cf7b317dccdb3a1624.tar.gz |
QmlDesigner: Add workaround for QVector3D
For some reason the Qt meta system does not work reliable
for QVector3D. It does work "rotation", but not for "pivot",
despite the fact that both properties are defined in exactly the
same way.
This patch works around the main issue.
There are still a few issues left, but at least the default is
correct now.
Task-number: QDS-1355
Change-Id: I75e2d3adff6967e89c6ce031d744baa12b5e8061
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
-rw-r--r-- | share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp | 23 | ||||
-rw-r--r-- | share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h | 1 |
2 files changed, 22 insertions, 2 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp index 83382fb198..2d2edeee4a 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp @@ -571,11 +571,30 @@ QVariant ObjectNodeInstance::property(const PropertyName &name) const return property.read(); } +void ObjectNodeInstance::ensureVector3DDotProperties(PropertyNameList &list) const +{ + const PropertyNameList properties = { "rotation", "scale", "pivot" }; + for (const auto &property : properties) { + if (list.contains(property) && instanceType(property) == "QVector3D") { + const PropertyNameList dotProperties = { "x", "y", "z" }; + for (const auto &dotProperty : dotProperties) { + const PropertyName dotPropertyName = property + "." + dotProperty; + if (!list.contains(dotPropertyName)) + list.append(dotPropertyName); + } + } + } +} + PropertyNameList ObjectNodeInstance::propertyNames() const { + PropertyNameList list; if (isValid()) - return QmlPrivateGate::allPropertyNames(object()); - return PropertyNameList(); + list = QmlPrivateGate::allPropertyNames(object()); + + ensureVector3DDotProperties(list); + + return list; } QString ObjectNodeInstance::instanceType(const PropertyName &name) const diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h index ced76dee58..d716c4d755 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h @@ -209,6 +209,7 @@ protected: static QVariant enumationValue(const Enumeration &enumeration); void initializePropertyWatcher(const ObjectNodeInstance::Pointer &objectNodeInstance); + void ensureVector3DDotProperties(PropertyNameList &list) const; private: QString m_id; |