source: trunk/doc/src/examples/styleplugin.qdoc@ 560

Last change on this file since 560 was 2, checked in by Dmitry A. Kuminov, 16 years ago

Initially imported qt-all-opensource-src-4.5.1 from Trolltech.

File size: 6.2 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4** Contact: Qt Software Information ([email protected])
5**
6** This file is part of the documentation of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial Usage
10** Licensees holding valid Qt Commercial licenses may use this file in
11** accordance with the Qt Commercial License Agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and Nokia.
14**
15** GNU Lesser General Public License Usage
16** Alternatively, this file may be used under the terms of the GNU Lesser
17** General Public License version 2.1 as published by the Free Software
18** Foundation and appearing in the file LICENSE.LGPL included in the
19** packaging of this file. Please review the following information to
20** ensure the GNU Lesser General Public License version 2.1 requirements
21** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
22**
23** In addition, as a special exception, Nokia gives you certain
24** additional rights. These rights are described in the Nokia Qt LGPL
25** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
26** package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you are unsure which license is appropriate for your use, please
37** contact the sales department at [email protected].
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42/*!
43 \example tools/styleplugin
44 \title Style Plugin Example
45
46 This example shows how to create a plugin that extends Qt with a new
47 GUI look and feel.
48
49 \image stylepluginexample.png
50
51 On some platforms, the native style will prevent the button
52 from having a red background. In this case, try to run the example
53 in another style (e.g., plastique).
54
55 A plugin in Qt is a class stored in a shared library that can be
56 loaded by a QPluginLoader at run-time. When you create plugins in
57 Qt, they either extend a Qt application or Qt itself. Writing a
58 plugin that extends Qt itself is achieved by inheriting one of the
59 plugin \l{Plugin Classes}{base classes}, reimplementing functions
60 from that class, and adding a macro. In this example we extend Qt
61 by adding a new GUI look and feel (i.e., making a new QStyle
62 available). A high-level introduction to plugins is given in the
63 plugin \l{How to Create Qt Plugins}{overview document}.
64
65 Plugins that provide new styles inherit the QStylePlugin base
66 class. Style plugins are loaded by Qt and made available through
67 QStyleFactory; we will look at this later. We have implemented \c
68 SimpleStylePlugin, which provides \c SimpleStyle. The new style
69 inherits QWindowsStyle and contributes to widget styling by
70 drawing button backgrounds in red - not a major contribution, but
71 it still makes a new style. We test the plugin with \c
72 StyleWindow, in which we display a QPushButton.
73
74 The \c SimpleStyle and \c StyleWindow classes do not contain any
75 plugin specific functionality and their implementations are
76 trivial; we will therefore leap past them and head on to the \c
77 SimpleStylePlugin and the \c main() function. After we have looked
78 at that, we examine the plugin's profile.
79
80
81 \section1 SimpleStylePlugin Class Definition
82
83 \c SimpleStylePlugin inherits QStylePlugin and is the plugin
84 class.
85
86 \snippet examples/tools/styleplugin/plugin/simplestyleplugin.h 0
87
88 \c keys() returns a list of style names that this plugin can
89 create, while \c create() takes such a string and returns the
90 QStyle corresponding to the key. Both functions are pure virtual
91 functions reimplemented from QStylePlugin. When an application
92 requests an instance of the \c SimpleStyle style, which this
93 plugin creates, Qt will create it with this plugin.
94
95
96 \section1 SimpleStylePlugin Class Implementation
97
98 Here is the implementation of \c keys():
99
100 \snippet examples/tools/styleplugin/plugin/simplestyleplugin.cpp 0
101
102 Since this plugin only supports one style, we return a QStringList
103 with the class name of that style.
104
105 Here is the \c create() function:
106
107 \snippet examples/tools/styleplugin/plugin/simplestyleplugin.cpp 1
108
109 Note that the key for style plugins are case insensitive.
110 The case sensitivity varies from plugin to plugin, so you need to
111 check this when implementing new plugins.
112
113 \section1 The \c main() function
114
115 \snippet examples/tools/styleplugin/stylewindow/main.cpp 0
116
117 Qt loads the available style plugins when the QApplication object
118 is initialized. The QStyleFactory class knows about all styles and
119 produces them with \l{QStyleFactory::}{create()} (it is a
120 wrapper around all the style plugins).
121
122 \section1 The Simple Style Plugin Profile
123
124 The \c SimpleStylePlugin lives in its own directory and have
125 its own profile:
126
127 \snippet examples/tools/styleplugin/plugin/plugin.pro 0
128
129 In the plugin profile we need to set the lib template as we are
130 building a shared library instead of an executable. We must also
131 set the config to plugin. We set the library to be stored in the
132 styles folder under stylewindow because this is a path in which Qt
133 will search for style plugins.
134
135 \section1 Related articles and examples
136
137 In addition to the plugin \l{How to Create Qt Plugins}{overview
138 document}, we have other examples and articles that concern
139 plugins.
140
141 In the \l{Echo Plugin Example}{echo plugin example} we show how to
142 implement plugins that extends Qt applications rather than Qt
143 itself, which is the case with the style plugin of this example.
144 The \l{Plug & Paint Example}{plug & paint} example shows how to
145 implement a static plugin as well as being a more involved example
146 on plugins that extend applications.
147*/
Note: See TracBrowser for help on using the repository browser.