QScreenCapture Class
Cette classe sert à effectuer une capture d'écran. En savoir plus...
| En-tête : | #include <QScreenCapture> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Multimedia) target_link_libraries(mytarget PRIVATE Qt6::Multimedia) |
| qmake : | QT += multimedia |
| Depuis : | Qt 6.5 |
| En QML : | ScreenCapture |
| Hérite de : | QObject |
Types publics
| enum | Error { NoError, InternalError, CapturingNotSupported, CaptureFailed, NotFound } |
Propriétés
|
|
Fonctions publiques
| QMediaCaptureSession * | captureSession() const |
| QScreenCapture::Error | error() const |
| QString | errorString() const |
| bool | isActive() const |
| std::optional<qreal> | maximumFrameRate() const |
| QScreen * | screen() const |
| void | setMaximumFrameRate(std::optional<qreal> frameRate) |
| void | setScreen(QScreen *screen) |
Emplacements publics
Signaux
| void | activeChanged(bool) |
| void | errorChanged() |
| void | errorOccurred(QScreenCapture::Error error, const QString &errorString) |
| void | maximumFrameRateChanged() |
| void | screenChanged(QScreen *) |
Description détaillée
Cette classe permet de capturer un écran. Elle est gérée par la classe QMediaCaptureSession, qui permet d'afficher l'écran capturé dans un objet de prévisualisation vidéo ou de l'enregistrer dans un fichier.
L'extrait de code suivant montre comment capturer l'écran principal et afficher le résultat dans un objet « QVideoWidget » :
QMediaCaptureSession session;
QScreenCapture screenCapture;
session.setScreenCapture(&screenCapture);
QVideoWidget videoWidget;
session.setVideoOutput(&videoWidget);
videoWidget.show();
// With no screen set, the primary screen is captured once capturing starts.
screenCapture.start();Limitations de la capture d'écran
Sous Qt 6.5.2 et versions ultérieures, les limitations suivantes s'appliquent à l'utilisation de QScreenCapture :
- Cette fonctionnalité n’est prise en charge qu’avec le backend FFmpeg.
- Sur certaines plateformes, aucune nouvelle image vidéo n’est émise tant que le contenu de l’écran capturé reste inchangé. Les applications ne doivent donc pas compter sur la réception d’un flux continu d’images à la fréquence d’images demandée.
- Sur les systèmes Linux utilisant le compositeur Wayland, l’implémentation de la capture d’écran est expérimentale et présente les limitations suivantes. En raison des restrictions du protocole Wayland, il est impossible de définir et d’obtenir l’écran cible via l’API de la classe `
QScreenCapture`. À la place, le système d’exploitation affichera un assistant de sélection d’écran lors de l’appel de `QScreenCapture::setActive(true)`. La fonctionnalité de capture d’écran nécessite l’installation du service ScreenCast pris en charge via XDG Desktop Portal et PipeWire (0.3). Ces limitations sont susceptibles d’évoluer à l’avenir. - Elle n’est pas prise en charge sur les systèmes d’exploitation mobiles, à l’exception d’Android. La capture d’écran sur Android nécessite l’ajout d’une autorisation supplémentaire pour le service au premier plan Android dans le fichier `
AndroidManifest.xml` :<manifest ...> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" /> <application ...> <service android:name="org.qtproject.qt.android.multimedia.QtScreenCaptureService" android:foregroundServiceType="mediaProjection" android:exported="false"/> </service> </application> </manifest> - Sur les systèmes embarqués avec EGLFS, ses fonctionnalités sont limitées. Pour les applications Qt Quick, la classe est actuellement implémentée via QQuickWindow::grabWindow, ce qui peut entraîner des problèmes de performances.
- Dans la plupart des cas, nous définissons une fréquence d’images de capture d’écran égale à la fréquence de rafraîchissement de l’écran, sauf sous Windows, où cette fréquence peut être variable. Une telle fréquence d’images (75/120 FPS) peut entraîner des problèmes de performances sur des processeurs peu puissants si l’écran capturé est en résolution 4K. Sur EGLFS, la fréquence d'images de capture est actuellement verrouillée à 30 FPS.
Voir également QWindowCapture et QMediaCaptureSession.
Documentation sur les types de membres
enum QScreenCapture::Error
Énumère les codes d'erreur pouvant être signalés par la classe ` QScreenCapture `. La méthode ` errorString()` fournit des informations détaillées sur la cause de l'erreur.
| Constante | Valeur | Description |
|---|---|---|
QScreenCapture::NoError | 0 | Aucune erreur |
QScreenCapture::InternalError | 1 | Erreur interne du pilote de capture d'écran |
QScreenCapture::CapturingNotSupported | 2 | La capture n'est pas prise en charge |
QScreenCapture::CaptureFailed | 4 | Échec de la capture d'écran |
QScreenCapture::NotFound | 5 | Écran sélectionné introuvable |
Documentation sur les propriétés
active : bool
Cette propriété indique si la capture est actuellement active.
Fonctions d'accès :
| bool | isActive() const |
| void | setActive(bool active) |
Signal de notification :
| void | activeChanged(bool) |
Voir également start() et stop().
[read-only] error : Error
Cette propriété contient le code de la dernière erreur.
Fonctions d'accès :
| QScreenCapture::Error | error() const |
Signal de notification :
| void | errorChanged() |
[read-only] errorString : QString
Cette propriété contient une chaîne de caractères lisible décrivant la cause de l'erreur.
Fonctions d'accès :
| QString | errorString() const |
Signal de notification :
| void | errorChanged() |
[since 6.12] maximumFrameRate : std::optional<qreal>
Cette propriété définit la limite supérieure de la fréquence d'images de la capture d'écran.
Elle peut être définie pour remplacer la fréquence d'images de capture utilisée par défaut, en fonction, par exemple, de la fréquence de rafraîchissement de l'écran, mais uniquement en tant que limite supérieure, car la capture d'écran produit des images à une fréquence variable. Il n'est pas recommandé de définir cette valeur à un niveau supérieur à la fréquence de rafraîchissement de l'écran, car cela peut entraîner des erreurs.
Toute modification apportée à cette propriété est appliquée dès la prochaine activation de l'QScreenCapture.
Cette énumération a été introduite dans Qt 6.12.
Fonctions d'accès :
| std::optional<qreal> | maximumFrameRate() const |
| void | setMaximumFrameRate(std::optional<qreal> frameRate) |
Signal de notification :
| void | maximumFrameRateChanged() |
screen : QScreen*
Cette propriété détermine l'écran à capturer.
Si la valeur « null QScreen » est définie, l'QGuiApplication::primaryScreen sera sélectionné lorsque l'instance QScreenCapture sera activée.
Fonctions d'accès :
| QScreen * | screen() const |
| void | setScreen(QScreen *screen) |
Signal de notification :
| void | screenChanged(QScreen *) |
Voir également QGuiApplication::screens() et QGuiApplication::primaryScreen().
Documentation des fonctions membres
QMediaCaptureSession *QScreenCapture::captureSession() const
Renvoie la session de capture à laquelle cette instance de ` QScreenCapture ` est associée.
Utilisez la fonction ` QMediaCaptureSession::setScreenCapture()` pour associer la capture d'écran à une session.
[signal] void QScreenCapture::errorChanged()
Ce signal est émis lorsque les propriétés ` error ` ou ` errorString ` sont modifiées.
Ce signal n'est pas émis lorsque plusieurs erreurs identiques sont levées. Pour suivre ces erreurs, utilisez le signal errorOccurred.
Remarque : signalde notification pour les propriétés error et errorString.
[signal] void QScreenCapture::errorOccurred(QScreenCapture::Error error, const QString &errorString)
Signale qu’une « error » s’est produite, accompagnée de l’ errorString.
[slot] void QScreenCapture::start()
Commence à capturer l'screen.
Cela revient à définir la propriété active sur « true ».
[slot] void QScreenCapture::stop()
Arrête l'enregistrement.
Cela revient à définir la propriété « active » sur «false».
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.