diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp index 85f904666c8..742a093400d 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp @@ -2444,12 +2444,12 @@ bool NodeMetaInfo::usesCustomParser() const if (!isValid()) return false; - auto type = typeName(); - return type == "QtQuick.VisualItemModel" || type == "Qt.VisualItemModel" - || type == "QtQuick.VisualDataModel" || type == "Qt.VisualDataModel" - || type == "QtQuick.ListModel" || type == "Qt.ListModel" - || type == "QtQml.Models.ListModel" || type == "QtQuick.XmlListModel" - || type == "Qt.XmlListModel" || type == "QtQml.XmlListModel.XmlListModel"; + auto type = simplifiedTypeName(); + return type == "VisualItemModel" + || type == "VisualDataModel" + || type == "ListModel" + || type == "XmlListModel" + || type == "DesignEffect"; } } diff --git a/src/tools/qml2puppet/qml2puppet/instances/qt5nodeinstanceserver.cpp b/src/tools/qml2puppet/qml2puppet/instances/qt5nodeinstanceserver.cpp index fca884e94b3..765b52321bf 100644 --- a/src/tools/qml2puppet/qml2puppet/instances/qt5nodeinstanceserver.cpp +++ b/src/tools/qml2puppet/qml2puppet/instances/qt5nodeinstanceserver.cpp @@ -436,10 +436,18 @@ QQuickItem *Qt5NodeInstanceServer::parentEffectItem(QQuickItem *item) return nullptr; } -static bool isEffectItem(QQuickItem *item, QQuickShaderEffectSource *sourceItem) +static bool isEffectItem(QQuickItem *item, QQuickShaderEffectSource *sourceItem, QQuickItem *target) { QQuickItemPrivate *pItem = QQuickItemPrivate::get(sourceItem); + if (item) { + QQmlProperty prop(item, "__effect"); + if (prop.read().toBool()) { + prop = QQmlProperty(item, "source"); + return prop.read().value() == target; + } + } + if (!pItem || !pItem->layer()) return false; @@ -477,7 +485,7 @@ QImage Qt5NodeInstanceServer::grabItem([[maybe_unused]] QQuickItem *item) if (auto parent = item->parentItem()) { const auto siblings = parent->childItems(); for (auto sibling : siblings) { - if (isEffectItem(sibling, pItem->layer()->effectSource())) + if (isEffectItem(sibling, pItem->layer()->effectSource(), item)) return grabItem(sibling); } } diff --git a/src/tools/qml2puppet/qml2puppet/instances/servernodeinstance.cpp b/src/tools/qml2puppet/qml2puppet/instances/servernodeinstance.cpp index ca05a5ef039..9600a0b2b0d 100644 --- a/src/tools/qml2puppet/qml2puppet/instances/servernodeinstance.cpp +++ b/src/tools/qml2puppet/qml2puppet/instances/servernodeinstance.cpp @@ -120,10 +120,20 @@ QRectF ServerNodeInstance::effectAdjustedBoundingRect(QQuickItem *item) { if (item) { QQuickItemPrivate *pItem = QQuickItemPrivate::get(item); - if (pItem && pItem->layer() && pItem->layer()->sourceRect().isValid()) + + QQmlProperty prop(item, "__effect"); + + if (pItem && pItem->layer() && pItem->layer()->sourceRect().isValid()) { return pItem->layer()->sourceRect(); - else + } else if (prop.read().toBool()) { + prop = QQmlProperty(item, "allEffects"); + QRectF rect = prop.read().toRectF().adjusted(-20, -20, 20, 20); + if (rect.isValid()) + return rect; return item->boundingRect(); + } else { + return item->boundingRect(); + } } return {}; }