summaryrefslogtreecommitdiff
path: root/examples/designer/doc/src/worldtimeclockplugin.qdoc
diff options
context:
space:
mode:
Diffstat (limited to 'examples/designer/doc/src/worldtimeclockplugin.qdoc')
-rw-r--r--examples/designer/doc/src/worldtimeclockplugin.qdoc182
1 files changed, 0 insertions, 182 deletions
diff --git a/examples/designer/doc/src/worldtimeclockplugin.qdoc b/examples/designer/doc/src/worldtimeclockplugin.qdoc
deleted file mode 100644
index 25198f261..000000000
--- a/examples/designer/doc/src/worldtimeclockplugin.qdoc
+++ /dev/null
@@ -1,182 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-
-/*!
- \example worldtimeclockplugin
- \ingroup examples-designer
- \title World Time Clock Plugin Example
-
- \brief Creating a custom widget plugin for \QD that uses signals and slots.
-
- \image worldtimeclockplugin-example.png
-
- In this example, we simply extend the \l
- {customwidgetplugin}{Custom Widget Plugin} example and
- its custom widget (based on the \l{widgets/analogclock}{Analog
- Clock} example), by introducing the concept of signals and slots.
-
- The World Time Clock Plugin example consists of two classes:
-
- \list
- \li \c WorldTimeClock is a custom clock widget with hour and
- minute hands that is automatically updated every few seconds.
- \li \c WorldTimeClockPlugin exposes the \c WorldTimeClock class to \QD.
- \endlist
-
- First we will take a look at the \c WorldTimeClock class which
- extends the \l {customwidgetplugin}{Custom Widget Plugin}
- example's \c AnalogClock class by providing a signal and a
- slot. Then we will take a quick look at the \c
- WorldTimeClockPlugin class, but this class is in most parts
- identical to the \l {customwidgetplugin}{Custom Widget
- Plugin} example's implementation.
-
- Finally we take a look at the plugin's project file. The project
- file for custom widget plugins needs some additional information
- to ensure that they will work within \QD. This is also covered in
- the \l {customwidgetplugin}{Custom Widget Plugin} example,
- but due to its importance (custom widget plugins rely on
- components supplied with \QD which must be specified in the
- project file that we use) we will repeat it here.
-
- \section1 WorldTimeClock Class
-
- The \c WorldTimeClock class inherits QWidget, and is a custom
- clock widget with hour and minute hands that is automatically
- updated every few seconds. What makes this example different from
- the \l {customwidgetplugin}{Custom Widget Plugin}
- example, is the introduction of the signal and slot in the custom
- widget class:
-
- \snippet worldtimeclockplugin/worldtimeclock.h 1
-
- Note the use of the QDESIGNER_WIDGET_EXPORT macro. This is needed
- to ensure that \QD can create instances of the widget on some
- platforms, but it is a good idea to use it on all platforms.
-
- We declare the \c setTimeZone() slot with an associated \c
- timeZoneOffset variable, and we declare an \c updated() signal
- which takes the current time as argument and is emitted whenever
- the widget is repainted.
-
- \image worldtimeclock-connection.png
-
- In \QD's workspace we can then, for example, connect the \c
- WorldTimeClock widget's \c updated() signal to a QTimeEdit's \l
- {QDateTimeEdit::setTime()}{setTime()} slot using \QD's mode
- for editing signal and slots.
-
- \image worldtimeclock-signalandslot.png
-
- We can also connect a QSpinBox's \l
- {QSpinBox::valueChanged()}{valueChanged()} signal to the \c
- WorldTimeClock's \c setTimeZone() slot.
-
- \section1 WorldTimeClockPlugin Class
-
- The \c WorldTimeClockPlugin class exposes the \c WorldTimeClock
- class to \QD. Its definition is equivalent to the \l
- {customwidgetplugin}{Custom Widget Plugin} example's
- plugin class which is explained in detail. The only part of the
- class definition that is specific to this particular custom widget
- is the class name.
-
- To ensure that Qt recognizes the widget as a plugin, export relevant
- information about the widget by adding the \c Q_PLUGIN_METADATA() macro:
-
- \snippet worldtimeclockplugin/worldtimeclockplugin.h 0
-
- The plugin class provides \QD with basic information about our
- plugin, such as its class name and its include file. Furthermore
- it knows how to create instances of the \c WorldTimeClockPlugin
- widget. \c WorldTimeClockPlugin also defines the \l
- {QDesignerCustomWidgetInterface::initialize()}{initialize()}
- function which is called after the plugin is loaded into \QD. The
- function's QDesignerFormEditorInterface parameter provides the
- plugin with a gateway to all of \QD's API's.
-
- The \c WorldTimeClockPlugin class inherits from both QObject and
- QDesignerCustomWidgetInterface. It is important to remember, when
- using multiple inheritance, to ensure that all the interfaces
- (i.e. the classes that doesn't inherit Q_OBJECT) are made known to
- the meta object system using the Q_INTERFACES() macro. This
- enables \QD to use qobject_cast() to query for supported
- interfaces using nothing but a QObject pointer.
-
- The implementation of the \c WorldTimeClockPlugin is also
- equivalent to the plugin interface implementation in the \l
- {customwidgetplugin}{Custom Widget Plugin} example (only
- the class name and the implementation of
- QDesignerCustomWidgetInterface::domXml() differ). The main thing
- to remember is to use the Q_PLUGIN_METADATA() macro to export the \c
- WorldTimeClockPlugin class for use with \QD:
-
- \snippet worldtimeclockplugin/worldtimeclockplugin.h 1
-
- Without this macro, there is no way for Qt Designer to use the
- widget.
-
- \section1 Project files
- \section2 CMake
-
- The project files need to state that a plugin linking
- to the \QD libraries is to be built:
-
- \snippet worldtimeclockplugin/CMakeLists.txt 0
- \codeline
- \snippet worldtimeclockplugin/CMakeLists.txt 2
-
- The link libraries list specifies \c Qt::UiPlugin. This indicates that
- the plugin uses the abstract interfaces QDesignerCustomWidgetInterface
- and QDesignerCustomWidgetCollectionInterface only and has no linkage
- to the \QD libraries. When accessing other interfaces of \QD that have
- linkage, \c Designer should be used instead; this ensures that the plugin
- dynamically links to the \QD libraries and has a run-time dependency on
- them.
-
- The header and source files for the widget are declared in the
- usual way:
-
- \snippet worldtimeclockplugin/CMakeLists.txt 1
-
- We provide an implementation of the plugin interface so that \QD
- can use the custom widget. In this particular example we also
- provide implementations of the container extension interface and
- the extension factory.
-
- It is important to ensure that the plugin is installed in a
- location that is searched by \QD. We do this by specifying a
- target path for the project and adding it to the list of items to
- install:
-
- \snippet worldtimeclockplugin/CMakeLists.txt 3
- \snippet worldtimeclockplugin/CMakeLists.txt 4
-
- The custom widget is created as a library. It will be
- installed alongside the other \QD plugins when the project is
- installed (using \c{ninja install} or an equivalent installation
- procedure).
-
- For more information about plugins, see the
- \l {How to Create Qt Plugins} documentation.
-
- \section2 qmake
-
- The following example shows how to link a plugin to the \QD libraries:
-
- \snippet worldtimeclockplugin/worldtimeclockplugin.pro 0
- \codeline
- \snippet worldtimeclockplugin/worldtimeclockplugin.pro 1
-
- The \c QT variable contains the keyword \c uiplugin, which is
- the equivalent of the \c Qt::UiPlugin library.
-
- The following example shows how to add the header and source files of the
- widget:
-
- \snippet worldtimeclockplugin/worldtimeclockplugin.pro 2
-
- The following example shows how to install a plugin to the \QD's plugin path:
-
- \snippet worldtimeclockplugin/worldtimeclockplugin.pro 3
-*/