Capturez widget de Qt comme un fichier image

voix
4

Je travaille avec QGLWidget (widget Qt pour OpenGL) et que vous voulez être en mesure de capturer l'écran affiché par le widget sous forme de fichiers JPEG. Comment puis-je atteindre cet objectif? Y at-il une fonction qui renvoie ce qui est affiché sur le widget comme une image?

Créé 15/10/2009 à 05:40
source utilisateur
Dans d'autres langues...                            


5 réponses

voix
13

Normalement avec OpenGL, vous liriez du framebuffer en utilisant la glReadPixels()fonction. Cela mettra le contenu du framebuffer dans un tampon que vous avez alloué. Vous devez alors une fonction qui convertit au format JPEG.

Cependant, comme vous utilisez QGLWidget, vous pouvez utiliser la grabFrameBuffer()méthode pour obtenir le contenu du tampon de trame comme un QImageobjet. Ceci est probablement la meilleure façon de procéder. Vous pouvez saisir le contenu du framebuffer, puis utilisez QImage::save()pour enregistrer dans un fichier.

Si vous passez à Qt 5 de QOpenGLWidget, vous trouverez qu'il a une même grabFrameBuffer()méthode.

Créé 15/10/2009 à 05:44
source utilisateur

voix
9
QImage img(mywidget.size());
QPainter painter(&img);
mywidget.render(&painter);
img.save("/some/file.jpg");
Créé 15/10/2009 à 18:32
source utilisateur

voix
1

Voici la façon la plus simple d'enregistrer widget comme une image, en travaillant sur Qt 5:

QString file = QFileDialog::getSaveFileName(this, "Save as...", "name", "PNG (*.png);; BMP (*.bmp);;TIFF (*.tiff *.tif);; JPEG (*.jpg *.jpeg)");
ui->myWidget->grab().save(file);
Créé 21/06/2014 à 13:56
source utilisateur

voix
1

Pourquoi ne pas utiliser la incantatoire très simple QPixmap::grabWindow( m_widget->winId() ).save( "/some/file.jpg" )

Créé 27/01/2014 à 09:17
source utilisateur

voix
-3
QPixmap pixmap = QPixmap::grabWidget( &widget );
pixmap.save("widget.png");
Créé 07/04/2017 à 06:29
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more