En Qt, comment puis-je prendre une capture d'écran d'une fenêtre spécifique (c'est-à-dire supposez que je dispose de bloc-notes et je voulais prendre une capture d'écran de la fenêtre intitulée "Untitled - Notepad")? Dans leur code d'écran d'écran, ils montrent comment prendre une capture d'écran de l'ensemble du bureau:
originalPixmap = QPixmap::grabWindow(QApplication::desktop()->winId());
5 Réponses :
Je suis sûr que c'est spécifique à la plate-forme. Winids sont hwnds sous Windows, vous pouvez donc appeler Findwindow (NULL, "Sans titre - NotePad") CODE> Dans l'exemple que vous avez donné. P>
regarder également windowfrompoind code> et Enumchildwindows code>. Ce dernier pourrait vous permettre d'inviter l'utilisateur à désambiguoir si vous aviez plusieurs fenêtres avec le même titre. P>
Regardez la classe Qdesktopwidget. Il est hérité de qwidget donc il n'y a littéralement aucun problème de prise de capture d'écran:
Pour la version 4.8 Code> Je devais apporter de peu de modifications à votre extrait. Principalement: Créez un objet de type qdesktopwidget code> à appeler scénarométrie () code> et écran () code> et modifier écran (). Render (). ) code> à écran () -> Render () code>, comme écran () code> renvoie un qwidget * code>.
Bien que cela ait déjà été répondu, juste pour des raisons d'exhaustivité, j'ajouterai à Trevor Boyd Smith's Post (voir ci-dessus) un exemple d'extraction de code:
void MainWindow::on_myButton_GUI_Screeshot_clicked()
{
QPixmap qPixMap = QPixmap::grabWidget(this); // *this* is window pointer, the snippet is in the mainwindow.cpp file
QImage qImage = qPixMap.toImage();
cv::Mat GUI_SCREENSHOT = cv::Mat( qImage.height(),
qImage.width(), CV_8UC4,
(uchar*)qImage.bits(),
qImage.bytesPerLine() );
cv::imshow("GUI_SCREENSHOT",GUI_SCREENSHOT);
}
Jetez un coup d'œil à exemple de capture d'écran
En bref: p>
Cette réponse ne concerne pas "Prendre la capture d'écran d'une fenêtre spécifique". Il s'agit de prendre la capture d'écran de l'écran entier.