File: widgets-windowflags.html

package info (click to toggle)
qt4-x11 4%3A4.8.2%2Bdfsg-11
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 701,696 kB
  • sloc: cpp: 2,686,179; ansic: 375,485; python: 25,859; sh: 19,349; xml: 17,091; perl: 14,765; yacc: 5,383; asm: 5,038; makefile: 1,259; lex: 555; ruby: 526; objc: 347; cs: 112; pascal: 112; php: 54; sed: 34
file content (394 lines) | stat: -rw-r--r-- 46,158 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en_US" lang="en_US">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- windowflags.qdoc -->
  <title>Qt 4.8: Window Flags Example</title>
  <link rel="stylesheet" type="text/css" href="style/offline.css" />
</head>
<body>
<div class="header" id="qtdocheader">
  <div class="content"> 
    <a href="index.html" class="qtref"><span>Qt Reference Documentation</span></a>
  </div>
  <div class="breadcrumb toolblock">
    <ul>
      <li class="first"><a href="index.html">Home</a></li>
      <!--  Breadcrumbs go here -->
<li><a href="all-examples.html">Examples</a></li>
<li>Window Flags Example</li>
    </ul>
  </div>
</div>
<div class="content mainContent">
<div class="toc">
<h3><a name="toc">Contents</a></h3>
<ul>
<li class="level1"><a href="#controllerwindow-class-definition">ControllerWindow Class Definition</a></li>
<li class="level1"><a href="#controllerwindow-class-implementation">ControllerWindow Class Implementation</a></li>
<li class="level1"><a href="#previewwindow-class-definition">PreviewWindow Class Definition</a></li>
<li class="level1"><a href="#previewwindow-class-implementation">PreviewWindow Class Implementation</a></li>
</ul>
</div>
<h1 class="title">Window Flags Example</h1>
<span class="subtitle"></span>
<!-- $$$widgets/windowflags-description -->
<div class="descr"> <a name="details"></a>
<p>Files:</p>
<ul>
<li><a href="widgets-windowflags-controllerwindow-cpp.html">widgets/windowflags/controllerwindow.cpp</a></li>
<li><a href="widgets-windowflags-controllerwindow-h.html">widgets/windowflags/controllerwindow.h</a></li>
<li><a href="widgets-windowflags-previewwindow-cpp.html">widgets/windowflags/previewwindow.cpp</a></li>
<li><a href="widgets-windowflags-previewwindow-h.html">widgets/windowflags/previewwindow.h</a></li>
<li><a href="widgets-windowflags-main-cpp.html">widgets/windowflags/main.cpp</a></li>
<li><a href="widgets-windowflags-windowflags-pro.html">widgets/windowflags/windowflags.pro</a></li>
</ul>
<p>The Window Flags example shows how to use the window flags available in Qt.<p>A window flag is either a type or a hint. A type is used to specify various window-system properties for the widget. A widget can only have one type, and the default is <a href="qt.html#WindowType-enum">Qt::Widget</a>. However, a widget can have zero or more hints. The hints are used to customize the appearance of top-level windows.</p>
<p>A widget's flags are stored in a <a href="qt.html#WindowType-enum">Qt::WindowFlags</a> type which stores an OR combination of the flags.</p>
<p class="centerAlign"><img src="images/windowflags-example.png" alt="Screenshot of the Window Flags example" /></p><p>The example consists of two classes:</p>
<ul>
<li><tt>ControllerWindow</tt> is the main application widget that allows the user to choose among the available window flags, and displays the effect on a separate preview window.</li>
<li><tt>PreviewWindow</tt> is a custom widget displaying the name of its currently set window flags in a read-only text editor.</li>
</ul>
<p>We will start by reviewing the <tt>ControllerWindow</tt> class, then we will take a look at the <tt>PreviewWindow</tt> class.</p>
<a name="controllerwindow-class-definition"></a>
<h2>ControllerWindow Class Definition</h2>
<pre class="cpp"> <span class="keyword">class</span> ControllerWindow : <span class="keyword">public</span> <span class="type"><a href="qwidget.html">QWidget</a></span>
 {
     Q_OBJECT

 <span class="keyword">public</span>:
     ControllerWindow();

 <span class="keyword">private</span> <span class="keyword">slots</span>:
     <span class="type">void</span> updatePreview();

 <span class="keyword">private</span>:
     <span class="type">void</span> createTypeGroupBox();
     <span class="type">void</span> createHintsGroupBox();
     <span class="type"><a href="qcheckbox.html">QCheckBox</a></span> <span class="operator">*</span>createCheckBox(<span class="keyword">const</span> <span class="type"><a href="qstring.html">QString</a></span> <span class="operator">&amp;</span>text);
     <span class="type"><a href="qradiobutton.html">QRadioButton</a></span> <span class="operator">*</span>createRadioButton(<span class="keyword">const</span> <span class="type"><a href="qstring.html">QString</a></span> <span class="operator">&amp;</span>text);

     PreviewWindow <span class="operator">*</span>previewWindow;

     <span class="type"><a href="qgroupbox.html">QGroupBox</a></span> <span class="operator">*</span>typeGroupBox;
     <span class="type"><a href="qgroupbox.html">QGroupBox</a></span> <span class="operator">*</span>hintsGroupBox;
     <span class="type"><a href="qpushbutton.html">QPushButton</a></span> <span class="operator">*</span>quitButton;

     <span class="type"><a href="qradiobutton.html">QRadioButton</a></span> <span class="operator">*</span>windowRadioButton;
     <span class="type"><a href="qradiobutton.html">QRadioButton</a></span> <span class="operator">*</span>dialogRadioButton;
     <span class="type"><a href="qradiobutton.html">QRadioButton</a></span> <span class="operator">*</span>sheetRadioButton;
     <span class="type"><a href="qradiobutton.html">QRadioButton</a></span> <span class="operator">*</span>drawerRadioButton;
     <span class="type"><a href="qradiobutton.html">QRadioButton</a></span> <span class="operator">*</span>popupRadioButton;
     <span class="type"><a href="qradiobutton.html">QRadioButton</a></span> <span class="operator">*</span>toolRadioButton;
     <span class="type"><a href="qradiobutton.html">QRadioButton</a></span> <span class="operator">*</span>toolTipRadioButton;
     <span class="type"><a href="qradiobutton.html">QRadioButton</a></span> <span class="operator">*</span>splashScreenRadioButton;

     <span class="type"><a href="qcheckbox.html">QCheckBox</a></span> <span class="operator">*</span>msWindowsFixedSizeDialogCheckBox;
     <span class="type"><a href="qcheckbox.html">QCheckBox</a></span> <span class="operator">*</span>x11BypassWindowManagerCheckBox;
     <span class="type"><a href="qcheckbox.html">QCheckBox</a></span> <span class="operator">*</span>framelessWindowCheckBox;
     <span class="type"><a href="qcheckbox.html">QCheckBox</a></span> <span class="operator">*</span>windowTitleCheckBox;
     <span class="type"><a href="qcheckbox.html">QCheckBox</a></span> <span class="operator">*</span>windowSystemMenuCheckBox;
     <span class="type"><a href="qcheckbox.html">QCheckBox</a></span> <span class="operator">*</span>windowMinimizeButtonCheckBox;
     <span class="type"><a href="qcheckbox.html">QCheckBox</a></span> <span class="operator">*</span>windowMaximizeButtonCheckBox;
     <span class="type"><a href="qcheckbox.html">QCheckBox</a></span> <span class="operator">*</span>windowCloseButtonCheckBox;
     <span class="type"><a href="qcheckbox.html">QCheckBox</a></span> <span class="operator">*</span>windowContextHelpButtonCheckBox;
     <span class="type"><a href="qcheckbox.html">QCheckBox</a></span> <span class="operator">*</span>windowShadeButtonCheckBox;
     <span class="type"><a href="qcheckbox.html">QCheckBox</a></span> <span class="operator">*</span>windowStaysOnTopCheckBox;
     <span class="type"><a href="qcheckbox.html">QCheckBox</a></span> <span class="operator">*</span>windowStaysOnBottomCheckBox;
     <span class="type"><a href="qcheckbox.html">QCheckBox</a></span> <span class="operator">*</span>customizeWindowHintCheckBox;
 };</pre>
