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.