From 1bfa58f11cf6841fc27c3f36670b3448253eef2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Arve=20S=C3=A6ther?= Date: Thu, 26 Jan 2023 16:43:47 +0100 Subject: [PATCH] Remove "Analog Clock Window Example" This is almost exactly the same as the "Analog Clock" (widget) example. "Analog Clock Window Example" demonstrates: * How to render to a QWindow (covered by RasterWindow example) * QPainter and transformations (covered by Analog Clock example) * How to use QTimer (covered by Analog Clock example) Change-Id: I7f20a29798830ed6345eca250e4139cb314cab84 Reviewed-by: Paul Olav Tvete (cherry picked from commit f7db1cfa92896135534f6ab140d1470e56a5d677) Reviewed-by: Qt Cherry-pick Bot --- doc/global/manifest-meta.qdocconf | 2 - examples/gui/CMakeLists.txt | 1 - examples/gui/analogclock/CMakeLists.txt | 40 ------ examples/gui/analogclock/analogclock.pro | 10 -- examples/gui/analogclock/main.cpp | 123 ------------------ .../doc/images/analogclock-window-example.png | Bin 14556 -> 0 bytes .../doc/images/analogclockwindow-viewport.png | Bin 29668 -> 0 bytes examples/gui/doc/src/analogclockwindow.qdoc | 114 ---------------- examples/gui/gui.pro | 1 - .../widgets/analogclock/analogclock.cpp | 6 +- src/gui/doc/qtgui.qdocconf | 2 - src/gui/doc/src/coordsys.qdoc | 35 +++-- 12 files changed, 25 insertions(+), 309 deletions(-) delete mode 100644 examples/gui/analogclock/CMakeLists.txt delete mode 100644 examples/gui/analogclock/analogclock.pro delete mode 100644 examples/gui/analogclock/main.cpp delete mode 100644 examples/gui/doc/images/analogclock-window-example.png delete mode 100644 examples/gui/doc/images/analogclockwindow-viewport.png delete mode 100644 examples/gui/doc/src/analogclockwindow.qdoc diff --git a/doc/global/manifest-meta.qdocconf b/doc/global/manifest-meta.qdocconf index d8e91bf9edf..a423e538e57 100644 --- a/doc/global/manifest-meta.qdocconf +++ b/doc/global/manifest-meta.qdocconf @@ -44,7 +44,6 @@ manifestmeta.android.names = "Qt3D/Qt 3D: Basic Shapes C++ Example" \ "QtDataVisualization/Audiolevels Example" \ "QtDataVisualization/Qt Quick 2 Scatter Example" \ "QtDataVisualization/Qt Quick 2 Surface Multiseries Example" \ - "QtGui/Analog Clock Window Example" \ "QtGui/OpenGL Window Example" \ "QtGui/Raster Window Example" \ "QtLinguist/Arrow Pad Example" \ @@ -151,7 +150,6 @@ manifestmeta.android.tags = android manifestmeta.ios.names = "QtCore/Contiguous Cache Example" \ "QtCore/Mandelbrot Example" \ "QtCore/Queued Custom Type Example" \ - "QtGui/Analog Clock Window Example" \ "QtGui/OpenGL Window Example" \ "QtGui/Raster Window Example" \ "QtNetwork/Loopback Example" \ diff --git a/examples/gui/CMakeLists.txt b/examples/gui/CMakeLists.txt index 83faae6765f..8eb3981a2fd 100644 --- a/examples/gui/CMakeLists.txt +++ b/examples/gui/CMakeLists.txt @@ -4,5 +4,4 @@ if(NOT TARGET Qt6::Gui) return() endif() -qt_internal_add_example(analogclock) qt_internal_add_example(rasterwindow) diff --git a/examples/gui/analogclock/CMakeLists.txt b/examples/gui/analogclock/CMakeLists.txt deleted file mode 100644 index bae60836445..00000000000 --- a/examples/gui/analogclock/CMakeLists.txt +++ /dev/null @@ -1,40 +0,0 @@ -# Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: BSD-3-Clause - -cmake_minimum_required(VERSION 3.16) -project(analogclock LANGUAGES CXX) - -if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") -endif() - -set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/gui/gui_analogclock") - -find_package(Qt6 REQUIRED COMPONENTS Core Gui) - -qt_standard_project_setup() - -qt_add_executable(gui_analogclock - ../rasterwindow/rasterwindow.cpp ../rasterwindow/rasterwindow.h - main.cpp -) - -set_target_properties(gui_analogclock PROPERTIES - WIN32_EXECUTABLE TRUE - MACOSX_BUNDLE TRUE -) - -target_include_directories(gui_analogclock PRIVATE - ../rasterwindow -) - -target_link_libraries(gui_analogclock PRIVATE - Qt6::Core - Qt6::Gui -) - -install(TARGETS gui_analogclock - RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" - BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" - LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" -) diff --git a/examples/gui/analogclock/analogclock.pro b/examples/gui/analogclock/analogclock.pro deleted file mode 100644 index eef17274f5a..00000000000 --- a/examples/gui/analogclock/analogclock.pro +++ /dev/null @@ -1,10 +0,0 @@ -include(../rasterwindow/rasterwindow.pri) - -# work-around for QTBUG-13496 -CONFIG += no_batch - -SOURCES += \ - main.cpp - -target.path = $$[QT_INSTALL_EXAMPLES]/gui/analogclock -INSTALLS += target diff --git a/examples/gui/analogclock/main.cpp b/examples/gui/analogclock/main.cpp deleted file mode 100644 index 8e0a0610572..00000000000 --- a/examples/gui/analogclock/main.cpp +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#include - -#include "rasterwindow.h" - -//! [5] -class AnalogClockWindow : public RasterWindow -{ -public: - AnalogClockWindow(); - -protected: - void timerEvent(QTimerEvent *) override; - void render(QPainter *p) override; - -private: - int m_timerId; -}; -//! [5] - - -//! [6] -AnalogClockWindow::AnalogClockWindow() -{ - setTitle("Analog Clock"); - resize(200, 200); - - m_timerId = startTimer(1000); -} -//! [6] - -//! [7] -void AnalogClockWindow::timerEvent(QTimerEvent *event) -{ - if (event->timerId() == m_timerId) - renderLater(); -} -//! [7] - -//! [1] //! [14] -void AnalogClockWindow::render(QPainter *p) -{ -//! [14] -//! [8] - static const QPoint hourHand[3] = { - QPoint(7, 8), - QPoint(-7, 8), - QPoint(0, -40) - }; - static const QPoint minuteHand[3] = { - QPoint(7, 8), - QPoint(-7, 8), - QPoint(0, -70) - }; - - QColor hourColor(127, 0, 127); - QColor minuteColor(0, 127, 127, 191); -//! [8] - -//! [9] - p->setRenderHint(QPainter::Antialiasing); -//! [9] //! [10] - p->translate(width() / 2, height() / 2); - - int side = qMin(width(), height()); - p->scale(side / 200.0, side / 200.0); -//! [1] //! [10] - -//! [11] - p->setPen(Qt::NoPen); - p->setBrush(hourColor); -//! [11] - -//! [2] - QTime time = QTime::currentTime(); - - p->save(); - p->rotate(30.0 * ((time.hour() + time.minute() / 60.0))); - p->drawConvexPolygon(hourHand, 3); - p->restore(); -//! [2] - -//! [12] - p->setPen(hourColor); - - for (int i = 0; i < 12; ++i) { - p->drawLine(88, 0, 96, 0); - p->rotate(30.0); - } -//! [12] //! [13] - p->setPen(Qt::NoPen); - p->setBrush(minuteColor); -//! [13] - -//! [3] - p->save(); - p->rotate(6.0 * (time.minute() + time.second() / 60.0)); - p->drawConvexPolygon(minuteHand, 3); - p->restore(); -//! [3] - -//! [4] - p->setPen(minuteColor); - - for (int j = 0; j < 60; ++j) { - if ((j % 5) != 0) - p->drawLine(92, 0, 96, 0); - p->rotate(6.0); - } -//! [4] -} - -int main(int argc, char **argv) -{ - QGuiApplication app(argc, argv); - - AnalogClockWindow clock; - clock.show(); - - return app.exec(); -} diff --git a/examples/gui/doc/images/analogclock-window-example.png b/examples/gui/doc/images/analogclock-window-example.png deleted file mode 100644 index f5e92e400ab693cab1721e0fdda21061c69d2bcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14556 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 diff --git a/examples/gui/doc/images/analogclockwindow-viewport.png b/examples/gui/doc/images/analogclockwindow-viewport.png deleted file mode 100644 index 31ce0c3c6e4d5c132ca996793df0790c02874f96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29668 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

