QScreenCapture Class

The QScreenCapture 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 view can be displayed in a window 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 above, the following limitations apply to using QScreenCapture:

  • It is only supported with the FFmpeg backend.
  • It is unsupported on 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 embedded with EGLFS, it has limited functionality. Capturing Widget-based applications works from Qt 6.5.5, and capturring Quick-based applications works from Qt 6.5.6. For Qt Quick applications, the class is currently implemented via QQuickWindow::grabWindow, which can cause performance issues.
  • 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. On EGLFS, the capture frame rate is currently locked to 30 FPS.

See also 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::CaptureFailed3Capturing screen failed
QScreenCapture::NotFound4Selected 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.

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