source: tests/modal/modal.cpp@ 1014

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

tests: modal: Redesigned to be more useful.

File size: 7.7 KB
Line 
1#include <QDebug>
2#include <QtGui>
3
4class MyMainWidget : public QWidget
5{
6 Q_OBJECT
7
8public:
9
10 MyMainWidget (QWidget *aParent = 0, Qt::WindowFlags aFlags = 0)
11 : QWidget (aParent, aFlags)
12 {
13 setWindowTitle (QString ("MyMainWidget (0x%1)")
14 .arg ((intptr_t) this, 8, 16, QChar('0')));
15
16 QHBoxLayout *pbLayout = new QHBoxLayout();
17
18 for (int i = 1; i <= 10; ++ i)
19 {
20 QPushButton *pb = new QPushButton (QString::number (i), this);
21 connect (pb, SIGNAL (clicked()), this, SLOT (nextTest()));
22 pbLayout->addWidget (pb);
23 }
24
25 mPBClone = new QPushButton ("Clone", this);
26 connect (mPBClone, SIGNAL (clicked()), this, SLOT (clone()));
27
28 mPBCloneModal = new QPushButton ("Modal Clone", this);
29 connect (mPBCloneModal, SIGNAL (clicked()), this, SLOT (cloneModal()));
30
31 mPBCloneAppModal = new QPushButton ("App Modal Clone", this);
32 connect (mPBCloneAppModal, SIGNAL (clicked()), this, SLOT (cloneAppModal()));
33
34 QVBoxLayout *layout = new QVBoxLayout();
35 layout->addLayout (pbLayout);
36 layout->addWidget (mPBClone);
37 layout->addWidget (mPBCloneModal);
38 layout->addWidget (mPBCloneAppModal);
39 setLayout (layout);
40 }
41
42 virtual ~MyMainWidget()
43 {
44 }
45
46 void test (int aNum, QWidget *aWgt, const QString &aText)
47 {
48 aWgt->setAttribute (Qt::WA_DeleteOnClose);
49
50 aWgt->setWindowTitle (QString ("[%1] %2 (0x%3)")
51 .arg (aNum)
52 .arg (aWgt->metaObject()->className())
53 .arg ((intptr_t) aWgt, 8, 16, QChar('0')));
54
55 QString newText = QString (
56 "[%1] %2\n\n"
57 "parentWidget() is %3\n"
58 "className() is %4\n"
59 "isWindow() is %5\n"
60 "windowFlags() is 0x%6\n"
61 "windowModality() is %7")
62 .arg (aNum)
63 .arg (aText)
64 .arg (aWgt->parentWidget() ? aWgt->parentWidget()->metaObject()
65 ->className()
66 : "<none>")
67 .arg (aWgt->metaObject()->className())
68 .arg (aWgt->isWindow())
69 .arg (aWgt->windowFlags(), 8, 16, QLatin1Char ('0'))
70 .arg (aWgt->windowModality());
71
72 if (aWgt->inherits ("QMessageBox"))
73 {
74 static_cast <QMessageBox *> (aWgt)->setText (newText);
75 }
76 else
77 {
78 QLabel *label = new QLabel (aWgt);
79 label->setText (newText);
80
81 QVBoxLayout *layout = new QVBoxLayout();
82 layout->addWidget (label);
83 aWgt->setLayout (layout);
84 }
85
86 aWgt->show();
87 }
88
89public slots:
90
91 void nextTest()
92 {
93 int num = static_cast <QPushButton *> (sender())->text().toInt();
94 switch (num)
95 {
96 case 1:
97 {
98 QWidget *w = new QWidget();
99 test (num, w,
100 "QWidget().\n"
101 "Should have a taskbar entry.\n"
102 "Should not be always on top of parent.\n"
103 "Should not block parent.");
104 break;
105 }
106 case 2:
107 {
108 QWidget *w = new QWidget (this, Qt::Window);
109 test (num, w,
110 "QWidget (this, Qt::Window).\n"
111 "Should not have a taskbar entry.\n"
112 "Should be always on top of parent.\n"
113 "Should not block parent.");
114 break;
115 }
116 case 3:
117 {
118 QWidget *w = new QDialog();
119 test (num, w,
120 "QDialog().\n"
121 "Should have a taskbar entry.\n"
122 "Should not be always on top of parent.\n"
123 "Should not block parent.");
124 break;
125 }
126 case 4:
127 {
128 QWidget *w = new QDialog (this);
129 test (num, w,
130 "QDialog(this).\n"
131 "Should not have a taskbar entry.\n"
132 "Should be always on top of parent.\n"
133 "Should not block parent.");
134 break;
135 }
136 case 5:
137 {
138 QWidget *w = new QMessageBox();
139 test (num, w,
140 "QMessageBox().\n"
141 "Should have a taskbar entry.\n"
142 "Should be always on top of parent.\n"
143 "Should block parent.");
144 break;
145 }
146 case 6:
147 {
148 QWidget *w = new QMessageBox (this);
149 test (num, w,
150 "QMessageBox (this).\n"
151 "Should not have a taskbar entry.\n"
152 "Should be always on top of parent.\n"
153 "Should block parent.");
154 break;
155 }
156 case 7:
157 {
158 QWidget *w = new QWidget();
159 w->setWindowModality (Qt::WindowModal);
160 test (num, w,
161 "QWidget() - WindowModal.\n"
162 "Should have a taskbar entry.\n"
163 "Should not be always on top of parent.\n"
164 "Should not block parent.");
165 break;
166 }
167 case 8:
168 {
169 QWidget *w = new QWidget (this, Qt::Window);
170 w->setWindowModality (Qt::WindowModal);
171 test (num, w,
172 "QWidget (this, Qt::Window) - WindowModal.\n"
173 "Should not have a taskbar entry.\n"
174 "Should be always on top of parent.\n"
175 "Should block parent.");
176 break;
177 }
178 case 9:
179 {
180 QWidget *w = new QWidget(0, Qt::Dialog);
181 w->setWindowModality (Qt::ApplicationModal);
182 test (num, w,
183 "QWidget() - ApplicationModal.\n"
184 "Should have a taskbar entry.\n"
185 "Should be always on top of parent.\n"
186 "Should block parent.");
187 break;
188 }
189 case 10:
190 {
191 QWidget *w = new QWidget (this, Qt::Window);
192 w->setWindowModality (Qt::ApplicationModal);
193 test (num, w,
194 "QWidget (this, Qt::Window) - ApplicationModal.\n"
195 "Should not have a taskbar entry.\n"
196 "Should be always on top of parent.\n"
197 "Should block parent.");
198 break;
199 }
200 default:
201 return;
202 }
203 }
204
205 void clone()
206 {
207 QWidget *w = new MyMainWidget ();
208 w->setAttribute (Qt::WA_DeleteOnClose);
209 w->show();
210 }
211
212 void cloneModal()
213 {
214 QWidget *w = new MyMainWidget (this, Qt::Window);
215 w->setAttribute (Qt::WA_DeleteOnClose);
216 w->setWindowModality (Qt::WindowModal);
217 w->setWindowTitle (QString("[M] ") + w->windowTitle());
218 w->show();
219 }
220
221 void cloneAppModal()
222 {
223 QWidget *w = new MyMainWidget();
224 w->setAttribute (Qt::WA_DeleteOnClose);
225 w->setWindowModality (Qt::ApplicationModal);
226 w->setWindowTitle (QString("[AM] ") + w->windowTitle());
227 w->show();
228 }
229
230private:
231
232 QPushButton *mPBClone;
233 QPushButton *mPBCloneModal;
234 QPushButton *mPBCloneAppModal;
235};
236
237int main (int argc, char **argv)
238{
239 QApplication app (argc, argv);
240 app.setQuitOnLastWindowClosed (true);
241
242 MyMainWidget *mainWidget = new MyMainWidget();
243 mainWidget->show();
244
245 return app.exec();
246}
247
248#include "modal.moc"
Note: See TracBrowser for help on using the repository browser.