Wa~_lB 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 fFC+aRcaM4qbq2WmY}SG9oev;#sxep( diff --git a/examples/gui/doc/src/analogclockwindow.qdoc b/examples/gui/doc/src/analogclockwindow.qdoc deleted file mode 100644 index 7ae13821ddf..00000000000 --- a/examples/gui/doc/src/analogclockwindow.qdoc +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only - -/*! - \example analogclock - \title Analog Clock Window Example - - \brief The Analog Clock Window example shows how to draw the contents of - a custom window. - - \image analogclock-window-example.png Screenshot of the Analog - Clock Window example - - This example demonstrates how the transformation and scaling - features of QPainter can be used to make drawing easier. - - \section1 AnalogClockWindow Class Definition - - The \c AnalogClockWindow class provides a clock with hour and - minute hands that is automatically updated every few seconds. We - make use of the RasterWindow from the \l {Raster Window Example} - and reimplement the \c render function to draw the clock face: - - \snippet analogclock/main.cpp 5 - - \section1 AnalogClock Class Implementation - - \snippet analogclock/main.cpp 6 - - We set a title on the window and resize to a reasonable size. Then - we start a timer which we will use to redraw the clock every - second. - - \snippet analogclock/main.cpp 7 - - The timerEvent function is called every second as a result of - our startTimer call. Making use of the convenience in the base - class, we schedule the window to be repainted. - - Checking the timer's id is not strictly needed as we only have - one active timer in this instance, but it is good practice to do - so. - - \snippet analogclock/main.cpp 14 - \snippet analogclock/main.cpp 8 - - Before we set up the painter and draw the clock, we first define - two lists of \l {QPoint}s and two \l{QColor}s that will be used - for the hour and minute hands. The minute hand's color has an - alpha component of 191, meaning that it's 75% opaque. - - \snippet analogclock/main.cpp 9 - - We call QPainter::setRenderHint() with QPainter::Antialiasing to - turn on antialiasing. This makes drawing of diagonal lines much - smoother. - - \snippet analogclock/main.cpp 10 - - The translation moves the origin to the center of the window, and - the scale operation ensures that the following drawing operations - are scaled to fit within the window. We use a scale factor that - let's us use x and y coordinates between -100 and 100, and that - ensures that these lie within the length of the window's shortest - side. - - To make our code simpler, we will draw a fixed size clock face that will - be positioned and scaled so that it lies in the center of the window. - - We also determine the length of the window's shortest side so that we - can fit the clock face inside the window. - - The painter takes care of all the transformations made during the - rendering, and ensures that everything is drawn correctly. Letting - the painter handle transformations is often easier than performing - manual calculations. - - \image analogclockwindow-viewport.png - - We draw the hour hand first, using a formula that rotates the coordinate - system counterclockwise by a number of degrees determined by the current - hour and minute. This means that the hand will be shown rotated clockwise - by the required amount. - - \snippet analogclock/main.cpp 11 - - We set the pen to be Qt::NoPen because we don't want any outline, - and we use a solid brush with the color appropriate for - displaying hours. Brushes are used when filling in polygons and - other geometric shapes. - - \snippet analogclock/main.cpp 2 - - We save and restore the transformation matrix before and after the - rotation because we want to place the minute hand without having to - take into account any previous rotations. - - \snippet analogclock/main.cpp 12 - - We draw markers around the edge of the clock for each hour. We - draw each marker then rotate the coordinate system so that the - painter is ready for the next one. - - \snippet analogclock/main.cpp 13 - \snippet analogclock/main.cpp 3 - - The minute hand is rotated in a similar way to the hour hand. - - \snippet analogclock/main.cpp 4 - - Again, we draw markers around the edge of the clock, but this - time to indicate minutes. We skip multiples of 5 to avoid drawing - minute markers on top of hour markers. -*/ diff --git a/examples/gui/gui.pro b/examples/gui/gui.pro index 275adc804d4..2afb8bbfc7d 100644 --- a/examples/gui/gui.pro +++ b/examples/gui/gui.pro @@ -4,5 +4,4 @@ TEMPLATE = subdirs QT_FOR_CONFIG += gui CONFIG += no_docs_target -SUBDIRS += analogclock SUBDIRS += rasterwindow diff --git a/examples/widgets/widgets/analogclock/analogclock.cpp b/examples/widgets/widgets/analogclock/analogclock.cpp index 34d135ed4ad..ad94a16bab2 100644 --- a/examples/widgets/widgets/analogclock/analogclock.cpp +++ b/examples/widgets/widgets/analogclock/analogclock.cpp @@ -46,7 +46,6 @@ void AnalogClock::paintEvent(QPaintEvent *) QColor minuteColor(0, 127, 127, 191); int side = qMin(width(), height()); - QTime time = QTime::currentTime(); //! [10] //! [11] @@ -64,8 +63,9 @@ void AnalogClock::paintEvent(QPaintEvent *) //! [15] //! [16] painter.setBrush(hourColor); //! [16] - -//! [17] //! [18] +//! [18] + QTime time = QTime::currentTime(); +//! [17] painter.save(); //! [17] //! [19] painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0))); diff --git a/src/gui/doc/qtgui.qdocconf b/src/gui/doc/qtgui.qdocconf index 333a8d7449b..00dc548d935 100644 --- a/src/gui/doc/qtgui.qdocconf +++ b/src/gui/doc/qtgui.qdocconf @@ -62,8 +62,6 @@ imagedirs += images \ excludefiles += ../kernel/qtestsupport_gui.cpp \ ../painting/qdrawhelper_ssse3.cpp -# manifestmeta.highlighted.names = "QtGui/Analog Clock Window Example" - navigation.landingpage = "Qt GUI" navigation.cppclassespage = "Qt GUI C++ Classes" diff --git a/src/gui/doc/src/coordsys.qdoc b/src/gui/doc/src/coordsys.qdoc index eb39239e373..087916635b3 100644 --- a/src/gui/doc/src/coordsys.qdoc +++ b/src/gui/doc/src/coordsys.qdoc @@ -213,11 +213,11 @@ \row \li {2,1} - \snippet analogclock/main.cpp 1 + \snippet ../widgets/widgets/analogclock/analogclock.cpp 9 We translate the coordinate system so that point (0, 0) is in the widget's center, instead of being at the top-left corner. We also - scale the system by \c side / 100, where \c side is either the + scale the system by \c side / 200, where \c side is either the widget's width or the height, whichever is shortest. We want the clock to be square, even if the device isn't. @@ -227,7 +227,7 @@ See also the \l {Window-Viewport Conversion} section. - \snippet analogclock/main.cpp 2 + \snippet ../widgets/widgets/analogclock/analogclock.cpp 18 We draw the clock's hour hand by rotating the coordinate system and calling QPainter::drawConvexPolygon(). Thank's to the @@ -235,26 +235,35 @@ The polygon is specified as an array of alternating \e x, \e y values, stored in the \c hourHand static variable (defined at the - beginning of the function), which corresponds to the four points - (2, 0), (0, 2), (-2, 0), and (0, -25). + beginning of the function), which corresponds to the three points + (7, 8), (-7, 8), (0, -40). The calls to QPainter::save() and QPainter::restore() surrounding the code guarantees that the code that follows won't be disturbed by the transformations we've used. - \snippet analogclock/main.cpp 3 + \snippet ../widgets/widgets/analogclock/analogclock.cpp 21 + + After that, we draw the hour markers for the clock face, which + consists of twelve short lines at 30-degree intervals. When that + loop is done, the painter has been rotated a full circle back to + its original state, so we don't need to save and restore the state. + + \snippet ../widgets/widgets/analogclock/analogclock.cpp 24 We do the same for the clock's minute hand, which is defined by - the four points (1, 0), (0, 1), (-1, 0), and (0, -40). These + the three points (7, 8), (-7, 8), (0, -70). These coordinates specify a hand that is thinner and longer than the minute hand. - \snippet analogclock/main.cpp 4 + \snippet ../widgets/widgets/analogclock/analogclock.cpp 27 - Finally, we draw the clock face, which consists of twelve short - lines at 30-degree intervals. At the end of that, the painter is - rotated in a way which isn't very useful, but we're done with - painting so that doesn't matter. + Finally, we draw the minute markers for the clock face, which + consists of sixty short lines at 6-degree intervals. We skip every + fifth minute marker because we don't want to draw over the hour + markers. At the end of that, the painter is rotated in a way which + isn't very useful, but we're done with painting so that doesn't + matter. \endtable For more information about the transformation matrix, see the @@ -422,5 +431,5 @@ \endtable \endomit - \sa {Analog Clock Window Example} + \sa {Analog Clock} */