source: trunk/examples/animation/appchooser/main.cpp@ 857

Last change on this file since 857 was 846, checked in by Dmitry A. Kuminov, 14 years ago

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

  • Property svn:eol-style set to native
File size: 5.0 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation ([email protected])
6**
7** This file is part of the QtCore module of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:BSD$
10** You may use this file under the terms of the BSD license as follows:
11**
12** "Redistribution and use in source and binary forms, with or without
13** modification, are permitted provided that the following conditions are
14** met:
15** * Redistributions of source code must retain the above copyright
16** notice, this list of conditions and the following disclaimer.
17** * Redistributions in binary form must reproduce the above copyright
18** notice, this list of conditions and the following disclaimer in
19** the documentation and/or other materials provided with the
20** distribution.
21** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
22** the names of its contributors may be used to endorse or promote
23** products derived from this software without specific prior written
24** permission.
25**
26** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
27** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
28** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
29** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
30** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
31** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
32** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
33** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
34** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
35** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
36** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
37** $QT_END_LICENSE$
38**
39****************************************************************************/
40
41#include <QtCore>
42#include <QtGui>
43
44
45class Pixmap : public QGraphicsWidget
46{
47 Q_OBJECT
48
49public:
50 Pixmap(const QPixmap &pix, QGraphicsItem *parent = 0)
51 : QGraphicsWidget(parent), orig(pix), p(pix)
52 {
53 }
54
55 void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
56 {
57 painter->drawPixmap(QPointF(), p);
58 }
59
60 virtual void mousePressEvent(QGraphicsSceneMouseEvent * )
61 {
62 emit clicked();
63 }
64
65 virtual void setGeometry(const QRectF &rect)
66 {
67 QGraphicsWidget::setGeometry(rect);
68
69 if (rect.size().width() > orig.size().width())
70 p = orig.scaled(rect.size().toSize());
71 else
72 p = orig;
73 }
74
75Q_SIGNALS:
76 void clicked();
77
78private:
79 QPixmap orig;
80 QPixmap p;
81};
82
83void createStates(const QObjectList &objects,
84 const QRect &selectedRect, QState *parent)
85{
86 for (int i = 0; i < objects.size(); ++i) {
87 QState *state = new QState(parent);
88 state->assignProperty(objects.at(i), "geometry", selectedRect);
89 parent->addTransition(objects.at(i), SIGNAL(clicked()), state);
90 }
91}
92
93void createAnimations(const QObjectList &objects, QStateMachine *machine)
94{
95 for (int i=0; i<objects.size(); ++i)
96 machine->addDefaultAnimation(new QPropertyAnimation(objects.at(i), "geometry"));
97}
98
99int main(int argc, char **argv)
100{
101 Q_INIT_RESOURCE(appchooser);
102
103 QApplication app(argc, argv);
104
105 Pixmap *p1 = new Pixmap(QPixmap(":/digikam.png"));
106 Pixmap *p2 = new Pixmap(QPixmap(":/akregator.png"));
107 Pixmap *p3 = new Pixmap(QPixmap(":/accessories-dictionary.png"));
108 Pixmap *p4 = new Pixmap(QPixmap(":/k3b.png"));
109
110 p1->setObjectName("p1");
111 p2->setObjectName("p2");
112 p3->setObjectName("p3");
113 p4->setObjectName("p4");
114
115 p1->setGeometry(QRectF(0.0, 0.0, 64.0, 64.0));
116 p2->setGeometry(QRectF(236.0, 0.0, 64.0, 64.0));
117 p3->setGeometry(QRectF(236.0, 236.0, 64.0, 64.0));
118 p4->setGeometry(QRectF(0.0, 236.0, 64.0, 64.0));
119
120 QGraphicsScene scene(0, 0, 300, 300);
121 scene.setBackgroundBrush(Qt::white);
122 scene.addItem(p1);
123 scene.addItem(p2);
124 scene.addItem(p3);
125 scene.addItem(p4);
126
127 QGraphicsView window(&scene);
128 window.setFrameStyle(0);
129 window.setAlignment(Qt::AlignLeft | Qt::AlignTop);
130 window.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
131 window.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
132
133 QStateMachine machine;
134 machine.setGlobalRestorePolicy(QStateMachine::RestoreProperties);
135
136 QState *group = new QState(&machine);
137 group->setObjectName("group");
138 QRect selectedRect(86, 86, 128, 128);
139
140 QState *idleState = new QState(group);
141 group->setInitialState(idleState);
142
143 QObjectList objects;
144 objects << p1 << p2 << p3 << p4;
145 createStates(objects, selectedRect, group);
146 createAnimations(objects, &machine);
147
148 machine.setInitialState(group);
149 machine.start();
150
151 window.resize(300, 300);
152 window.show();
153
154 return app.exec();
155}
156
157#include "main.moc"
Note: See TracBrowser for help on using the repository browser.