Getting a snapshot of a QDeclarativeItem/QGraphicsVideoItem (OpenGL?)



  • I have a QML application which uses a QDeclarativeItem, pulled in from a C++ plugin. This item has a QGraphicsVideoItem as a child, filling its entirety. I would like to capture a QPixmap or QImage of the contents of either of these items (since they should be identical as displayed on the screen). I've tried many variations of the following code:

    @#ifdef TRY_SCENE_RENDER
    QSize useSize = scene()->size().toSize();
    #else
    QSize useSize = boundingRect().size().toSize();
    #endif

    #ifdef TRY_QIMAGE
    QImage image(useSize, QImage::Format_RGB32);
    #else
    QPixmap image(useSize);
    #endif

    image.fill(Qt::green);
    QPainter painter(&image);

    #ifdef TRY_SCENE_RENDER
    scene()->render(&painter);
    #else
    paint(&painter, 0, 0); // I have tried passing in a QStyleOptionGraphicsItem with exposedRect set to boundingRect()
    #endif@

    With paint(), I am left with either an all-green or all-black image; with scene()->render(), the other items in the scene are rendered correctly, but the QGraphicsVideoItem is blank.

    This is on MeeGo, which I believe always uses "-graphicssystem opengl" - at the very least, if I start a test app without those switches then the QGraphicsVideoItem is not displayed.

    I suspect that my problem has something to do with the OpenGL backend, but I'm at a loss. Does anyone have any ideas here? TIA...



  • Did you try to use "QPixmap::grabWindow":http://doc.qt.nokia.com/latest/qpixmap.html#grabWindow ?


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.