<p>The <tt>ControllerWindow</tt> class inherits <a href="qwidget.html">QWidget</a>. The widget allows the user to choose among the available window flags, and displays the effect on a separate preview window.</p>
<p>We declare a private <tt>updatePreview()</tt> slot to refresh the preview window whenever the user changes the window flags.</p>
<p>We also declare several private functions to simplify the constructor: We call the <tt>createTypeGroupBox()</tt> function to create a radio button for each available window type, using the private <tt>createButton()</tt> function, and gather them within a group box. In a similar way we use the <tt>createHintsGroupBox()</tt> function to create a check box for each available hint, using the private <tt>createCheckBox()</tt> function.</p>
<p>In addition to the various radio buttons and checkboxes, we need an associated <tt>PreviewWindow</tt> to show the effect of the currently chosen window flags.</p>
<p class="centerAlign"><img src="images/windowflags_controllerwindow.png" alt="Screenshot of the Controller Window" /></p><a name="controllerwindow-class-implementation"></a>
<h2>ControllerWindow Class Implementation</h2>
<pre class="cpp"> ControllerWindow<span class="operator">::</span>ControllerWindow()
 {
     previewWindow <span class="operator">=</span> <span class="keyword">new</span> PreviewWindow(<span class="keyword">this</span>);

     createTypeGroupBox();
     createHintsGroupBox();

     quitButton <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qpushbutton.html">QPushButton</a></span>(tr(<span class="string">&quot;&amp;Quit&quot;</span>));
     connect(quitButton<span class="operator">,</span> SIGNAL(clicked())<span class="operator">,</span> qApp<span class="operator">,</span> SLOT(quit()));

     <span class="type"><a href="qhboxlayout.html">QHBoxLayout</a></span> <span class="operator">*</span>bottomLayout <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qhboxlayout.html">QHBoxLayout</a></span>;
     bottomLayout<span class="operator">-</span><span class="operator">&gt;</span>addStretch();
     bottomLayout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(quitButton);

     <span class="type"><a href="qhboxlayout.html">QHBoxLayout</a></span> <span class="operator">*</span>mainLayout <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qhboxlayout.html">QHBoxLayout</a></span>;
     mainLayout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(typeGroupBox);
     mainLayout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(hintsGroupBox);
     mainLayout<span class="operator">-</span><span class="operator">&gt;</span>addLayout(bottomLayout);
     setLayout(mainLayout);

     setWindowTitle(tr(<span class="string">&quot;Window Flags&quot;</span>));
     updatePreview();
 }</pre>
