QGraphicsView render() execute failed when set QOpenglWidget as viewport

  • I want to use QOpenglwidget combie with QGraphicsView FrameWork.So I set the QOpenglWidget as the QgraphicsView's viewport.The function of QOpenglWidget is draw background texture.
    Then I add a QGraphicsTextItem to QGraphicsScene. But When I use QGraphicsView's render() function to print the screen contents into a QImage.I found that only QGrahicsTextItem is saved into QImage, the texture is not saved.
    But when I directly draw texture use QPainter in QGraphicsView's drawbackground() instead of use QOpenglwidget, both the QGraphicsTextItem and background texture are save into qimage.
    Below is the render related source code.

    	m_pMyOpenglWidget = new MyOpenGLWidget(this);
    QImage image(1920, 960, QImage::Format_ARGB32_Premultiplied);
    QPainter painter(&image);
    ui.graphicsView->render(&painter, QRectF(0, 0, showWidth, showHeight), QRect(renderLeft, renderTop, showWidth, showHeight));
    painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
    void MyGraphicsView::drawBackground(QPainter *painter, const QRectF &rect)
            //Method 1:direct draw use Painter.
    	//painter->drawImage(QPoint(0, 0), QImage("D:\\backup\\picture\\Panorama2D_1920_960.jpg"));
      //method2:OpenglWidget Method

    Below is Render()'s result

    below is real window contents

  • @luzhigang some code showing what you did would help people figure out what is wrong.
    preferably minimal app so people can try to reproduce it...

Log in to reply

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