|
1 /**************************************************************************** |
|
2 ** |
|
3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). |
|
4 ** All rights reserved. |
|
5 ** Contact: Nokia Corporation (qt-info@nokia.com) |
|
6 ** |
|
7 ** This file is part of the documentation of the Qt Toolkit. |
|
8 ** |
|
9 ** $QT_BEGIN_LICENSE:LGPL$ |
|
10 ** No Commercial Usage |
|
11 ** This file contains pre-release code and may not be distributed. |
|
12 ** You may use this file in accordance with the terms and conditions |
|
13 ** contained in the Technology Preview License Agreement accompanying |
|
14 ** this package. |
|
15 ** |
|
16 ** GNU Lesser General Public License Usage |
|
17 ** Alternatively, this file may be used under the terms of the GNU Lesser |
|
18 ** General Public License version 2.1 as published by the Free Software |
|
19 ** Foundation and appearing in the file LICENSE.LGPL included in the |
|
20 ** packaging of this file. Please review the following information to |
|
21 ** ensure the GNU Lesser General Public License version 2.1 requirements |
|
22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. |
|
23 ** |
|
24 ** In addition, as a special exception, Nokia gives you certain additional |
|
25 ** rights. These rights are described in the Nokia Qt LGPL Exception |
|
26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. |
|
27 ** |
|
28 ** If you have questions regarding the use of this file, please contact |
|
29 ** Nokia at qt-info@nokia.com. |
|
30 ** |
|
31 ** |
|
32 ** |
|
33 ** |
|
34 ** |
|
35 ** |
|
36 ** |
|
37 ** |
|
38 ** $QT_END_LICENSE$ |
|
39 ** |
|
40 ****************************************************************************/ |
|
41 |
|
42 /*! |
|
43 \example painting/imagecomposition |
|
44 \title Image Composition Example |
|
45 |
|
46 The Image Composition example lets the user combine images |
|
47 together using any composition mode supported by QPainter, described |
|
48 in detail in \l{QPainter#Composition Modes}{Composition Modes}. |
|
49 |
|
50 \image imagecomposition-example.png |
|
51 |
|
52 \section1 Setting Up The Resource File |
|
53 |
|
54 The Image Composition example requires two source images, |
|
55 \e butterfly.png and \e checker.png that are embedded within |
|
56 \e imagecomposition.qrc. The file contains the following code: |
|
57 |
|
58 \quotefile examples/painting/imagecomposition/imagecomposition.qrc |
|
59 |
|
60 For more information on resource files, see \l{The Qt Resource System}. |
|
61 |
|
62 \section1 ImageComposer Class Definition |
|
63 |
|
64 The \c ImageComposer class is a subclass of QWidget that implements three |
|
65 private slots, \c chooseSource(), \c chooseDestination(), and |
|
66 \c recalculateResult(). |
|
67 |
|
68 \snippet examples/painting/imagecomposition/imagecomposer.h 0 |
|
69 |
|
70 In addition, \c ImageComposer consists of five private functions, |
|
71 \c addOp(), \c chooseImage(), \c loadImage(), \c currentMode(), and |
|
72 \c imagePos(), as well as private instances of QToolButton, QComboBox, |
|
73 QLabel, and QImage. |
|
74 |
|
75 \snippet examples/painting/imagecomposition/imagecomposer.h 1 |
|
76 |
|
77 \section1 ImageComposer Class Implementation |
|
78 |
|
79 We declare a QSize object, \c resultSize, as a static constant with width |
|
80 and height equal to 200. |
|
81 |
|
82 \snippet examples/painting/imagecomposition/imagecomposer.cpp 0 |
|
83 |
|
84 Within the constructor, we instantiate a QToolButton object, |
|
85 \c sourceButton and set its \l{QAbstractButton::setIconSize()}{iconSize} |
|
86 property to \c resultSize. The \c operatorComboBox is instantiated and |
|
87 then populated using the \c addOp() function. This function accepts a |
|
88 QPainter::CompositionMode, \a mode, and a QString, \a name, representing |
|
89 the name of the composition mode. |
|
90 |
|
91 \snippet examples/painting/imagecomposition/imagecomposer.cpp 1 |
|
92 |
|
93 The \c destinationButton is instantiated and its |
|
94 \l{QAbstractButton::setIconSize()}{iconSize} property is set to |
|
95 \c resultSize as well. The \l{QLabel}s \c equalLabel and \c resultLabel |
|
96 are created and \c{resultLabel}'s \l{QWidget::setMinimumWidth()} |
|
97 {minimumWidth} is set. |
|
98 |
|
99 \snippet examples/painting/imagecomposition/imagecomposer.cpp 2 |
|
100 |
|
101 We connect the following signals to their corresponding slots: |
|
102 \list |
|
103 \o \c{sourceButton}'s \l{QPushButton::clicked()}{clicked()} signal is |
|
104 connected to \c chooseSource(), |
|
105 \o \c{operatorComboBox}'s \l{QComboBox::activated()}{activated()} |
|
106 signal is connected to \c recalculateResult(), and |
|
107 \o \c{destinationButton}'s \l{QToolButton::clicked()}{clicked()} signal |
|
108 is connected to \c chooseDestination(). |
|
109 \endlist |
|
110 |
|
111 \snippet examples/painting/imagecomposition/imagecomposer.cpp 3 |
|
112 |
|
113 A QGridLayout, \c mainLayout, is used to place all the widgets. Note |
|
114 that \c{mainLayout}'s \l{QLayout::setSizeConstraint()}{sizeConstraint} |
|
115 property is set to QLayout::SetFixedSize, which means that |
|
116 \c{ImageComposer}'s size cannot be resized at all. |
|
117 |
|
118 \snippet examples/painting/imagecomposition/imagecomposer.cpp 4 |
|
119 |
|
120 We create a QImage, \c resultImage, and we invoke \c loadImage() twice |
|
121 to load both the image files in our \e imagecomposition.qrc file. Then, |
|
122 we set the \l{QWidget::setWindowTitle()}{windowTitle} property to |
|
123 "Image Composition". |
|
124 |
|
125 \snippet examples/painting/imagecomposition/imagecomposer.cpp 5 |
|
126 |
|
127 The \c chooseSource() and \c chooseDestination() functions are |
|
128 convenience functions that invoke \c chooseImage() with specific |
|
129 parameters. |
|
130 |
|
131 \snippet examples/painting/imagecomposition/imagecomposer.cpp 6 |
|
132 \codeline |
|
133 \snippet examples/painting/imagecomposition/imagecomposer.cpp 7 |
|
134 |
|
135 The \c chooseImage() function loads an image of the user's choice, |
|
136 depending on the \a title, \a image, and \a button. |
|
137 |
|
138 \snippet examples/painting/imagecomposition/imagecomposer.cpp 10 |
|
139 |
|
140 The \c recalculateResult() function is used to calculate amd display the |
|
141 result of combining the two images together with the user's choice of |
|
142 composition mode. |
|
143 |
|
144 \snippet examples/painting/imagecomposition/imagecomposer.cpp 8 |
|
145 |
|
146 The \c addOp() function adds an item to the \c operatorComboBox using |
|
147 \l{QComboBox}'s \l{QComboBox::addItem()}{addItem} function. This function |
|
148 accepts a QPainter::CompositionMode, \a mode, and a QString, \a name. The |
|
149 rectangle is filled with Qt::Transparent and both the \c sourceImage and |
|
150 \c destinationImage are painted, before displaying it on \c resultLabel. |
|
151 |
|
152 \snippet examples/painting/imagecomposition/imagecomposer.cpp 9 |
|
153 |
|
154 The \c loadImage() function paints a transparent background using |
|
155 \l{QPainter::fillRect()}{fillRect()} and draws \c image in a |
|
156 centralized position using \l{QPainter::drawImage()}{drawImage()}. |
|
157 This \c image is then set as the \c{button}'s icon. |
|
158 |
|
159 \snippet examples/painting/imagecomposition/imagecomposer.cpp 11 |
|
160 |
|
161 The \c currentMode() function returns the composition mode currently |
|
162 selected in \c operatorComboBox. |
|
163 |
|
164 \snippet examples/painting/imagecomposition/imagecomposer.cpp 12 |
|
165 |
|
166 We use the \c imagePos() function to ensure that images loaded onto the |
|
167 QToolButton objects, \c sourceButton and \c destinationButton, are |
|
168 centralized. |
|
169 |
|
170 \snippet examples/painting/imagecomposition/imagecomposer.cpp 13 |
|
171 |
|
172 \section1 The \c main() Function |
|
173 |
|
174 The \c main() function instantiates QApplication and \c ImageComposer |
|
175 and invokes its \l{QWidget::show()}{show()} function. |
|
176 |
|
177 \snippet examples/painting/imagecomposition/main.cpp 0 |
|
178 |
|
179 */ |