blob: 405c59dbd8ebe7ecfb1d2779698722d294a24233 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\example screencapture
\title Screen Capture Example
\ingroup multimedia_examples
\examplecategory {Multimedia}
\brief Capturing a screen or window.
\meta {tag} {widgets}
\e{Screen Capture} demonstrates how to capture a screen or window using
QScreenCapture and QWindowCapture. The example shows a list of screens and
windows and displays a live preview of the selected item using a
QMediaCaptureSession and a QVideoWidget. Capturing can be started and stopped
with a \l{QPushButton}{button}.
\image screencapture.jpg
\include examples-run.qdocinc
\section1 Application Structure
The example consists of three custom classes. The UI and all screen capture
functionality is implemented in the class ScreenCapturePreview. The classes
ScreenListModel and WindowListModel only serve as models behind the two
QListView widgets. The main function creates a ScreenCapturePreview object,
which in turn creates instances of QScreenCapture and QWindowCapture,
and a QMediaCaptureSession and QVideoWidget, in addition to all the UI widgets.
The screen and window models are populated with the return values of
\l QGuiApplication::screens() and \l QWindowCapture::capturableWindows(),
respectively.
When a list item is selected, it is connected to the QScreenCapture object
with \l{QScreenCapture::}{setScreen()}, or to the QWindowCapture object
with \l{QWindowCapture::}{setWindow()}. The capture object is connected to
the QMediaCaptureSession object with \l{QMediaCaptureSession::}{setScreenCapture()}
and \l{QMediaCaptureSession::}{setWindowCapture()}, respectively.
The capture session in turn is connected to the QVideoWidget object with
\l{QMediaCaptureSession::}{setVideoOutput()}. Thus, the capture output is
previewed in the video widget on the right hand side of the UI.
The start/stop button calls \l QScreenCapture::start() and \l QScreenCapture::stop(),
or \l QWindowCapture::start() and \l QWindowCapture::stop().
A QMessageBox pops up if the \l{QScreenCapture::}{errorOccurred} signal is emitted.
*/
|