diff options
author | Jan Arve Sæther <jan-arve.saether@qt.io> | 2023-01-17 11:02:29 +0100 |
---|---|---|
committer | Jan Arve Sæther <jan-arve.saether@qt.io> | 2023-01-31 22:28:30 +0100 |
commit | e08575a18ace251161cc813cfe48db68b8b15eee (patch) | |
tree | 6c8743dc52d58f6a192f4932648dafa46b5eaef7 | |
parent | 2db2eb600ad860e3822605990e731841a5e86e97 (diff) |
Remove wiggly example
It demonstrates timerEvent() and some QFontMetrics
There are other examples that demonstrates this
Pick-to: 6.5
Change-Id: I4ad6f30c8ef93c995f980545ed88ab13b9aa9c7d
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
-rw-r--r-- | doc/global/manifest-meta.qdocconf | 1 | ||||
-rw-r--r-- | doc/src/images/wiggly-example.png | bin | 8456 -> 0 bytes | |||
-rw-r--r-- | examples/widgets/doc/src/wiggly.qdoc | 147 | ||||
-rw-r--r-- | examples/widgets/widgets/CMakeLists.txt | 1 | ||||
-rw-r--r-- | examples/widgets/widgets/widgets.pro | 1 | ||||
-rw-r--r-- | examples/widgets/widgets/wiggly/CMakeLists.txt | 38 | ||||
-rw-r--r-- | examples/widgets/widgets/wiggly/dialog.cpp | 27 | ||||
-rw-r--r-- | examples/widgets/widgets/wiggly/dialog.h | 19 | ||||
-rw-r--r-- | examples/widgets/widgets/wiggly/main.cpp | 16 | ||||
-rw-r--r-- | examples/widgets/widgets/wiggly/wiggly.pro | 11 | ||||
-rw-r--r-- | examples/widgets/widgets/wiggly/wigglywidget.cpp | 65 | ||||
-rw-r--r-- | examples/widgets/widgets/wiggly/wigglywidget.h | 32 | ||||
-rw-r--r-- | src/corelib/kernel/qbasictimer.cpp | 2 | ||||
-rw-r--r-- | src/corelib/kernel/qtimer.cpp | 2 |
14 files changed, 2 insertions, 360 deletions
diff --git a/doc/global/manifest-meta.qdocconf b/doc/global/manifest-meta.qdocconf index 9a705b2e4d..fa88dc48b4 100644 --- a/doc/global/manifest-meta.qdocconf +++ b/doc/global/manifest-meta.qdocconf @@ -178,7 +178,6 @@ manifestmeta.ios.names = "QtCore/Contiguous Cache Example" \ "QtWidgets/Sliders Example" \ "QtWidgets/Validators Example" \ "QtWidgets/Window Flags Example" \ - "QtWidgets/Wiggly Example" \ "QtQuick/Qt Quick Examples - Animation" \ "QtQuick/Qt Quick Examples - Canvas" \ "QtQuick/Qt Quick Examples - Drag and Drop" \ diff --git a/doc/src/images/wiggly-example.png b/doc/src/images/wiggly-example.png Binary files differdeleted file mode 100644 index 5ac0d856b3..0000000000 --- a/doc/src/images/wiggly-example.png +++ /dev/null diff --git a/examples/widgets/doc/src/wiggly.qdoc b/examples/widgets/doc/src/wiggly.qdoc deleted file mode 100644 index 30a2a34f1b..0000000000 --- a/examples/widgets/doc/src/wiggly.qdoc +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only - -/*! - \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!", with an emoji thrown in for fun. - - \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. - Since we are going to paint the character symbols individually, we - extract the unique unicode code point for each character from \c - text, and convert it to a string \c symbol. For each \c symbol, we - determine the color and the position on the wiggly line based on - \c step and its \c offset from the start of the text. In addition, - \c x is incremented by the symbol's width. - - For simplicity, we assume that QFontMetrics::horizontalAdvance(\c text) - returns the sum of the individual character advances - (QFontMetrics::horizontalAdvance(\c symbol)). 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. -*/ diff --git a/examples/widgets/widgets/CMakeLists.txt b/examples/widgets/widgets/CMakeLists.txt index 06f57d1e28..a5f184880e 100644 --- a/examples/widgets/widgets/CMakeLists.txt +++ b/examples/widgets/widgets/CMakeLists.txt @@ -26,5 +26,4 @@ qt_internal_add_example(tablet) qt_internal_add_example(tetrix) qt_internal_add_example(tooltips) qt_internal_add_example(validators) -qt_internal_add_example(wiggly) qt_internal_add_example(windowflags) diff --git a/examples/widgets/widgets/widgets.pro b/examples/widgets/widgets/widgets.pro index 3b2f99cf54..4020029540 100644 --- a/examples/widgets/widgets/widgets.pro +++ b/examples/widgets/widgets/widgets.pro @@ -21,5 +21,4 @@ SUBDIRS = analogclock \ tetrix \ tooltips \ validators \ - wiggly \ windowflags diff --git a/examples/widgets/widgets/wiggly/CMakeLists.txt b/examples/widgets/widgets/wiggly/CMakeLists.txt deleted file mode 100644 index c529c20bfa..0000000000 --- a/examples/widgets/widgets/wiggly/CMakeLists.txt +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: BSD-3-Clause - -cmake_minimum_required(VERSION 3.16) -project(wiggly LANGUAGES CXX) - -if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") -endif() - -set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/widgets/wiggly") - -find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets) - -qt_standard_project_setup() - -qt_add_executable(wiggly - dialog.cpp dialog.h - main.cpp - wigglywidget.cpp wigglywidget.h -) - -set_target_properties(wiggly PROPERTIES - WIN32_EXECUTABLE TRUE - MACOSX_BUNDLE TRUE -) - -target_link_libraries(wiggly PRIVATE - Qt6::Core - Qt6::Gui - Qt6::Widgets -) - -install(TARGETS wiggly - RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" - BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" - LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" -) diff --git a/examples/widgets/widgets/wiggly/dialog.cpp b/examples/widgets/widgets/wiggly/dialog.cpp deleted file mode 100644 index 0f3aa84fd8..0000000000 --- a/examples/widgets/widgets/wiggly/dialog.cpp +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#include "dialog.h" -#include "wigglywidget.h" - -#include <QLineEdit> -#include <QVBoxLayout> - -//! [0] -Dialog::Dialog(QWidget *parent) - : QDialog(parent) -{ - WigglyWidget *wigglyWidget = new WigglyWidget; - QLineEdit *lineEdit = new QLineEdit; - - QVBoxLayout *layout = new QVBoxLayout(this); - layout->addWidget(wigglyWidget); - layout->addWidget(lineEdit); - - connect(lineEdit, &QLineEdit::textChanged, wigglyWidget, &WigglyWidget::setText); - lineEdit->setText(u8"🖖 " + tr("Hello world!")); - - setWindowTitle(tr("Wiggly")); - resize(360, 145); -} -//! [0] diff --git a/examples/widgets/widgets/wiggly/dialog.h b/examples/widgets/widgets/wiggly/dialog.h deleted file mode 100644 index 1f27668f4a..0000000000 --- a/examples/widgets/widgets/wiggly/dialog.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#ifndef DIALOG_H -#define DIALOG_H - -#include <QDialog> - -//! [0] -class Dialog : public QDialog -{ - Q_OBJECT - -public: - explicit Dialog(QWidget *parent = nullptr); -}; -//! [0] - -#endif diff --git a/examples/widgets/widgets/wiggly/main.cpp b/examples/widgets/widgets/wiggly/main.cpp deleted file mode 100644 index e7df19b6a0..0000000000 --- a/examples/widgets/widgets/wiggly/main.cpp +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#include "dialog.h" - -#include <QApplication> - -int main(int argc, char *argv[]) -{ - QApplication app(argc, argv); - - Dialog dialog; - dialog.show(); - - return app.exec(); -} diff --git a/examples/widgets/widgets/wiggly/wiggly.pro b/examples/widgets/widgets/wiggly/wiggly.pro deleted file mode 100644 index 0e39f18add..0000000000 --- a/examples/widgets/widgets/wiggly/wiggly.pro +++ /dev/null @@ -1,11 +0,0 @@ -QT += widgets - -HEADERS = wigglywidget.h \ - dialog.h -SOURCES = wigglywidget.cpp \ - dialog.cpp \ - main.cpp - -# install -target.path = $$[QT_INSTALL_EXAMPLES]/widgets/widgets/wiggly -INSTALLS += target diff --git a/examples/widgets/widgets/wiggly/wigglywidget.cpp b/examples/widgets/widgets/wiggly/wigglywidget.cpp deleted file mode 100644 index 3e686a67cf..0000000000 --- a/examples/widgets/widgets/wiggly/wigglywidget.cpp +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#include "wigglywidget.h" - -#include <QFontMetrics> -#include <QPainter> -#include <QTimerEvent> - -//! [0] -WigglyWidget::WigglyWidget(QWidget *parent) - : QWidget(parent), step(0) -{ - setBackgroundRole(QPalette::Midlight); - setAutoFillBackground(true); - - QFont newFont = font(); - newFont.setPointSize(newFont.pointSize() + 20); - setFont(newFont); - - timer.start(60, this); -} -//! [0] - -//! [1] -void WigglyWidget::paintEvent(QPaintEvent * /* event */) -//! [1] //! [2] -{ - static constexpr int sineTable[16] = { - 0, 38, 71, 92, 100, 92, 71, 38, 0, -38, -71, -92, -100, -92, -71, -38 - }; - - QFontMetrics metrics(font()); - int x = (width() - metrics.horizontalAdvance(text)) / 2; - int y = (height() + metrics.ascent() - metrics.descent()) / 2; - QColor color; -//! [2] - -//! [3] - QPainter painter(this); -//! [3] //! [4] - int offset = 0; - for (char32_t codePoint : text.toUcs4()) { - int index = (step + offset++) % 16; - color.setHsv((15 - index) * 16, 255, 191); - painter.setPen(color); - QString symbol = QString::fromUcs4(&codePoint, 1); - painter.drawText(x, y - ((sineTable[index] * metrics.height()) / 400), symbol); - x += metrics.horizontalAdvance(symbol); - } -} -//! [4] - -//! [5] -void WigglyWidget::timerEvent(QTimerEvent *event) -//! [5] //! [6] -{ - if (event->timerId() == timer.timerId()) { - ++step; - update(); - } else { - QWidget::timerEvent(event); - } -//! [6] -} diff --git a/examples/widgets/widgets/wiggly/wigglywidget.h b/examples/widgets/widgets/wiggly/wigglywidget.h deleted file mode 100644 index 1c21e52234..0000000000 --- a/examples/widgets/widgets/wiggly/wigglywidget.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#ifndef WIGGLYWIDGET_H -#define WIGGLYWIDGET_H - -#include <QBasicTimer> -#include <QWidget> - -//! [0] -class WigglyWidget : public QWidget -{ - Q_OBJECT - -public: - WigglyWidget(QWidget *parent = nullptr); - -public slots: - void setText(const QString &newText) { text = newText; } - -protected: - void paintEvent(QPaintEvent *event) override; - void timerEvent(QTimerEvent *event) override; - -private: - QBasicTimer timer; - QString text; - int step; -}; -//! [0] - -#endif diff --git a/src/corelib/kernel/qbasictimer.cpp b/src/corelib/kernel/qbasictimer.cpp index 346154b1aa..694692013a 100644 --- a/src/corelib/kernel/qbasictimer.cpp +++ b/src/corelib/kernel/qbasictimer.cpp @@ -36,7 +36,7 @@ QT_BEGIN_NAMESPACE The \l{widgets/wiggly}{Wiggly} example uses QBasicTimer to repaint a widget at regular intervals. - \sa QTimer, QTimerEvent, QObject::timerEvent(), Timers, {Wiggly Example} + \sa QTimer, QTimerEvent, QObject::timerEvent(), Timers, {Affine Transformations} */ diff --git a/src/corelib/kernel/qtimer.cpp b/src/corelib/kernel/qtimer.cpp index 8a94603488..b968c5b46f 100644 --- a/src/corelib/kernel/qtimer.cpp +++ b/src/corelib/kernel/qtimer.cpp @@ -105,7 +105,7 @@ QT_BEGIN_NAMESPACE used; Qt tries to work around these limitations. \sa QBasicTimer, QTimerEvent, QObject::timerEvent(), Timers, - {Analog Clock Example}, {Wiggly Example} + {Analog Clock Example}, {Tetrix Example} */ /*! |