- Qt 6.12
- Qt Multimedia
- QML Types
- ScreenCapture
- Qt 6.12.0 Reference Documentation

# ScreenCapture QML Type

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

Import Statement: | `import QtMultimedia`
Since: | Qt 6.5
In C++: | QScreenCapture

- List of all members, including inherited members

## Properties

- active : bool
- error : enumeration
- errorString : string
- frameRate : real `(since 6.12)`
- screen : Screen

## Detailed Description

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

The code below shows a simple capture session with ScreenCapture playing back the captured primary screen view in VideoOutput.

     CaptureSession {
         id: captureSession
         screenCapture: ScreenCapture {
             id: screenCapture
             active: true
         }
         videoOutput: VideoOutput {
             id: videoOutput
         }
     }

## Screen Capture Limitations

On Qt 6.5.2 and above, the following limitations apply to using ScreenCapture:

- It is only supported with the FFmpeg backend.
- On Linux systems using the Wayland compositor, the screen capture implementation is experimental and comes with the following limitations. Due to restrictions of the Wayland protocol, it's impossible to set and get the target screen via the API of the `QScreenCapture` class. Instead, the OS will show a screen selection wizard upon invoking `QScreenCapture::setActive(true)`. The screen capture feature requires the installation of the ScreenCast service supported via XDG Desktop Portal and {https://pipewire.org/}{PipeWire} (0.3). These limitations might change in the future.
- It is not supported on mobile operating systems, except on Android. Screen Capture on Android needs additional Android foreground service permission to be added to the `AndroidManifest.xml` file:

       <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>

- On embedded with EGLFS, it has limited functionality. 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 WindowCapture and CaptureSession.

## Property Documentation

### active : bool

Describes whether the capturing is currently active.

### error : enumeration `[read-only]`

Returns a code of the last error.

### errorString : string `[read-only]`

Returns a human readable string describing the cause of error.

### frameRate : real `[since 6.12]`

The target screen capture framerate.

Actual frame rate depends on the platform. For platforms with fixed rate capture, this frame rate is followed. For platforms with variable rate capture, this frame rate is either used as the polling rate (maximum frame rate) or completely ignored.

If -1, a platform-dependent default is used.

This property was introduced in Qt 6.12.

### screen : Screen

Describes the screen for capturing.

If null `Screen` is set, the primary screen will be selected when the `ScreenCapture` instance gets activated.