/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
    \example widgets/stylesheet
    \title Style Sheet Example
    \ingroup examples-widgets
    \brief The Style Sheet Example shows how to use style sheets.

    \borderedimage stylesheet-pagefold.png
    \caption Screen Shot of the Pagefold style sheet

    The Style Sheet example shows how widgets can be styled using Qt Style Sheets.
    You can open the style editor by selecting \uicontrol File > \uicontrol Edit Style Sheet,
    to select an existing style sheet or design your own style and load it.

    The Style Sheet example consists of 2 classes:
    \list
    \li \c MainWindow
    \li \c StyleSheetEditor
    \endlist


    \section1 MainWindow Class

    \c MainWindow inherits QWidget, and is the application's main window defined in
    \c mainwindow.ui. The style of \c MainWindow can be modified with \c StyleSheetEditor.


    \section1 StyleSheetEditor Class

    \c StyleSheetEditor enables you to open an editor where you can load an existing style sheet.
    It is also possible to define a new stylesheet and load it. Its layout is defined in
    \c stylesheeteditor.ui.

    \quotefromfile widgets/stylesheet/stylesheeteditor.cpp
    \skipto on_styleCombo_activated
    \printline on_styleCombo_activated

    Sets the specified \a styleName and grays the \c applyButton.

    \skipto on_styleSheetCombo_activated
    \printline on_styleSheetCombo_activated

    Loads the stylesheet from \c styleSheetName.

    \skipto on_styleTextEdit_textChanged()
    \printline on_styleTextEdit_textChanged()

    Enables the \c applyButton when the text in the buffer has changed.

    \skipto on_applyButton_clicked()
    \printline on_applyButton_clicked()

    Sets the stylesheet properties in \l qApp and disables the \c applyButton.

    \skipto loadStyleSheet(const QString &sheetName)
    \printline loadStyleSheet(const QString &sheetName)

    Loads the specified \a sheetName, and sets its properties in
    \l qApp.

*/

