summaryrefslogtreecommitdiffstats
path: root/examples/widgets/doc/src/wiggly.qdoc
diff options
context:
space:
mode:
Diffstat (limited to 'examples/widgets/doc/src/wiggly.qdoc')
-rw-r--r--examples/widgets/doc/src/wiggly.qdoc168
1 files changed, 0 insertions, 168 deletions
diff --git a/examples/widgets/doc/src/wiggly.qdoc b/examples/widgets/doc/src/wiggly.qdoc
deleted file mode 100644
index d70d609e2b..0000000000
--- a/examples/widgets/doc/src/wiggly.qdoc
+++ /dev/null
@@ -1,168 +0,0 @@
-/****************************************************************************
-**
-** 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/wiggly
- \title Wiggly Example
- \ingroup examples-widgets
- \brief The Wiggly example shows how to animate a widget using
- QBasicTimer and \l{QObject::timerEvent()}{timerEvent()}. In
- addition, the example demonstrates how to use QFontMetrics to
- determine the size of text on screen.
-
- \borderedimage wiggly-example.png
- \caption Screenshot of the Wiggly example
-
- QBasicTimer is a low-level class for timers. Unlike QTimer,
- QBasicTimer doesn't inherit from QObject; instead of emitting a
- \l{QTimer::timeout()}{timeout()} signal when a certain amount of
- time has passed, it sends a QTimerEvent to a QObject of our
- choice. This makes QBasicTimer a more lightweight alternative to
- QTimer. Qt's built-in widgets use it internally, and it is
- provided in Qt's API for highly-optimized applications (such as
- embedded applications).
-
- The example consists of two classes:
-
- \list
- \li \c WigglyWidget is the custom widget displaying the text
- in a wiggly line.
-
- \li \c Dialog is the dialog widget allowing the user to enter a
- text. It combines a \c WigglyWidget and a \c QLineEdit.
- \endlist
-
- We will first take a quick look at the \c Dialog class, then we
- will review the \c WigglyWidget class.
-
- \section1 Dialog Class Definition
-
- \snippet widgets/wiggly/dialog.h 0
-
- The \c Dialog class provides a dialog widget that allows the user
- to enter a text. The text is then rendered by \c WigglyWidget.
-
- \section1 Dialog Class Implementation
-
- \snippet widgets/wiggly/dialog.cpp 0
-
- In the constructor we create a wiggly widget along with a
- \l{QLineEdit}{line edit}, and we put the two widgets in a
- vertical layout. We connect the line edit's \l
- {QLineEdit::textChanged()}{textChanged()} signal to the wiggly
- widget's \c setText() slot to obtain the real time interaction
- with the wiggly widget. The widget's default text is "Hello
- world!".
-
- \section1 WigglyWidget Class Definition
-
- \snippet widgets/wiggly/wigglywidget.h 0
-
- The \c WigglyWidget class provides the wiggly line displaying the
- text. We subclass QWidget and reimplement the standard \l
- {QWidget::paintEvent()}{paintEvent()} and \l
- {QObject::timerEvent()}{timerEvent()} functions to draw and update
- the widget. In addition we implement a public \c setText() slot
- that sets the widget's text.
-
- The \c timer variable, of type QBasicTimer, is used to update the
- widget at regular intervals, making the widget move. The \c text
- variable is used to store the currently displayed text, and \c
- step to calculate position and color for each character on the
- wiggly line.
-
- \section1 WigglyWidget Class Implementation
-
- \snippet widgets/wiggly/wigglywidget.cpp 0
-
- In the constructor, we make the widget's background slightly
- lighter than the usual background using the QPalette::Midlight
- color role. The background role defines the brush from the
- widget's palette that Qt uses to paint the background. Then we
- enlarge the widget's font with 20 points.
-
- Finally we start the timer; the call to QBasicTimer::start()
- makes sure that \e this particular wiggly widget will receive the
- timer events generated when the timer times out (every 60
- milliseconds).
-
- \snippet widgets/wiggly/wigglywidget.cpp 1
- \snippet widgets/wiggly/wigglywidget.cpp 2
-
- The \c paintEvent() function is called whenever a QPaintEvent is
- sent to the widget. Paint events are sent to widgets that need to
- update themselves, for instance when part of a widget is exposed
- because a covering widget was moved. For the wiggly widget, a
- paint event will also be generated every 60 milliseconds from
- the \c timerEvent() slot.
-
- The \c sineTable represents y-values of the sine curve,
- multiplied by 100. It is used to make the wiggly widget move
- along the sine curve.
-
- The QFontMetrics object provides information about the widget's
- font. The \c x variable is the horizontal position where we start
- drawing the text. The \c y variable is the vertical position of
- the text's base line. Both variables are computed so that the
- text is horizontally and vertically centered. To compute the base
- line, we take into account the font's ascent (the height of the
- font above the base line) and font's descent (the height of the
- font below the base line). If the descent equals the ascent, they
- cancel out each other and the base line is at \c height() / 2.
-
- \snippet widgets/wiggly/wigglywidget.cpp 3
- \snippet widgets/wiggly/wigglywidget.cpp 4
-
- Each time the \c paintEvent() function is called, we create a
- QPainter object \c painter to draw the contents of the widget.
- For each character in \c text, we determine the color and the
- position on the wiggly line based on \c step. In addition, \c x
- is incremented by the character's width.
-
- For simplicity, we assume that QFontMetrics::horizontalAdvance(\c text)
- returns the sum of the individual character advances
- (QFontMetrics::horizontalAdvance(\c text[i])). In practice, this is not
- always the case because QFontMetrics::horizontalAdvance(\c text) also takes
- into account the kerning between certain letters (e.g., 'A' and
- 'V'). The result is that the text isn't perfectly centered. You
- can verify this by typing "AVAVAVAVAVAV" in the line edit.
-
- \snippet widgets/wiggly/wigglywidget.cpp 5
- \snippet widgets/wiggly/wigglywidget.cpp 6
-
- The \c timerEvent() function receives all the timer events that
- are generated for this widget. If a timer event is sent from the
- widget's QBasicTimer, we increment \c step to make the text move,
- and call QWidget::update() to refresh the display. Any other
- timer event is passed on to the base class's implementation of
- the \l{QWidget::timerEvent()}{timerEvent()} function.
-
- The QWidget::update() slot does not cause an immediate repaint;
- instead the slot schedules a paint event for processing when Qt
- returns to the main event loop. The paint events are then handled
- by \c{WigglyWidget}'s \c paintEvent() function.
-*/