Remove the style plugin example
The snippets in the QStylePlugin class documentation show the relevant bits well enough. Pick-to: 6.7 6.6 Fixes: QTBUG-119974 Change-Id: Iba4a37664d64d86a2946f41d131a201ccdcd723b Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
This commit is contained in:
parent
f83e14b13a
commit
5a0135fafb
Binary file not shown.
Before Width: | Height: | Size: 15 KiB |
@ -1,133 +0,0 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
|
||||
|
||||
/*!
|
||||
\example tools/styleplugin
|
||||
\title Style Plugin Example
|
||||
\examplecategory {User Interface Components}
|
||||
\ingroup examples-widgets-tools
|
||||
|
||||
\brief This example shows how to create a plugin that extends Qt with a new
|
||||
GUI look and feel.
|
||||
|
||||
\image stylepluginexample.png
|
||||
|
||||
A plugin in Qt is a class stored in a shared library that can be
|
||||
loaded by a QPluginLoader at run-time. When you create plugins in
|
||||
Qt, they either extend a Qt application or Qt itself. Writing a
|
||||
plugin that extends Qt itself is achieved by inheriting one of the
|
||||
plugin \l{Plugin Classes}{base classes}, reimplementing functions
|
||||
from that class, and adding a macro. In this example we extend Qt
|
||||
by adding a new GUI look and feel (i.e., making a new QStyle
|
||||
available). A high-level introduction to plugins is given in the
|
||||
plugin \l{How to Create Qt Plugins}{overview document}.
|
||||
|
||||
Plugins that provide new styles inherit the QStylePlugin base
|
||||
class. Style plugins are loaded by Qt and made available through
|
||||
QStyleFactory; we will look at this later. We have implemented \c
|
||||
SimpleStylePlugin, which provides \c SimpleStyle. The new style
|
||||
contributes to widget styling by changing the text color of the
|
||||
text edit widget to red - not a major contribution, but it still
|
||||
makes a new style.
|
||||
|
||||
The new style is platform agnostic in the sense that it is not
|
||||
based on any specific style implementation, but uses QProxyStyle
|
||||
to merely tweak the looks in the current application style that
|
||||
defaults to the native system style.
|
||||
|
||||
\note On some platforms, the native style may overwrite some custom
|
||||
stylings, e.g., button background color. In that case, try to run
|
||||
your application in another style (e.g., fusion). You may do this
|
||||
by passing \c{-style fusion} as a command line argument to your
|
||||
application.
|
||||
|
||||
We test the plugin with \c StyleWindow, in which we display a
|
||||
QTextEdit. The \c SimpleStyle and \c StyleWindow classes do not
|
||||
contain any plugin specific functionality and their implementations
|
||||
are trivial; we will therefore leap past them and head on to the \c
|
||||
SimpleStylePlugin and the \c main() function. After we have looked
|
||||
at that, we examine the plugin's \c{.pro} file.
|
||||
|
||||
|
||||
\section1 SimpleStylePlugin Class Definition
|
||||
|
||||
\c SimpleStylePlugin inherits QStylePlugin and is the plugin
|
||||
class.
|
||||
|
||||
\snippet tools/styleplugin/plugin/simplestyleplugin.h 0
|
||||
|
||||
\c keys() returns a list of style names that this plugin can
|
||||
create, while \c create() takes such a string and returns the
|
||||
QStyle corresponding to the key. Both functions are pure virtual
|
||||
functions reimplemented from QStylePlugin. When an application
|
||||
requests an instance of the \c SimpleStyle style, which this
|
||||
plugin creates, Qt will create it with this plugin.
|
||||
|
||||
|
||||
\section1 SimpleStylePlugin Class Implementation
|
||||
|
||||
Here is the implementation of \c keys():
|
||||
|
||||
\snippet tools/styleplugin/plugin/simplestyleplugin.cpp 0
|
||||
|
||||
Since this plugin only supports one style, we return a QStringList
|
||||
with the class name of that style.
|
||||
|
||||
Here is the \c create() function:
|
||||
|
||||
\snippet tools/styleplugin/plugin/simplestyleplugin.cpp 1
|
||||
|
||||
Note that the key for style plugins are case insensitive.
|
||||
The case sensitivity varies from plugin to plugin, so you need to
|
||||
check this when implementing new plugins.
|
||||
|
||||
\section1 The \c main() function
|
||||
|
||||
\snippet tools/styleplugin/stylewindow/main.cpp 0
|
||||
|
||||
Qt loads the available style plugins when the QApplication object
|
||||
is initialized. The QStyleFactory class knows about all styles and
|
||||
produces them with \l{QStyleFactory::}{create()} (it is a
|
||||
wrapper around all the style plugins).
|
||||
|
||||
\section1 The Simple Style Plugin's QMake Project File
|
||||
|
||||
The \c SimpleStylePlugin lives in its own directory and has
|
||||
its own \c{.pro} file:
|
||||
|
||||
\snippet tools/styleplugin/plugin/plugin.pro 0
|
||||
|
||||
In the plugin \c{.pro} file we need to set the lib template as we are
|
||||
building a shared library instead of an executable. We must also
|
||||
set the config to plugin. We set the library to be stored in the
|
||||
\c{styles} folder next to the main executable because this is a path
|
||||
in which Qt will search for style plugins.
|
||||
|
||||
\section2 Using CMake to Set up the Simple Style Plugin
|
||||
|
||||
When using CMake, we use \l{qt6_add_plugin}{qt_add_plugin}
|
||||
to create the \c simplestyleplugin plugin:
|
||||
|
||||
\snippet tools/styleplugin/plugin/CMakeLists.txt 0
|
||||
|
||||
On Windows and Linux, we place the plugin into the \c{styles} folder
|
||||
next to the main executable, i.e., \c{styleplugin.exe}:
|
||||
|
||||
\snippet tools/styleplugin/plugin/CMakeLists.txt 2
|
||||
|
||||
And on macOS, we store the \c simplestyleplugin into the
|
||||
\c{Contents/PlugIns/styles} folder of the App Bundle.
|
||||
|
||||
\snippet tools/styleplugin/plugin/CMakeLists.txt 1
|
||||
|
||||
\note On macOS, when creating an App Bundle, store the plugins in
|
||||
the \c PlugIns folder and not next to the main executable in
|
||||
the \c MacOS folder as the latter will cause issues during signing
|
||||
and distribution of the app.
|
||||
|
||||
\section1 Related Articles and Examples
|
||||
|
||||
In addition to the plugin \l{How to Create Qt Plugins}{overview
|
||||
document}, we have other examples and articles that concern
|
||||
plugins.
|
||||
*/
|
@ -4,6 +4,5 @@
|
||||
qt_internal_add_example(completer)
|
||||
qt_internal_add_example(customcompleter)
|
||||
qt_internal_add_example(regularexpression)
|
||||
qt_internal_add_example(styleplugin)
|
||||
qt_internal_add_example(treemodelcompleter)
|
||||
qt_internal_add_example(undoframework)
|
||||
|
@ -1,18 +0,0 @@
|
||||
# Copyright (C) 2022 The Qt Company Ltd.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
project(styleplugin LANGUAGES CXX)
|
||||
|
||||
if(NOT DEFINED INSTALL_EXAMPLESDIR)
|
||||
set(INSTALL_EXAMPLESDIR "examples")
|
||||
endif()
|
||||
|
||||
set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/tools/styleplugin")
|
||||
|
||||
find_package(Qt6 REQUIRED COMPONENTS Widgets)
|
||||
|
||||
qt_standard_project_setup()
|
||||
|
||||
add_subdirectory(stylewindow)
|
||||
add_subdirectory(plugin)
|
@ -1,41 +0,0 @@
|
||||
# Copyright (C) 2022 The Qt Company Ltd.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
#! [0]
|
||||
qt_add_plugin(simplestyleplugin
|
||||
CLASS_NAME SimpleStylePlugin
|
||||
simplestyle.cpp simplestyle.h
|
||||
simplestyleplugin.cpp simplestyleplugin.h
|
||||
)
|
||||
#! [0]
|
||||
|
||||
if(QT_FEATURE_debug AND APPLE)
|
||||
set_property(TARGET simplestyleplugin
|
||||
APPEND_STRING PROPERTY OUTPUT_NAME "_debug")
|
||||
endif()
|
||||
|
||||
get_target_property(is_bundle styleplugin MACOSX_BUNDLE)
|
||||
if(APPLE AND is_bundle)
|
||||
#! [1]
|
||||
set_target_properties(simplestyleplugin PROPERTIES
|
||||
LIBRARY_OUTPUT_DIRECTORY "$<TARGET_BUNDLE_CONTENT_DIR:styleplugin>/PlugIns/styles"
|
||||
)
|
||||
#! [1]
|
||||
else()
|
||||
#! [2]
|
||||
set_target_properties(simplestyleplugin PROPERTIES
|
||||
LIBRARY_OUTPUT_DIRECTORY "$<TARGET_FILE_DIR:styleplugin>/styles"
|
||||
)
|
||||
#! [2]
|
||||
endif()
|
||||
|
||||
target_link_libraries(simplestyleplugin PRIVATE
|
||||
Qt6::Core
|
||||
Qt6::Gui
|
||||
Qt6::Widgets
|
||||
)
|
||||
|
||||
install(TARGETS simplestyleplugin
|
||||
RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
|
||||
LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
|
||||
)
|
@ -1,34 +0,0 @@
|
||||
#! [0]
|
||||
TEMPLATE = lib
|
||||
CONFIG += plugin
|
||||
QT += widgets
|
||||
HEADERS = simplestyle.h \
|
||||
simplestyleplugin.h
|
||||
SOURCES = simplestyle.cpp \
|
||||
simplestyleplugin.cpp
|
||||
TARGET = simplestyleplugin
|
||||
#! [0]
|
||||
win32 {
|
||||
CONFIG(debug, release|debug):DESTDIR = ../debug/styles/
|
||||
CONFIG(release, release|debug):DESTDIR = ../release/styles/
|
||||
} else {
|
||||
macos {
|
||||
# The non-app-bundle case is not supported with qmake, because
|
||||
# the plugin project cannot know whether the app is built
|
||||
# as a bundle or not.
|
||||
DESTDIR = ../styleplugin.app/Contents/PlugIns/styles/
|
||||
contains(QT_CONFIG, debug) {
|
||||
TARGET = $$join(TARGET,,,_debug)
|
||||
}
|
||||
} else {
|
||||
DESTDIR = ../styles/
|
||||
}
|
||||
}
|
||||
|
||||
EXAMPLE_FILES += simplestyle.json
|
||||
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/styleplugin/styles
|
||||
INSTALLS += target
|
||||
|
||||
CONFIG += install_ok # Do not cargo-cult this!
|
@ -1,9 +0,0 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
|
||||
#include "simplestyle.h"
|
||||
|
||||
void SimpleStyle::polish(QPalette &palette)
|
||||
{
|
||||
palette.setBrush(QPalette::Text, Qt::red);
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
|
||||
#ifndef SIMPLESTYLE_H
|
||||
#define SIMPLESTYLE_H
|
||||
|
||||
#include <QProxyStyle>
|
||||
|
||||
class SimpleStyle : public QProxyStyle
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
SimpleStyle() = default;
|
||||
|
||||
void polish(QPalette &palette) override;
|
||||
};
|
||||
|
||||
#endif
|
@ -1,3 +0,0 @@
|
||||
{
|
||||
"Keys": [ "simplestyle" ]
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
|
||||
#include "simplestyleplugin.h"
|
||||
#include "simplestyle.h"
|
||||
|
||||
//! [0]
|
||||
QStringList SimpleStylePlugin::keys() const
|
||||
{
|
||||
return {"SimpleStyle"};
|
||||
}
|
||||
//! [0]
|
||||
|
||||
//! [1]
|
||||
QStyle *SimpleStylePlugin::create(const QString &key)
|
||||
{
|
||||
if (key.toLower() == "simplestyle")
|
||||
return new SimpleStyle;
|
||||
return nullptr;
|
||||
}
|
||||
//! [1]
|
@ -1,23 +0,0 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
|
||||
#ifndef SIMPLESTYLEPLUGIN_H
|
||||
#define SIMPLESTYLEPLUGIN_H
|
||||
|
||||
#include <QStylePlugin>
|
||||
|
||||
//! [0]
|
||||
class SimpleStylePlugin : public QStylePlugin
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QStyleFactoryInterface" FILE "simplestyle.json")
|
||||
|
||||
public:
|
||||
SimpleStylePlugin() = default;
|
||||
|
||||
QStringList keys() const;
|
||||
QStyle *create(const QString &key) override;
|
||||
};
|
||||
//! [0]
|
||||
|
||||
#endif
|
@ -1,3 +0,0 @@
|
||||
TEMPLATE = subdirs
|
||||
SUBDIRS = stylewindow \
|
||||
plugin
|
@ -1,30 +0,0 @@
|
||||
# Copyright (C) 2022 The Qt Company Ltd.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
qt_add_executable(styleplugin
|
||||
main.cpp
|
||||
stylewindow.cpp stylewindow.h
|
||||
)
|
||||
|
||||
set_target_properties(styleplugin PROPERTIES
|
||||
WIN32_EXECUTABLE TRUE
|
||||
MACOSX_BUNDLE TRUE
|
||||
)
|
||||
|
||||
target_link_libraries(styleplugin PRIVATE
|
||||
Qt6::Core
|
||||
Qt6::Gui
|
||||
Qt6::Widgets
|
||||
)
|
||||
|
||||
if(NOT QT6_IS_SHARED_LIBS_BUILD)
|
||||
target_link_libraries(styleplugin PRIVATE
|
||||
simplestyleplugin
|
||||
)
|
||||
endif()
|
||||
|
||||
install(TARGETS styleplugin
|
||||
RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
|
||||
BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
|
||||
LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
|
||||
)
|
@ -1,26 +0,0 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
|
||||
#include <QApplication>
|
||||
#include <QStyleFactory>
|
||||
|
||||
#include "stylewindow.h"
|
||||
|
||||
//! [0]
|
||||
int main(int argv, char *args[])
|
||||
{
|
||||
QApplication app(argv, args);
|
||||
|
||||
QStyle *style = QStyleFactory::create("simplestyle");
|
||||
if (!style)
|
||||
qFatal("Cannot load the 'simplestyle' plugin.");
|
||||
|
||||
QApplication::setStyle(style);
|
||||
|
||||
StyleWindow window;
|
||||
window.resize(350, 50);
|
||||
window.show();
|
||||
|
||||
return app.exec();
|
||||
}
|
||||
//! [0]
|
@ -1,25 +0,0 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
|
||||
#include <QGridLayout>
|
||||
#include <QGroupBox>
|
||||
#include <QTextEdit>
|
||||
|
||||
#include "stylewindow.h"
|
||||
|
||||
StyleWindow::StyleWindow()
|
||||
{
|
||||
QTextEdit *styledTextEdit = new QTextEdit(tr("The quick brown fox jumps over the lazy dog"));
|
||||
|
||||
QGridLayout *layout = new QGridLayout;
|
||||
layout->addWidget(styledTextEdit);
|
||||
|
||||
QGroupBox *styleBox = new QGroupBox(tr("A simple styled text edit"));
|
||||
styleBox->setLayout(layout);
|
||||
|
||||
QGridLayout *outerLayout = new QGridLayout;
|
||||
outerLayout->addWidget(styleBox, 0, 0);
|
||||
setLayout(outerLayout);
|
||||
|
||||
setWindowTitle(tr("Style Plugin Example"));
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
|
||||
#ifndef STYLEWINDOW_H
|
||||
#define STYLEWINDOW_H
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
class StyleWindow : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
StyleWindow();
|
||||
};
|
||||
|
||||
#endif
|
@ -1,19 +0,0 @@
|
||||
QT += widgets
|
||||
|
||||
HEADERS = stylewindow.h
|
||||
SOURCES = stylewindow.cpp \
|
||||
main.cpp
|
||||
|
||||
TARGET = styleplugin
|
||||
win32 {
|
||||
debug:DESTDIR = ../debug/
|
||||
release:DESTDIR = ../release/
|
||||
} else {
|
||||
DESTDIR = ../
|
||||
}
|
||||
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/styleplugin
|
||||
INSTALLS += target
|
||||
|
||||
CONFIG += install_ok # Do not cargo-cult this!
|
@ -3,7 +3,6 @@ SUBDIRS = \
|
||||
completer \
|
||||
customcompleter \
|
||||
regularexpression \
|
||||
styleplugin \
|
||||
treemodelcompleter \
|
||||
undoframework
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user