<p>In the constructor we first create the preview window. Then we create the group boxes containing the available window flags using the private <tt>createTypeGroupBox()</tt> and <tt>createHintsGroupBox()</tt> functions. In addition we create a <b>Quit</b> button. We put the button and a stretchable space in a separate layout to make the button appear in the <tt>WindowFlag</tt> widget's right bottom corner.</p>
<p>Finally, we add the button's layout and the two goup boxes to a <a href="qvboxlayout.html">QVBoxLayout</a>, set the window title and refresh the preview window using the <tt>updatePreview()</tt> slot.</p>
<pre class="cpp"> <span class="type">void</span> ControllerWindow<span class="operator">::</span>updatePreview()
 {
     <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>WindowFlags flags <span class="operator">=</span> <span class="number">0</span>;

     <span class="keyword">if</span> (windowRadioButton<span class="operator">-</span><span class="operator">&gt;</span>isChecked()) {
         flags <span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>Window;
     } <span class="keyword">else</span> <span class="keyword">if</span> (dialogRadioButton<span class="operator">-</span><span class="operator">&gt;</span>isChecked()) {
         flags <span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>Dialog;
     } <span class="keyword">else</span> <span class="keyword">if</span> (sheetRadioButton<span class="operator">-</span><span class="operator">&gt;</span>isChecked()) {
         flags <span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>Sheet;
     } <span class="keyword">else</span> <span class="keyword">if</span> (drawerRadioButton<span class="operator">-</span><span class="operator">&gt;</span>isChecked()) {
         flags <span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>Drawer;
     } <span class="keyword">else</span> <span class="keyword">if</span> (popupRadioButton<span class="operator">-</span><span class="operator">&gt;</span>isChecked()) {
         flags <span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>Popup;
     } <span class="keyword">else</span> <span class="keyword">if</span> (toolRadioButton<span class="operator">-</span><span class="operator">&gt;</span>isChecked()) {
         flags <span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>Tool;
     } <span class="keyword">else</span> <span class="keyword">if</span> (toolTipRadioButton<span class="operator">-</span><span class="operator">&gt;</span>isChecked()) {
         flags <span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>ToolTip;
     } <span class="keyword">else</span> <span class="keyword">if</span> (splashScreenRadioButton<span class="operator">-</span><span class="operator">&gt;</span>isChecked()) {
         flags <span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>SplashScreen;
     }</pre>
<p>The <tt>updatePreview()</tt> slot is called whenever the user changes any of the window flags. First we create an empty <a href="qt.html#WindowType-enum">Qt::WindowFlags</a> <tt>flags</tt>, then we determine which one of the types that is checked and add it to <tt>flags</tt>.</p>
<pre class="cpp">     <span class="keyword">if</span> (msWindowsFixedSizeDialogCheckBox<span class="operator">-</span><span class="operator">&gt;</span>isChecked())
         flags <span class="operator">|</span><span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>MSWindowsFixedSizeDialogHint;
     <span class="keyword">if</span> (x11BypassWindowManagerCheckBox<span class="operator">-</span><span class="operator">&gt;</span>isChecked())
         flags <span class="operator">|</span><span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>X11BypassWindowManagerHint;
     <span class="keyword">if</span> (framelessWindowCheckBox<span class="operator">-</span><span class="operator">&gt;</span>isChecked())
         flags <span class="operator">|</span><span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>FramelessWindowHint;
     <span class="keyword">if</span> (windowTitleCheckBox<span class="operator">-</span><span class="operator">&gt;</span>isChecked())
         flags <span class="operator">|</span><span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>WindowTitleHint;
     <span class="keyword">if</span> (windowSystemMenuCheckBox<span class="operator">-</span><span class="operator">&gt;</span>isChecked())
         flags <span class="operator">|</span><span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>WindowSystemMenuHint;
     <span class="keyword">if</span> (windowMinimizeButtonCheckBox<span class="operator">-</span><span class="operator">&gt;</span>isChecked())
         flags <span class="operator">|</span><span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>WindowMinimizeButtonHint;
     <span class="keyword">if</span> (windowMaximizeButtonCheckBox<span class="operator">-</span><span class="operator">&gt;</span>isChecked())
         flags <span class="operator">|</span><span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>WindowMaximizeButtonHint;
     <span class="keyword">if</span> (windowCloseButtonCheckBox<span class="operator">-</span><span class="operator">&gt;</span>isChecked())
         flags <span class="operator">|</span><span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>WindowCloseButtonHint;
     <span class="keyword">if</span> (windowContextHelpButtonCheckBox<span class="operator">-</span><span class="operator">&gt;</span>isChecked())
         flags <span class="operator">|</span><span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>WindowContextHelpButtonHint;
     <span class="keyword">if</span> (windowShadeButtonCheckBox<span class="operator">-</span><span class="operator">&gt;</span>isChecked())
         flags <span class="operator">|</span><span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>WindowShadeButtonHint;
     <span class="keyword">if</span> (windowStaysOnTopCheckBox<span class="operator">-</span><span class="operator">&gt;</span>isChecked())
         flags <span class="operator">|</span><span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>WindowStaysOnTopHint;
     <span class="keyword">if</span> (windowStaysOnBottomCheckBox<span class="operator">-</span><span class="operator">&gt;</span>isChecked())
         flags <span class="operator">|</span><span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>WindowStaysOnBottomHint;
     <span class="keyword">if</span> (customizeWindowHintCheckBox<span class="operator">-</span><span class="operator">&gt;</span>isChecked())
         flags <span class="operator">|</span><span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>CustomizeWindowHint;

     previewWindow<span class="operator">-</span><span class="operator">&gt;</span>setWindowFlags(flags);</pre>
<p>We also determine which of the hints that are checked, and add them to <tt>flags</tt> using an OR operator. We use <tt>flags</tt> to set the window flags for the preview window.</p>
<pre class="cpp">     <span class="type"><a href="qpoint.html">QPoint</a></span> pos <span class="operator">=</span> previewWindow<span class="operator">-</span><span class="operator">&gt;</span>pos();
     <span class="keyword">if</span> (pos<span class="operator">.</span>x() <span class="operator">&lt;</span> <span class="number">0</span>)
         pos<span class="operator">.</span>setX(<span class="number">0</span>);
     <span class="keyword">if</span> (pos<span class="operator">.</span>y() <span class="operator">&lt;</span> <span class="number">0</span>)
         pos<span class="operator">.</span>setY(<span class="number">0</span>);
     previewWindow<span class="operator">-</span><span class="operator">&gt;</span>move(pos);
     previewWindow<span class="operator">-</span><span class="operator">&gt;</span>show();
 }</pre>
