/****************************************************************************
**
** 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/digitalclock
    \title Digital Clock Example
    \ingroup examples-widgets
    \brief The Digital Clock example shows how to use QLCDNumber to display a
    number with LCD-like digits.

    \borderedimage digitalclock-example.png
    \caption Screenshot of the Digital Clock example

    This example also demonstrates how QTimer can be used to update a widget
    at regular intervals.

    \section1 DigitalClock Class Definition

    The \c DigitalClock class provides a clock widget showing the time with
    hours and minutes separated by a blinking colon. We subclass QLCDNumber
    and implement a private slot called \c showTime() to update the clock
    display:

    \snippet widgets/digitalclock/digitalclock.h 0

    \section1 DigitalClock Class Implementation

    \snippet widgets/digitalclock/digitalclock.cpp 0

    In the constructor, we first change the look of the LCD numbers. The
    QLCDNumber::Filled style produces raised segments filled with the
    foreground color (typically black). We also set up a one-second timer
    to keep track of the current time, and we connect
    its \l{QTimer::timeout()}{timeout()} signal to the private \c showTime() slot
    so that the display is updated every second. Then, we
    call the \c showTime() slot; without this call, there would be a one-second
    delay at startup before the time is shown.

    \snippet widgets/digitalclock/digitalclock.cpp 1
    \snippet widgets/digitalclock/digitalclock.cpp 2

    The \c showTime() slot is called whenever the clock display needs
    to be updated.

    The current time is converted into a string with the format "hh:mm".
    When QTime::second() is a even number, the colon in the string is
    replaced with a space. This makes the colon appear and vanish every
    other second.

    Finally, we call QLCDNumber::display() to update the widget.
*/
