QScreenCapture Class

This class is used for capturing a screen. More...

Header: #include <QScreenCapture>
CMake: find_package(Qt6 REQUIRED COMPONENTS Multimedia)
target_link_libraries(mytarget PRIVATE Qt6::Multimedia)
qmake: QT += multimedia
Since: Qt 6.5
Instantiated By: ScreenCapture
Inherits: QObject

Public Types

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

Properties

Public Functions

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

Public Slots

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

Signals

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

Detailed Description

The class captures a screen. It is managed by the QMediaCaptureSession class where the captured screen can be displayed in a video preview object or recorded to a file.

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

Screen Capture Limitations

On Qt 6.5.2 and 6.5.3, the following limitations apply to using QScreenCapture:

  • It is only supported with the FFmpeg backend.
  • It is supported on all desktop platforms, except Linux with Wayland compositor, due to Wayland protocol restrictions and limitations.
  • It is not supported on mobile operating systems, except on Android. There, you might run into performance issues as the class is currently implemented via QScreen::grabWindow, which is not optimal for the use case.
  • On Linux, it works with X11, but it has not been tested on embedded.
  • In most cases, we set a screen capture frame rate that equals the screen refresh rate, except on Windows, where the rate might be flexible. Such a frame rate (75/120 FPS) might cause performance issues on weak CPUs if the captured screen is of 4K resolution.

See also QWindowCapture and QMediaCaptureSession.

Member Type Documentation

enum QScreenCapture::Error

Enumerates error codes that can be signaled by the QScreenCapture class. errorString() provides detailed information about the error cause.

ConstantValueDescription
QScreenCapture::NoError0No error
QScreenCapture::InternalError1Internal screen capturing driver error
QScreenCapture::CapturingNotSupported2Capturing is not supported
QScreenCapture::CaptureFailed4Capturing screen failed
QScreenCapture::NotFound5Selected screen not found

Property Documentation

active : bool

This property holds whether the capturing is currently active.

Access functions:

bool isActive() const
void setActive(bool active)

Notifier signal:

void activeChanged(bool)

[read-only] error : const Error

This property holds the code of the last error.

Access functions:

QScreenCapture::Error error() const

Notifier signal:

void errorChanged()

[read-only] errorString : const QString

This property holds a human readable string describing the cause of error.

Access functions:

QString errorString() const

Notifier signal:

void errorChanged()

screen : QScreen*

This property holds the screen for capturing.

Access functions:

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

Notifier signal:

void screenChanged(QScreen *)

Member Function Documentation

QMediaCaptureSession *QScreenCapture::captureSession() const

Returns the capture session this QScreenCapture is connected to.

Use QMediaCaptureSession::setScreenCapture() to connect the camera to a session.

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

Signals when an error occurs, along with the errorString.

[slot] void QScreenCapture::start()

Starts screen capture.

[slot] void QScreenCapture::stop()

Stops screen capture.