<p>We adjust the position of the preview window. The reason we do that, is that playing around with the window's frame may on some platforms cause the window's position to be changed behind our back. If a window is located in the upper left corner of the screen, parts of the window may not be visible. So we adjust the widget's position to make sure that, if this happens, the window is moved within the screen's boundaries. Finally, we call <a href="qwidget.html#show">QWidget::show</a>() to make sure the preview window is visible.</p>
<pre class="cpp"> <span class="type">void</span> ControllerWindow<span class="operator">::</span>createTypeGroupBox()
 {
     typeGroupBox <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qgroupbox.html">QGroupBox</a></span>(tr(<span class="string">&quot;Type&quot;</span>));

     windowRadioButton <span class="operator">=</span> createRadioButton(tr(<span class="string">&quot;Window&quot;</span>));
     dialogRadioButton <span class="operator">=</span> createRadioButton(tr(<span class="string">&quot;Dialog&quot;</span>));
     sheetRadioButton <span class="operator">=</span> createRadioButton(tr(<span class="string">&quot;Sheet&quot;</span>));
     drawerRadioButton <span class="operator">=</span> createRadioButton(tr(<span class="string">&quot;Drawer&quot;</span>));
     popupRadioButton <span class="operator">=</span> createRadioButton(tr(<span class="string">&quot;Popup&quot;</span>));
     toolRadioButton <span class="operator">=</span> createRadioButton(tr(<span class="string">&quot;Tool&quot;</span>));
     toolTipRadioButton <span class="operator">=</span> createRadioButton(tr(<span class="string">&quot;Tooltip&quot;</span>));
     splashScreenRadioButton <span class="operator">=</span> createRadioButton(tr(<span class="string">&quot;Splash screen&quot;</span>));
     windowRadioButton<span class="operator">-</span><span class="operator">&gt;</span>setChecked(<span class="keyword">true</span>);

     <span class="type"><a href="qgridlayout.html">QGridLayout</a></span> <span class="operator">*</span>layout <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qgridlayout.html">QGridLayout</a></span>;
     layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(windowRadioButton<span class="operator">,</span> <span class="number">0</span><span class="operator">,</span> <span class="number">0</span>);
     layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(dialogRadioButton<span class="operator">,</span> <span class="number">1</span><span class="operator">,</span> <span class="number">0</span>);
     layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(sheetRadioButton<span class="operator">,</span> <span class="number">2</span><span class="operator">,</span> <span class="number">0</span>);
     layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(drawerRadioButton<span class="operator">,</span> <span class="number">3</span><span class="operator">,</span> <span class="number">0</span>);
     layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(popupRadioButton<span class="operator">,</span> <span class="number">0</span><span class="operator">,</span> <span class="number">1</span>);
     layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(toolRadioButton<span class="operator">,</span> <span class="number">1</span><span class="operator">,</span> <span class="number">1</span>);
     layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(toolTipRadioButton<span class="operator">,</span> <span class="number">2</span><span class="operator">,</span> <span class="number">1</span>);
     layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(splashScreenRadioButton<span class="operator">,</span> <span class="number">3</span><span class="operator">,</span> <span class="number">1</span>);
     typeGroupBox<span class="operator">-</span><span class="operator">&gt;</span>setLayout(layout);
 }</pre>
