diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2018-07-14 01:02:04 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@qt.io> | 2018-07-16 09:38:30 +0200 |
commit | 43645fd59c6bcb0a3e37eef530ef970f51ed48af (patch) | |
tree | d377a19c36e9e853377db59b58d937db0ea67e0d /src/plugins/qmltooling/qmldbg_debugger | |
parent | ad0f200df54e5afcb1fdcb977794259bdb9216b5 (diff) | |
parent | f42207cbdb0cbe5e345bfd9e000b3e77b34a503c (diff) |
Merge remote-tracking branch 'origin/5.11' into dev
Conflicts:
src/quick/items/qquickloader.cpp
tests/auto/quick/qquickanimations/tst_qquickanimations.cpp
Change-Id: I0cb9f637d24ccd0ecfb50c455cc210119f744b02
Diffstat (limited to 'src/plugins/qmltooling/qmldbg_debugger')
-rw-r--r-- | src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp | 43 |
1 files changed, 34 insertions, 9 deletions
diff --git a/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp b/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp index 17bae6d695..4c104f01de 100644 --- a/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp +++ b/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp @@ -68,6 +68,37 @@ QT_BEGIN_NAMESPACE using QQmlDebugPacket = QVersionedPacket<QQmlDebugConnector>; +class NullDevice : public QIODevice +{ +public: + NullDevice() { open(QIODevice::ReadWrite); } + +protected: + qint64 readData(char *data, qint64 maxlen) final; + qint64 writeData(const char *data, qint64 len) final; +}; + +qint64 NullDevice::readData(char *data, qint64 maxlen) +{ + Q_UNUSED(data); + return maxlen; +} + +qint64 NullDevice::writeData(const char *data, qint64 len) +{ + Q_UNUSED(data); + return len; +} + +// check whether the data can be saved +// (otherwise we assert in QVariant::operator<< when actually saving it) +static bool isSaveable(const QVariant &value) +{ + NullDevice nullDevice; + QDataStream fakeStream(&nullDevice); + return QMetaType::save(fakeStream, static_cast<int>(value.type()), value.constData()); +} + QQmlEngineDebugServiceImpl::QQmlEngineDebugServiceImpl(QObject *parent) : QQmlEngineDebugService(2, parent), m_watch(new QQmlWatcher(this)), m_statesDelegate(nullptr) { @@ -106,13 +137,7 @@ QDataStream &operator<<(QDataStream &ds, const QQmlEngineDebugServiceImpl::QQmlObjectProperty &data) { ds << (int)data.type << data.name; - // check first whether the data can be saved - // (otherwise we assert in QVariant::operator<<) - QQmlDebugPacket fakeStream; - if (QMetaType::save(fakeStream, data.value.type(), data.value.constData())) - ds << data.value; - else - ds << QVariant(); + ds << (isSaveable(data.value) ? data.value : QVariant()); ds << data.valueTypeName << data.binding << data.hasNotifySignal; return ds; } @@ -247,8 +272,8 @@ QVariant QQmlEngineDebugServiceImpl::valueContents(QVariant value) const } } - // We expect all QML value types to either have a toString() method or stream operators - return value; + if (isSaveable(value)) + return value; } } |