diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2016-06-27 08:10:04 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2016-07-17 18:51:35 +0000 |
commit | f4b6cc2625671c70e4899a9d277923585818554c (patch) | |
tree | 82109ff6f8fc455e04e05d26fec0c5fd5838a0a6 /src/quick3d/quick3drender/items | |
parent | 68e0e8837a7437b483d8639167a6ebad57b1dd35 (diff) |
Quick3DBuffer: do not always convert from QJSValue
In most cases when Quick3DBuffer::setBufferData is called, the QVariant
parameter contains a QJSValue. In some cases though, such as when the data
property of a Quick3DBuffer is set from a C++ data model, the QVariant may
contain a QByteArray directly. Doing the QJSValue conversion in that case
would result in a failure as the data set would be 0. Perform the proper
QVariant conversion based on the contained type.
Change-Id: I263d275fd780f57a67f11c9ca47c5d6f8ddf7a23
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/quick3d/quick3drender/items')
-rw-r--r-- | src/quick3d/quick3drender/items/quick3dbuffer.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/quick3d/quick3drender/items/quick3dbuffer.cpp b/src/quick3d/quick3drender/items/quick3dbuffer.cpp index e2a40da78..73292a3b5 100644 --- a/src/quick3d/quick3drender/items/quick3dbuffer.cpp +++ b/src/quick3d/quick3drender/items/quick3dbuffer.cpp @@ -53,6 +53,10 @@ namespace Render { namespace Quick { +namespace { +const int jsValueTypeId = qMetaTypeId<QJSValue>(); +} + Quick3DBuffer::Quick3DBuffer(QObject *parent) : QObject(parent) , m_engine(nullptr) @@ -84,8 +88,12 @@ QVariant Quick3DBuffer::bufferData() const void Quick3DBuffer::setBufferData(const QVariant &bufferData) { - QJSValue jsValue = bufferData.value<QJSValue>(); - parentBuffer()->setData(convertToRawData(jsValue)); + if (bufferData.userType() == QMetaType::QByteArray) { + parentBuffer()->setData(bufferData.toByteArray()); + } else if (bufferData.userType() == jsValueTypeId) { + QJSValue jsValue = bufferData.value<QJSValue>(); + parentBuffer()->setData(convertToRawData(jsValue)); + } } void Quick3DBuffer::initEngines() |