<p>The private <tt>createTypeGroupBox()</tt> function is called from the constructor.</p>
<p>First we create a group box, and then we create a radio button (using the private <tt>createRadioButton()</tt> function) for each of the available types among the window flags. We make <a href="qt.html#WindowType-enum">Qt::Window</a> the initially applied type. We put the radio buttons into a <a href="qgridlayout.html">QGridLayout</a> and install the layout on the group box.</p>
<p>We do not include the default <a href="qt.html#WindowType-enum">Qt::Widget</a> type. The reason is that it behaves somewhat different than the other types. If the type is not specified for a widget, and it has no parent, the widget is a window. However, if it has a parent, it is a standard child widget. The other types are all top-level windows, and since the hints only affect top-level windows, we abandon the <a href="qt.html#WindowType-enum">Qt::Widget</a> type.</p>
<pre class="cpp"> <span class="type">void</span> ControllerWindow<span class="operator">::</span>createHintsGroupBox()
 {
     hintsGroupBox <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qgroupbox.html">QGroupBox</a></span>(tr(<span class="string">&quot;Hints&quot;</span>));

     msWindowsFixedSizeDialogCheckBox <span class="operator">=</span>
             createCheckBox(tr(<span class="string">&quot;MS Windows fixed size dialog&quot;</span>));
     x11BypassWindowManagerCheckBox <span class="operator">=</span>
             createCheckBox(tr(<span class="string">&quot;X11 bypass window manager&quot;</span>));
     framelessWindowCheckBox <span class="operator">=</span> createCheckBox(tr(<span class="string">&quot;Frameless window&quot;</span>));
     windowTitleCheckBox <span class="operator">=</span> createCheckBox(tr(<span class="string">&quot;Window title&quot;</span>));
     windowSystemMenuCheckBox <span class="operator">=</span> createCheckBox(tr(<span class="string">&quot;Window system menu&quot;</span>));
     windowMinimizeButtonCheckBox <span class="operator">=</span> createCheckBox(tr(<span class="string">&quot;Window minimize button&quot;</span>));
     windowMaximizeButtonCheckBox <span class="operator">=</span> createCheckBox(tr(<span class="string">&quot;Window maximize button&quot;</span>));
     windowCloseButtonCheckBox <span class="operator">=</span> createCheckBox(tr(<span class="string">&quot;Window close button&quot;</span>));
     windowContextHelpButtonCheckBox <span class="operator">=</span>
             createCheckBox(tr(<span class="string">&quot;Window context help button&quot;</span>));
     windowShadeButtonCheckBox <span class="operator">=</span> createCheckBox(tr(<span class="string">&quot;Window shade button&quot;</span>));
     windowStaysOnTopCheckBox <span class="operator">=</span> createCheckBox(tr(<span class="string">&quot;Window stays on top&quot;</span>));
     windowStaysOnBottomCheckBox <span class="operator">=</span> createCheckBox(tr(<span class="string">&quot;Window stays on bottom&quot;</span>));
     customizeWindowHintCheckBox<span class="operator">=</span> createCheckBox(tr(<span class="string">&quot;Customize window&quot;</span>));

     <span class="type"><a href="qgridlayout.html">QGridLayout</a></span> <span class="operator">*</span>layout <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qgridlayout.html">QGridLayout</a></span>;
     layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(msWindowsFixedSizeDialogCheckBox<span class="operator">,</span> <span class="number">0</span><span class="operator">,</span> <span class="number">0</span>);
     layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(x11BypassWindowManagerCheckBox<span class="operator">,</span> <span class="number">1</span><span class="operator">,</span> <span class="number">0</span>);
     layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(framelessWindowCheckBox<span class="operator">,</span> <span class="number">2</span><span class="operator">,</span> <span class="number">0</span>);
     layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(windowTitleCheckBox<span class="operator">,</span> <span class="number">3</span><span class="operator">,</span> <span class="number">0</span>);
     layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(windowSystemMenuCheckBox<span class="operator">,</span> <span class="number">4</span><span class="operator">,</span> <span class="number">0</span>);
     layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(windowMinimizeButtonCheckBox<span class="operator">,</span> <span class="number">0</span><span class="operator">,</span> <span class="number">1</span>);
     layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(windowMaximizeButtonCheckBox<span class="operator">,</span> <span class="number">1</span><span class="operator">,</span> <span class="number">1</span>);
     layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(windowCloseButtonCheckBox<span class="operator">,</span> <span class="number">2</span><span class="operator">,</span> <span class="number">1</span>);
     layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(windowContextHelpButtonCheckBox<span class="operator">,</span> <span class="number">3</span><span class="operator">,</span> <span class="number">1</span>);
     layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(windowShadeButtonCheckBox<span class="operator">,</span> <span class="number">4</span><span class="operator">,</span> <span class="number">1</span>);
     layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(windowStaysOnTopCheckBox<span class="operator">,</span> <span class="number">5</span><span class="operator">,</span> <span class="number">1</span>);
     layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(windowStaysOnBottomCheckBox<span class="operator">,</span> <span class="number">6</span><span class="operator">,</span> <span class="number">1</span>);
     layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(customizeWindowHintCheckBox<span class="operator">,</span> <span class="number">5</span><span class="operator">,</span> <span class="number">0</span>);
     hintsGroupBox<span class="operator">-</span><span class="operator">&gt;</span>setLayout(layout);
 }</pre>
