Sur cette page

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

void setActive(bool active)
void start()
void stop()

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.

ConstanteValeurDescription
QScreenCapture::NoError0Aucune erreur
QScreenCapture::InternalError1Erreur interne du pilote de capture d'écran
QScreenCapture::CapturingNotSupported2La capture n'est pas prise en charge
QScreenCapture::CaptureFailed4Échec de la capture d'écran
QScreenCapture::NotFound5É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.