Search code examples
qtqmlscreenshot

QML How to import ItemGrabResult?


I try to use ItemGrabResult {} element. But I got error "QQmlApplicationEngine failed to load component" "ItemGrabResult is not a type"

import QtQuick 2.15

Item {
    id: root


    ItemGrabResult {

    }

    Rectangle {
        id: rect
        color: "red"
        anchors.fill: parent
    }

ItemGrabResult is inactive

enter image description here

In documentation https://doc.qt.io/qt-5/qml-qtquick-itemgrabresult.html#details I can not find any information how to import this element in CMake (or qmake) file


Solution

  • As iam_peter indicated, the ItemGrabResult comes from a call to Item.grabToImage().

    In the following example, you need to click on the red Rectangle and it will initiate a grabToImage() call. The callback will have an instance of the ItemGrabResult which has properties and methods for accessing the grabbed image:

    import QtQuick
    import QtQuick.Controls
    Page {
        Item {
            id: frame
            width: 200
            height: 200
            Rectangle {
                id: rect
                color: "red"
                anchors.fill: parent
            }
            MouseArea {
                anchors.fill: parent
                onClicked: {
                    frame.grabToImage( function (itemGrabResult) {
                        // itemGrabResult: QQuickItemGrabResult(0x254f9a0)
                        // itemGrabResult.image: QVariant(QImage, QImage(QSize(200, 200),format=QImage::Format_RGBA8888_Premultiplied,depth=32,devicePixelRatio=1,bytesPerLine=800,sizeInBytes=160000))
                        // itemGrabResult.saveToFile: function() { [native code] }
                        dbg.text = `
    itemGrabResult: ${itemGrabResult.toString()}
    itemGrabResult.image: ${itemGrabResult.image.toString()}
    itemGrabResult.saveToFile: ${itemGrabResult.saveToFile.toString()}
    `
                    } );
                }
            }
        }
        footer: TextEdit { id: dbg; wrapMode: Text.WordWrap }
    }
    

    You can Try it Online!

    https://doc.qt.io/qt-6/qml-qtquick-item.html#grabToImage-method