<p>The private <tt>createHintsGroupBox()</tt> function is also called from the constructor.</p>
<p>Again, the first thing we do is to create a group box. Then we create a checkbox, using the private <tt>createCheckBox()</tt> function, for each of the available hints among the window flags. We put the checkboxes into a <a href="qgridlayout.html">QGridLayout</a> and install the layout on the group box.</p>
<pre class="cpp"> <span class="type"><a href="qcheckbox.html">QCheckBox</a></span> <span class="operator">*</span>ControllerWindow<span class="operator">::</span>createCheckBox(<span class="keyword">const</span> <span class="type"><a href="qstring.html">QString</a></span> <span class="operator">&amp;</span>text)
 {
     <span class="type"><a href="qcheckbox.html">QCheckBox</a></span> <span class="operator">*</span>checkBox <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qcheckbox.html">QCheckBox</a></span>(text);
     connect(checkBox<span class="operator">,</span> SIGNAL(clicked())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(updatePreview()));
     <span class="keyword">return</span> checkBox;
 }</pre>
<p>The private <tt>createCheckBox()</tt> function is called from <tt>createHintsGroupBox()</tt>.</p>
<p>We simply create a <a href="qcheckbox.html">QCheckBox</a> with the provided text, connect it to the private <tt>updatePreview()</tt> slot, and return a pointer to the checkbox.</p>
<pre class="cpp"> <span class="type"><a href="qradiobutton.html">QRadioButton</a></span> <span class="operator">*</span>ControllerWindow<span class="operator">::</span>createRadioButton(<span class="keyword">const</span> <span class="type"><a href="qstring.html">QString</a></span> <span class="operator">&amp;</span>text)
 {
     <span class="type"><a href="qradiobutton.html">QRadioButton</a></span> <span class="operator">*</span>button <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qradiobutton.html">QRadioButton</a></span>(text);
     connect(button<span class="operator">,</span> SIGNAL(clicked())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(updatePreview()));
     <span class="keyword">return</span> button;
 }</pre>
<p>In the private <tt>createRadioButton()</tt> function it is a <a href="qradiobutton.html">QRadioButton</a> we create with the provided text, and connect to the private <tt>updatePreview()</tt> slot. The function is called from <tt>createTypeGroupBox()</tt>, and returns a pointer to the button.</p>
<a name="previewwindow-class-definition"></a>
<h2>PreviewWindow Class Definition</h2>
<pre class="cpp"> <span class="keyword">class</span> PreviewWindow : <span class="keyword">public</span> <span class="type"><a href="qwidget.html">QWidget</a></span>
 {
     Q_OBJECT

 <span class="keyword">public</span>:
     PreviewWindow(<span class="type"><a href="qwidget.html">QWidget</a></span> <span class="operator">*</span>parent <span class="operator">=</span> <span class="number">0</span>);

     <span class="type">void</span> setWindowFlags(<span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>WindowFlags flags);

 <span class="keyword">private</span>:
     <span class="type"><a href="qtextedit.html">QTextEdit</a></span> <span class="operator">*</span>textEdit;
     <span class="type"><a href="qpushbutton.html">QPushButton</a></span> <span class="operator">*</span>closeButton;
 };</pre>
