1
<?xml version="1.0" encoding="iso-8859-1"?>
3
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
4
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
6
<title>Qt 4.0: sortingbox.cpp Example File (widgets/tooltips/sortingbox.cpp)</title>
7
<style>h3.fn,span.fn { margin-left: 1cm; text-indent: -1cm; }
8
a:link { color: #004faf; text-decoration: none }
9
a:visited { color: #672967; text-decoration: none }
10
td.postheader { font-family: sans-serif }
11
tr.address { font-family: sans-serif }
12
body { background: #ffffff; color: black; }</style>
15
<table border="0" cellpadding="0" cellspacing="0" width="100%">
17
<td align="left" valign="top" width="32"><img src="images/qt-logo.png" align="left" width="32" height="32" border="0" /></td>
18
<td width="1"> </td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a> · <a href="classes.html"><font color="#004faf">All Classes</font></a> · <a href="mainclasses.html"><font color="#004faf">Main Classes</font></a> · <a href="annotated.html"><font color="#004faf">Annotated</font></a> · <a href="groups.html"><font color="#004faf">Grouped Classes</font></a> · <a href="functions.html"><font color="#004faf">Functions</font></a></td>
19
<td align="right" valign="top" width="230"><img src="images/trolltech-logo.png" align="right" width="203" height="32" border="0" /></td></tr></table><h1 align="center">sortingbox.cpp Example File<br /><small><small>widgets/tooltips/sortingbox.cpp</small></small></h1>
20
<pre> /****************************************************************************
22
** Copyright (C) 2005-2005 Trolltech AS. All rights reserved.
24
** This file is part of the documentation of the Qt Toolkit.
26
** This file may be distributed under the terms of the Q Public License
27
** as defined by Trolltech AS of Norway and appearing in the file
28
** LICENSE.QPL included in the packaging of this file.
30
** This file may be distributed and/or modified under the terms of the
31
** GNU General Public License version 2 as published by the Free Software
32
** Foundation and appearing in the file LICENSE.GPL included in the
33
** packaging of this file.
35
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
36
** information about Qt Commercial License Agreements.
37
** See http://www.trolltech.com/qpl/ for QPL licensing information.
38
** See http://www.trolltech.com/gpl/ for GPL licensing information.
40
** Contact info@trolltech.com if any conditions of this licensing are
43
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
44
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
46
****************************************************************************/
48
#include <QtGui>
50
#include <stdlib.h>
52
#include "sortingbox.h"
54
SortingBox::SortingBox()
56
setAttribute(Qt::WA_StaticContents);
57
setMouseTracking(true);
58
setBackgroundRole(QPalette::Base);
62
newCircleButton = createToolButton(tr("New Circle"),
63
QIcon(":/images/circle.png"),
64
SLOT(createNewCircle()));
66
newSquareButton = createToolButton(tr("New Square"),
67
QIcon(":/images/square.png"),
68
SLOT(createNewSquare()));
70
newTriangleButton = createToolButton(tr("New Triangle"),
71
QIcon(":/images/triangle.png"),
72
SLOT(createNewTriangle()));
74
circlePath.addEllipse(QRect(0, 0, 100, 100));
75
squarePath.addRect(QRect(0, 0, 100, 100));
77
qreal x = trianglePath.currentPosition().x();
78
qreal y = trianglePath.currentPosition().y();
79
trianglePath.moveTo(x + 120 / 2, y);
80
trianglePath.lineTo(0, 100);
81
trianglePath.lineTo(120, 100);
82
trianglePath.lineTo(x + 120 / 2, y);
84
setWindowTitle(tr("Tooltips"));
87
createShapeItem(circlePath, tr("Circle"), initialItemPosition(circlePath),
89
createShapeItem(squarePath, tr("Square"), initialItemPosition(squarePath),
91
createShapeItem(trianglePath, tr("Triangle"),
92
initialItemPosition(trianglePath), initialItemColor());
95
bool SortingBox::event(QEvent *event)
97
if (event->type() == QEvent::ToolTip) {
98
QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event);
99
int index = itemAt(helpEvent->pos());
101
QToolTip::showText(helpEvent->globalPos(), shapeItems[index].toolTip());
103
return QWidget::event(event);
106
void SortingBox::resizeEvent(QResizeEvent * /* event */)
108
int margin = style()->pixelMetric(QStyle::PM_DefaultTopLevelMargin);
109
int x = width() - margin;
110
int y = height() - margin;
112
y = updateButtonGeometry(newCircleButton, x, y);
113
y = updateButtonGeometry(newSquareButton, x, y);
114
updateButtonGeometry(newTriangleButton, x, y);
117
void SortingBox::paintEvent(QPaintEvent * /* event */)
119
QPainter painter(this);
120
foreach (ShapeItem shapeItem, shapeItems) {
121
painter.translate(shapeItem.position());
122
painter.setBrush(shapeItem.color());
123
painter.drawPath(shapeItem.path());
124
painter.translate(-shapeItem.position());
128
void SortingBox::mousePressEvent(QMouseEvent *event)
130
if (event->button() == Qt::LeftButton) {
131
int index = itemAt(event->pos());
133
itemInMotion = &shapeItems[index];
134
previousPosition = event->pos();
135
shapeItems.move(index, shapeItems.size() - 1);
141
void SortingBox::mouseMoveEvent(QMouseEvent *event)
143
if ((event->buttons() & Qt::LeftButton) && itemInMotion)
144
moveItemTo(event->pos());
147
void SortingBox::mouseReleaseEvent(QMouseEvent *event)
149
if (event->button() == Qt::LeftButton && itemInMotion) {
150
moveItemTo(event->pos());
155
void SortingBox::createNewCircle()
157
createShapeItem(circlePath, tr("Circle"), randomItemPosition(),
161
void SortingBox::createNewSquare()
163
createShapeItem(squarePath, tr("Square"), randomItemPosition(),
167
void SortingBox::createNewTriangle()
169
createShapeItem(trianglePath, tr("Triangle"), randomItemPosition(),
173
int SortingBox::itemAt(const QPoint &pos)
175
for (int i = shapeItems.size() - 1; i >= 0; --i) {
176
const ShapeItem &item = shapeItems[i];
177
if (item.path().contains(pos - item.position()))
183
void SortingBox::moveItemTo(const QPoint &pos)
185
QPoint offset = pos - previousPosition;
186
itemInMotion->setPosition(itemInMotion->position() + offset);
187
previousPosition = pos;
191
int SortingBox::updateButtonGeometry(QToolButton *button, int x, int y)
193
QSize size = button->sizeHint();
194
button->setGeometry(x - size.rwidth(), y - size.rheight(),
195
size.rwidth(), size.rheight());
197
return y - size.rheight()
198
- style()->pixelMetric(QStyle::PM_DefaultLayoutSpacing);
201
void SortingBox::createShapeItem(const QPainterPath &path,
202
const QString &toolTip, const QPoint &pos,
203
const QColor &color)
206
shapeItem.setPath(path);
207
shapeItem.setToolTip(toolTip);
208
shapeItem.setPosition(pos);
209
shapeItem.setColor(color);
210
shapeItems.append(shapeItem);
214
QToolButton *SortingBox::createToolButton(const QString &toolTip,
215
const QIcon &icon, const char *member)
217
QToolButton *button = new QToolButton(this);
218
button->setToolTip(toolTip);
219
button->setIcon(icon);
220
button->setIconSize(QSize(32, 32));
221
connect(button, SIGNAL(clicked()), this, member);
226
QPoint SortingBox::initialItemPosition(const QPainterPath &path)
229
int y = (height() - (int)path.controlPointRect().height()) / 2;
230
if (shapeItems.size() == 0)
231
x = ((3 * width()) / 2 - (int)path.controlPointRect().width()) / 2;
233
x = (width() / shapeItems.size()
234
- (int)path.controlPointRect().width()) / 2;
239
QPoint SortingBox::randomItemPosition()
241
return QPoint(rand() % (width() - 120), rand() % (height() - 120));
244
QColor SortingBox::initialItemColor()
246
return QColor::fromHsv(((shapeItems.size() + 1) * 85) % 256, 255, 190);
249
QColor SortingBox::randomItemColor()
251
return QColor::fromHsv(rand() % 256, 255, 190);
253
<p /><address><hr /><div align="center">
254
<table width="100%" cellspacing="0" border="0"><tr class="address">
255
<td width="30%">Copyright © 2005 <a href="trolltech.html">Trolltech</a></td>
256
<td width="40%" align="center"><a href="trademarks.html">Trademarks</a></td>
257
<td width="30%" align="right"><div align="right">Qt 4.0.0</div></td>
258
</tr></table></div></address></body>