Finish render() support for QQuickWidget
The enablers are already in. Now we just need to use the virtual in QQuickWidgetPrivate and test it. Task-number: QTBUG-39562 Change-Id: I1faf5a0a244ba4169fb8f9b0dae657304038b60e Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
This commit is contained in:
parent
f03892bbe9
commit
549f76b521
|
@ -50,6 +50,8 @@ public:
|
|||
private slots:
|
||||
void quickWidgetStatusChanged(QQuickWidget::Status);
|
||||
void sceneGraphError(QQuickWindow::SceneGraphError error, const QString &message);
|
||||
void grabToFile();
|
||||
void renderToFile();
|
||||
|
||||
private:
|
||||
QQuickWidget *m_quickWidget;
|
||||
|
@ -88,7 +90,11 @@ MainWindow::MainWindow()
|
|||
|
||||
setCentralWidget(centralWidget);
|
||||
|
||||
QMenu *fileMenu = menuBar()->addMenu(tr("File"));
|
||||
QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
|
||||
QAction *grabAction = fileMenu->addAction(tr("Grab to image"));
|
||||
connect(grabAction, SIGNAL(triggered()), this, SLOT(grabToFile()));
|
||||
QAction *renderAction = fileMenu->addAction(tr("Render to pixmap"));
|
||||
connect(renderAction, SIGNAL(triggered()), this, SLOT(renderToFile()));
|
||||
QAction *quitAction = fileMenu->addAction(tr("Quit"));
|
||||
connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
|
||||
}
|
||||
|
@ -108,6 +114,30 @@ void MainWindow::sceneGraphError(QQuickWindow::SceneGraphError, const QString &m
|
|||
statusBar()->showMessage(message);
|
||||
}
|
||||
|
||||
template<class T> void saveToFile(QWidget *parent, T *saveable)
|
||||
{
|
||||
QString t;
|
||||
QFileDialog fd(parent, t, QString());
|
||||
fd.setAcceptMode(QFileDialog::AcceptSave);
|
||||
fd.setDefaultSuffix("png");
|
||||
fd.selectFile("test.png");
|
||||
if (fd.exec() == QDialog::Accepted)
|
||||
saveable->save(fd.selectedFiles().first());
|
||||
}
|
||||
|
||||
void MainWindow::grabToFile()
|
||||
{
|
||||
QImage image = m_quickWidget->grabFramebuffer();
|
||||
saveToFile(this, &image);
|
||||
}
|
||||
|
||||
void MainWindow::renderToFile()
|
||||
{
|
||||
QPixmap pixmap(m_quickWidget->size());
|
||||
m_quickWidget->render(&pixmap);
|
||||
saveToFile(this, &pixmap);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
QApplication app(argc, argv);
|
||||
|
|
|
@ -238,6 +238,15 @@ void QQuickWidgetPrivate::renderSceneGraph()
|
|||
q->update();
|
||||
}
|
||||
|
||||
QImage QQuickWidgetPrivate::grabFramebuffer()
|
||||
{
|
||||
if (!context)
|
||||
return QImage();
|
||||
|
||||
context->makeCurrent(offscreenSurface);
|
||||
return renderControl->grab();
|
||||
}
|
||||
|
||||
/*!
|
||||
\module QtQuickWidgets
|
||||
\title Qt Quick Widgets C++ Classes
|
||||
|
@ -1103,12 +1112,7 @@ QSurfaceFormat QQuickWidget::format() const
|
|||
*/
|
||||
QImage QQuickWidget::grabFramebuffer() const
|
||||
{
|
||||
Q_D(const QQuickWidget);
|
||||
if (!d->context)
|
||||
return QImage();
|
||||
|
||||
d->context->makeCurrent(d->offscreenSurface);
|
||||
return d->renderControl->grab();
|
||||
return const_cast<QQuickWidgetPrivate *>(d_func())->grabFramebuffer();
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
|
|
@ -89,6 +89,7 @@ public:
|
|||
void handleContextCreationFailure(const QSurfaceFormat &format, bool isEs);
|
||||
|
||||
GLuint textureId() const Q_DECL_OVERRIDE;
|
||||
QImage grabFramebuffer() Q_DECL_OVERRIDE;
|
||||
|
||||
void init(QQmlEngine* e = 0);
|
||||
void handleWindowChange();
|
||||
|
|
Loading…
Reference in New Issue