QScreenCapture Class

Diese Klasse wird für die Erfassung eines Bildschirms verwendet. Mehr...

Kopfzeile: #include <QScreenCapture>
CMake: find_package(Qt6 REQUIRED COMPONENTS Multimedia)
target_link_libraries(mytarget PRIVATE Qt6::Multimedia)
qmake: QT += multimedia
Seit: Qt 6.5
In QML: ScreenCapture
Vererbt: QObject

Öffentliche Typen

enum Error { NoError, InternalError, CapturingNotSupported, CaptureFailed, NotFound }

Eigenschaften

Öffentliche Funktionen

QMediaCaptureSession *captureSession() const
QScreenCapture::Error error() const
QString errorString() const
bool isActive() const
QScreen *screen() const
void setScreen(QScreen *screen)

Öffentliche Slots

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

Signale

void activeChanged(bool)
void errorChanged()
void errorOccurred(QScreenCapture::Error error, const QString &errorString)
void screenChanged(QScreen *)

Ausführliche Beschreibung

Die Klasse nimmt einen Bildschirm auf. Sie wird von der Klasse QMediaCaptureSession verwaltet, wo der erfasste Bildschirm in einem Videovorschauobjekt angezeigt oder in einer Datei aufgezeichnet werden kann.

QMediaCaptureSession session;
QAudioInput audioInput;
session.setAudioInput(&input);
QMediaRecorder recorder;
session.setRecorder(&recorder);
recorder.setQuality(QMediaRecorder::HighQuality);
recorder.setOutputLocation(QUrl::fromLocalFile("test.mp3"));
recorder.record();

Einschränkungen für Screen Capture

Unter Qt 6.5.2 und höher gelten die folgenden Einschränkungen für die Verwendung von QScreenCapture:

  • Es wird nur mit dem FFmpeg Backend unterstützt.
  • Auf Linux-Systemen, die den Wayland-Compositor verwenden, ist die Screen-Capture-Implementierung experimentell und unterliegt den folgenden Einschränkungen. Aufgrund von Einschränkungen des Wayland-Protokolls ist es nicht möglich, den Zielbildschirm über die API der Klasse QScreenCapture zu setzen und abzurufen. Stattdessen zeigt das Betriebssystem beim Aufruf von QScreenCapture::setActive(true) einen Bildschirmauswahl-Assistenten an. Die Bildschirmaufnahmefunktion erfordert die Installation des ScreenCast-Dienstes, der über XDG Desktop Portal und {https://pipewire.org/}{PipeWire} (0.3) unterstützt wird. Diese Einschränkungen können sich in Zukunft ändern.
  • Sie wird auf mobilen Betriebssystemen nicht unterstützt, außer auf Android. Für Screen Capture auf Android muss der Datei AndroidManifest.xml eine zusätzliche Berechtigung für den Android-Vordergrunddienst hinzugefügt werden:
    <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>
  • Auf eingebetteten Systemen mit EGLFS ist die Funktionalität eingeschränkt. Für Qt Quick -Anwendungen wird die Klasse derzeit über QQuickWindow::grabWindow implementiert, was zu Leistungsproblemen führen kann.
  • In den meisten Fällen legen wir eine Bildwiederholrate für die Bildschirmaufnahme fest, die der Bildwiederholrate entspricht, außer unter Windows, wo die Rate flexibel sein kann. Eine solche Bildrate (75/120 FPS) kann auf schwachen CPUs zu Leistungsproblemen führen, wenn der erfasste Bildschirm eine 4K-Auflösung hat. Bei EGLFS ist die Erfassungsbildrate derzeit auf 30 FPS festgelegt.

Siehe auch QWindowCapture und QMediaCaptureSession.

Dokumentation der Mitgliedstypen

enum QScreenCapture::Error

Zählt die Fehlercodes auf, die von der Klasse QScreenCapture gemeldet werden können. errorString() liefert detaillierte Informationen über die Fehlerursache.

KonstanteWertBeschreibung
QScreenCapture::NoError0Kein Fehler
QScreenCapture::InternalError1Interner Bildschirmaufzeichnungstreiberfehler
QScreenCapture::CapturingNotSupported2Capturing wird nicht unterstützt
QScreenCapture::CaptureFailed4Bildschirmerfassung fehlgeschlagen
QScreenCapture::NotFound5Ausgewählter Bildschirm nicht gefunden

Eigenschaft Dokumentation

active : bool

Diese Eigenschaft gibt an, ob die Aufzeichnung gerade aktiv ist.

Zugriffsfunktionen:

bool isActive() const
void setActive(bool active)

Melder-Signal:

void activeChanged(bool)

[read-only] error : const Error

Diese Eigenschaft enthält den Code des letzten Fehlers.

Zugriffsfunktionen:

QScreenCapture::Error error() const

Benachrichtigungssignal:

void errorChanged()

[read-only] errorString : const QString

Diese Eigenschaft enthält eine von Menschen lesbare Zeichenfolge, die die Fehlerursache beschreibt.

Zugriffsfunktionen:

QString errorString() const

Benachrichtigungssignal:

void errorChanged()

screen : QScreen*

Diese Eigenschaft hält den Bildschirm für die Aufnahme fest.

Zugriffsfunktionen:

QScreen *screen() const
void setScreen(QScreen *screen)

Melder-Signal:

void screenChanged(QScreen *)

Member Function Dokumentation

QMediaCaptureSession *QScreenCapture::captureSession() const

Gibt die Aufnahmesitzung zurück, mit der diese QScreenCapture verbunden ist.

Verwenden Sie QMediaCaptureSession::setScreenCapture(), um die Kamera mit einer Sitzung zu verbinden.

[signal] void QScreenCapture::errorOccurred(QScreenCapture::Error error, const QString &errorString)

Signalisiert, wenn eine error auftritt, zusammen mit der errorString.

[slot] void QScreenCapture::start()

Startet die Bildschirmaufnahme.

[slot] void QScreenCapture::stop()

Stoppt die Bildschirmaufnahme.

© 2025 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.