// 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
    \brief Capturing a screen or window.
    \meta {tag} {widgets}

    \e{Screen Capture} demonstrates how to capture a screen using
    QScreenCapture. The example shows a list of screens and a live preview of
    the selected item using a QMediaCaptureSession and a QVideoWidget. There is
    also a button to start and stop the capturing.

    \image screencapture.jpg

    \include examples-run.qdocinc

    \section1 Application Structure

    The example consists of two custom classes. The UI and all screen capture
    functionality is implemented in the class ScreenCapturePreview. The class
    ScreenListModel only serves as a model behind the QListView widget. The
    main function creates a ScreenCapturePreview object, which in turn creates
    an instance of QScreenCapture, QMediaCaptureSession and QVideoWidget in
    addition to all the UI widgets.

    The list is populated with the return value of \l QGuiApplication::screens().

    When a list item is selected, it is connected to the QScreenCapture object with
    \l QScreenCapture::setScreen().
    The QScreenCapture object is connected to the QMediaCaptureSession object with
    \l QMediaCaptureSession::setScreenCapture(), which in turn is connected to the
    QVideoWidget object with \l QMediaCaptureSession::setVideoOutput(). Thus the
    screen 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().

    A QMessageBox pops up if the QScreenCapture::errorOccurred signal is emitted.
*/