<p>The <tt>PreviewWindow</tt> class inherits <a href="qwidget.html">QWidget</a>. It is a custom widget that displays the names of its currently set window flags in a read-only text editor. It is also provided with a <a href="porting4.html#qpushbutton">QPushbutton</a> that closes the window.</p>
<p>We reimplement the constructor to create the <b>Close</b> button and the text editor, and the <a href="qwidget.html#windowFlags-prop">QWidget::setWindowFlags</a>() function to display the names of the window flags.</p>
<p class="centerAlign"><img src="images/windowflags_previewwindow.png" alt="Screenshot of the Preview Window" /></p><a name="previewwindow-class-implementation"></a>
<h2>PreviewWindow Class Implementation</h2>
<pre class="cpp"> PreviewWindow<span class="operator">::</span>PreviewWindow(<span class="type"><a href="qwidget.html">QWidget</a></span> <span class="operator">*</span>parent)
     : <span class="type"><a href="qwidget.html">QWidget</a></span>(parent)
 {
     textEdit <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qtextedit.html">QTextEdit</a></span>;
     textEdit<span class="operator">-</span><span class="operator">&gt;</span>setReadOnly(<span class="keyword">true</span>);
     textEdit<span class="operator">-</span><span class="operator">&gt;</span>setLineWrapMode(<span class="type"><a href="qtextedit.html">QTextEdit</a></span><span class="operator">::</span>NoWrap);

     closeButton <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qpushbutton.html">QPushButton</a></span>(tr(<span class="string">&quot;&amp;Close&quot;</span>));
     connect(closeButton<span class="operator">,</span> SIGNAL(clicked())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(close()));

     <span class="type"><a href="qvboxlayout.html">QVBoxLayout</a></span> <span class="operator">*</span>layout <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qvboxlayout.html">QVBoxLayout</a></span>;
     layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(textEdit);
     layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(closeButton);
     setLayout(layout);

     setWindowTitle(tr(<span class="string">&quot;Preview&quot;</span>));
 }</pre>
