Auf dieser Seite

QScreenCapture Class

Diese Klasse dient zur Erstellung von Screenshots. Mehr...

Header: #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
Erbt von: 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
std::optional<qreal> maximumFrameRate() const
QScreen *screen() const
void setMaximumFrameRate(std::optional<qreal> frameRate)
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 maximumFrameRateChanged()
void screenChanged(QScreen *)

Ausführliche Beschreibung

Die Klasse erfasst einen Bildschirm. Sie wird von der Klasse „ QMediaCaptureSession “ verwaltet, wo der erfasste Bildschirm in einem Video-Vorschau-Objekt angezeigt oder in einer Datei aufgezeichnet werden kann.

Der folgende Codeausschnitt zeigt, wie der primäre Bildschirm erfasst und das Ergebnis in einem „ QVideoWidget “ angezeigt wird:

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();

Einschränkungen bei der Bildschirmaufnahme

Ab Qt 6.5.2 gelten für die Verwendung von `QScreenCapture` die folgenden Einschränkungen:

  • Die Funktion wird nur mit dem FFmpeg-Backend unterstützt.
  • Auf einigen Plattformen werden keine neuen Videobilder ausgegeben, während der aufgenommene Bildschirminhalt unverändert bleibt. Anwendungen sollten sich daher nicht darauf verlassen, einen kontinuierlichen Strom von Bildern mit der angeforderten Bildrate zu erhalten.
  • Auf Linux-Systemen, die den Wayland-Compositor verwenden, ist die Bildschirmaufnahme-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 ` festzulegen und abzurufen. Stattdessen zeigt das Betriebssystem beim Aufruf von ` QScreenCapture::setActive(true)` einen Assistenten zur Bildschirmauswahl an. Die Bildschirmaufnahmefunktion erfordert die Installation des ScreenCast-Dienstes, der über das XDG Desktop Portal und PipeWire (0.3) unterstützt wird. Diese Einschränkungen können sich in Zukunft ändern.
  • Auf mobilen Betriebssystemen wird diese Funktion nicht unterstützt, mit Ausnahme von Android. Für die Bildschirmaufnahme unter 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 Embedded-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 Bildrate für die Bildschirmaufnahme fest, die der Bildwiederholfrequenz des Bildschirms entspricht, außer unter Windows, wo die Bildrate flexibel sein kann. Eine solche Bildrate (75/120 FPS) kann auf schwachen CPUs zu Leistungsproblemen führen, wenn der aufgenommene Bildschirm eine 4K-Auflösung hat. Bei EGLFS ist die Bildaufnahmerate derzeit auf 30 FPS festgelegt.

Siehe auch QWindowCapture und QMediaCaptureSession.

Dokumentation zu Mitgliedstypen

enum QScreenCapture::Error

Listet die Fehlercodes auf, die von der Klasse „ QScreenCapture “ gemeldet werden können. Die Methode „ errorString()“ liefert detaillierte Informationen zur Fehlerursache.

KonstanteWertBeschreibung
QScreenCapture::NoError0Kein Fehler
QScreenCapture::InternalError1Interner Fehler des Bildschirmaufzeichnungs-Treibers
QScreenCapture::CapturingNotSupported2Die Bildschirmaufnahme wird nicht unterstützt
QScreenCapture::CaptureFailed4Bildschirmaufnahme fehlgeschlagen
QScreenCapture::NotFound5Ausgewählter Bildschirm nicht gefunden

Dokumentation zu den Eigenschaften

active : bool

Diese Eigenschaft gibt an, ob die Erfassung derzeit aktiv ist.

Zugriffsfunktionen:

bool isActive() const
void setActive(bool active)

Benachrichtigungssignal:

void activeChanged(bool)

Siehe auch „ start()“ und „ stop()“.

[read-only] error : Error

Diese Eigenschaft enthält den Code des letzten Fehlers.

Zugriffsfunktionen:

QScreenCapture::Error error() const

Benachrichtigungssignal:

void errorChanged()

[read-only] errorString : QString

Diese Eigenschaft enthält eine für Menschen lesbare Zeichenfolge, die die Fehlerursache beschreibt.

Zugriffsfunktionen:

QString errorString() const

Benachrichtigungssignal:

void errorChanged()

[since 6.12] maximumFrameRate : std::optional<qreal>

Diese Eigenschaft legt die Obergrenze für die Bildrate bei Bildschirmaufnahmen fest.

Dieser Wert kann festgelegt werden, um die standardmäßig verwendete Bildaufnahmefrequenz – die sich beispielsweise an der Bildwiederholfrequenz des Bildschirms orientiert – zu überschreiben; dies gilt jedoch nur als Obergrenze, da die Bildschirmaufnahme Bilder mit variabler Frequenz erzeugt. Es wird nicht empfohlen, diesen Wert höher als die Bildwiederholfrequenz des Bildschirms einzustellen, da dies zu Fehlern führen kann.

Änderungen an dieser Eigenschaft werden erst wirksam, wenn der „ QScreenCapture “ das nächste Mal aktiv wird.

Diese Aufzählung wurde in Qt 6.12 eingeführt.

Zugriffsfunktionen:

std::optional<qreal> maximumFrameRate() const
void setMaximumFrameRate(std::optional<qreal> frameRate)

Notifier-Signal:

void maximumFrameRateChanged()

screen : QScreen*

Diese Eigenschaft legt fest, welcher Bildschirm für die Aufnahme verwendet wird.

Wenn „null QScreen “ festgelegt ist, wird „ QGuiApplication::primaryScreen “ ausgewählt, sobald die Instanz „ QScreenCapture “ aktiviert wird.

Zugriffsfunktionen:

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

Notifier-Signal:

void screenChanged(QScreen *)

Siehe auch „ QGuiApplication::screens()“ und „ QGuiApplication::primaryScreen()“.

Dokumentation der Mitgliedsfunktionen

QMediaCaptureSession *QScreenCapture::captureSession() const

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

Verwenden Sie „ QMediaCaptureSession::setScreenCapture()“, um die Bildschirmaufnahme mit einer Sitzung zu verknüpfen.

[signal] void QScreenCapture::errorChanged()

Dieses Signal wird ausgelöst, wenn die Eigenschaften „ error “ oder „ errorString “ geändert werden.

Dieses Signal wird nicht ausgelöst, wenn mehrere identische Fehler auftreten. Um solche Fehler zu verfolgen, verwenden Sie das Signal „ errorOccurred “.

Hinweis: Notifier -Signal für die Eigenschaften „ error “ und „ errorString “.

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

Gibt bei Auftreten eines „ error “ eine Meldung aus, zusammen mit dem „ errorString “.

[slot] void QScreenCapture::start()

Beginnt mit der Erfassung des „ screen “.

Dies entspricht der Einstellung der Eigenschaft „ active “ auf „true“.

[slot] void QScreenCapture::stop()

Beendet die Aufzeichnung.

Dies entspricht der Einstellung der Eigenschaft „ active “ auf „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.