<p>In the constructor, we first create a <a href="qtextedit.html">QTextEdit</a> and make sure that it is read-only.</p>
<p>We also prohibit any line wrapping in the text editor using the <a href="qtextedit.html#lineWrapMode-prop">QTextEdit::setLineWrapMode</a>() function. The result is that a horizontal scrollbar appears when a window flag's name exceeds the width of the editor. This is a reasonable solution since we construct the displayed text with built-in line breaks. If no line breaks were guaranteed, using another <a href="qtextedit.html#LineWrapMode-enum">QTextEdit::LineWrapMode</a> would perhaps make more sense.</p>
<p>Then we create the <b>Close</b> button, and put both the widgets into a <a href="qvboxlayout.html">QVBoxLayout</a> before we set the window title.</p>
<pre class="cpp"> <span class="type">void</span> PreviewWindow<span class="operator">::</span>setWindowFlags(<span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>WindowFlags flags)
 {
     <span class="type"><a href="qwidget.html">QWidget</a></span><span class="operator">::</span>setWindowFlags(flags);

     <span class="type"><a href="qstring.html">QString</a></span> text;

     <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>WindowFlags type <span class="operator">=</span> (flags <span class="operator">&amp;</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>WindowType_Mask);
     <span class="keyword">if</span> (type <span class="operator">=</span><span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>Window) {
         text <span class="operator">=</span> <span class="string">&quot;Qt::Window&quot;</span>;
     } <span class="keyword">else</span> <span class="keyword">if</span> (type <span class="operator">=</span><span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>Dialog) {
         text <span class="operator">=</span> <span class="string">&quot;Qt::Dialog&quot;</span>;
     } <span class="keyword">else</span> <span class="keyword">if</span> (type <span class="operator">=</span><span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>Sheet) {
         text <span class="operator">=</span> <span class="string">&quot;Qt::Sheet&quot;</span>;
     } <span class="keyword">else</span> <span class="keyword">if</span> (type <span class="operator">=</span><span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>Drawer) {
         text <span class="operator">=</span> <span class="string">&quot;Qt::Drawer&quot;</span>;
     } <span class="keyword">else</span> <span class="keyword">if</span> (type <span class="operator">=</span><span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>Popup) {
         text <span class="operator">=</span> <span class="string">&quot;Qt::Popup&quot;</span>;
     } <span class="keyword">else</span> <span class="keyword">if</span> (type <span class="operator">=</span><span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>Tool) {
         text <span class="operator">=</span> <span class="string">&quot;Qt::Tool&quot;</span>;
     } <span class="keyword">else</span> <span class="keyword">if</span> (type <span class="operator">=</span><span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>ToolTip) {
         text <span class="operator">=</span> <span class="string">&quot;Qt::ToolTip&quot;</span>;
     } <span class="keyword">else</span> <span class="keyword">if</span> (type <span class="operator">=</span><span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>SplashScreen) {
         text <span class="operator">=</span> <span class="string">&quot;Qt::SplashScreen&quot;</span>;
     }

     <span class="keyword">if</span> (flags <span class="operator">&amp;</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>MSWindowsFixedSizeDialogHint)
         text <span class="operator">+</span><span class="operator">=</span> <span class="string">&quot;\n| Qt::MSWindowsFixedSizeDialogHint&quot;</span>;
     <span class="keyword">if</span> (flags <span class="operator">&amp;</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>X11BypassWindowManagerHint)
         text <span class="operator">+</span><span class="operator">=</span> <span class="string">&quot;\n| Qt::X11BypassWindowManagerHint&quot;</span>;
     <span class="keyword">if</span> (flags <span class="operator">&amp;</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>FramelessWindowHint)
         text <span class="operator">+</span><span class="operator">=</span> <span class="string">&quot;\n| Qt::FramelessWindowHint&quot;</span>;
     <span class="keyword">if</span> (flags <span class="operator">&amp;</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>WindowTitleHint)
         text <span class="operator">+</span><span class="operator">=</span> <span class="string">&quot;\n| Qt::WindowTitleHint&quot;</span>;
     <span class="keyword">if</span> (flags <span class="operator">&amp;</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>WindowSystemMenuHint)
         text <span class="operator">+</span><span class="operator">=</span> <span class="string">&quot;\n| Qt::WindowSystemMenuHint&quot;</span>;
     <span class="keyword">if</span> (flags <span class="operator">&amp;</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>WindowMinimizeButtonHint)
         text <span class="operator">+</span><span class="operator">=</span> <span class="string">&quot;\n| Qt::WindowMinimizeButtonHint&quot;</span>;
     <span class="keyword">if</span> (flags <span class="operator">&amp;</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>WindowMaximizeButtonHint)
         text <span class="operator">+</span><span class="operator">=</span> <span class="string">&quot;\n| Qt::WindowMaximizeButtonHint&quot;</span>;
     <span class="keyword">if</span> (flags <span class="operator">&amp;</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>WindowCloseButtonHint)
         text <span class="operator">+</span><span class="operator">=</span> <span class="string">&quot;\n| Qt::WindowCloseButtonHint&quot;</span>;
     <span class="keyword">if</span> (flags <span class="operator">&amp;</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>WindowContextHelpButtonHint)
         text <span class="operator">+</span><span class="operator">=</span> <span class="string">&quot;\n| Qt::WindowContextHelpButtonHint&quot;</span>;
     <span class="keyword">if</span> (flags <span class="operator">&amp;</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>WindowShadeButtonHint)
         text <span class="operator">+</span><span class="operator">=</span> <span class="string">&quot;\n| Qt::WindowShadeButtonHint&quot;</span>;
     <span class="keyword">if</span> (flags <span class="operator">&amp;</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>WindowStaysOnTopHint)
         text <span class="operator">+</span><span class="operator">=</span> <span class="string">&quot;\n| Qt::WindowStaysOnTopHint&quot;</span>;
     <span class="keyword">if</span> (flags <span class="operator">&amp;</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>CustomizeWindowHint)
         text <span class="operator">+</span><span class="operator">=</span> <span class="string">&quot;\n| Qt::CustomizeWindowHint&quot;</span>;

     textEdit<span class="operator">-</span><span class="operator">&gt;</span>setPlainText(text);
 }</pre>
<p>In our reimplementation of the <tt>setWindowFlags()</tt> function, we first set the widgets flags using the <a href="qwidget.html#windowFlags-prop">QWidget::setWindowFlags</a>() function. Then we run through the available window flags, creating a text that contains the names of the flags that matches the <tt>flags</tt> parameter. Finally, we display the text in the widgets text editor.</p>
</div>
<!-- @@@widgets/windowflags -->
  <div class="ft">
    <span></span>
  </div>
</div> 
<div class="footer">
    <p>
      <acronym title="Copyright">&copy;</acronym> 2012 Nokia Corporation and/or its
      subsidiaries. Documentation contributions included herein are the copyrights of
      their respective owners.</p>
    <br />
    <p>
      The documentation provided herein is licensed under the terms of the
      <a href="http://www.gnu.org/licenses/fdl.html">GNU Free Documentation
      License version 1.3</a> as published by the Free Software Foundation.</p>
    <p>
      Documentation sources may be obtained from <a href="http://www.qt-project.org">
      www.qt-project.org</a>.</p>
    <br />
    <p>
      Nokia, Qt and their respective logos are trademarks of Nokia Corporation 
      in Finland and/or other countries worldwide. All other trademarks are property
      of their respective owners. <a title="Privacy Policy"
      href="http://en.gitorious.org/privacy_policy/">Privacy Policy</a></p>
</div>
</body>
</html>