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">&</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">&</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">"&Quit"</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">></span>addStretch();
bottomLayout<span class="operator">-</span><span class="operator">></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">></span>addWidget(typeGroupBox);
mainLayout<span class="operator">-</span><span class="operator">></span>addWidget(hintsGroupBox);
mainLayout<span class="operator">-</span><span class="operator">></span>addLayout(bottomLayout);
setLayout(mainLayout);
setWindowTitle(tr(<span class="string">"Window Flags"</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">></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">></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">></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">></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">></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">></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">></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">></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">></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">></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">></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">></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">></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">></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">></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">></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">></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">></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">></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">></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">></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">></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">></span>pos();
<span class="keyword">if</span> (pos<span class="operator">.</span>x() <span class="operator"><</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"><</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">></span>move(pos);
previewWindow<span class="operator">-</span><span class="operator">></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">"Type"</span>));
windowRadioButton <span class="operator">=</span> createRadioButton(tr(<span class="string">"Window"</span>));
dialogRadioButton <span class="operator">=</span> createRadioButton(tr(<span class="string">"Dialog"</span>));
sheetRadioButton <span class="operator">=</span> createRadioButton(tr(<span class="string">"Sheet"</span>));
drawerRadioButton <span class="operator">=</span> createRadioButton(tr(<span class="string">"Drawer"</span>));
popupRadioButton <span class="operator">=</span> createRadioButton(tr(<span class="string">"Popup"</span>));
toolRadioButton <span class="operator">=</span> createRadioButton(tr(<span class="string">"Tool"</span>));
toolTipRadioButton <span class="operator">=</span> createRadioButton(tr(<span class="string">"Tooltip"</span>));
splashScreenRadioButton <span class="operator">=</span> createRadioButton(tr(<span class="string">"Splash screen"</span>));
windowRadioButton<span class="operator">-</span><span class="operator">></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">></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">></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">></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">></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">></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">></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">></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">></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">></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">"Hints"</span>));
msWindowsFixedSizeDialogCheckBox <span class="operator">=</span>
createCheckBox(tr(<span class="string">"MS Windows fixed size dialog"</span>));
x11BypassWindowManagerCheckBox <span class="operator">=</span>
createCheckBox(tr(<span class="string">"X11 bypass window manager"</span>));
framelessWindowCheckBox <span class="operator">=</span> createCheckBox(tr(<span class="string">"Frameless window"</span>));
windowTitleCheckBox <span class="operator">=</span> createCheckBox(tr(<span class="string">"Window title"</span>));
windowSystemMenuCheckBox <span class="operator">=</span> createCheckBox(tr(<span class="string">"Window system menu"</span>));
windowMinimizeButtonCheckBox <span class="operator">=</span> createCheckBox(tr(<span class="string">"Window minimize button"</span>));
windowMaximizeButtonCheckBox <span class="operator">=</span> createCheckBox(tr(<span class="string">"Window maximize button"</span>));
windowCloseButtonCheckBox <span class="operator">=</span> createCheckBox(tr(<span class="string">"Window close button"</span>));
windowContextHelpButtonCheckBox <span class="operator">=</span>
createCheckBox(tr(<span class="string">"Window context help button"</span>));
windowShadeButtonCheckBox <span class="operator">=</span> createCheckBox(tr(<span class="string">"Window shade button"</span>));
windowStaysOnTopCheckBox <span class="operator">=</span> createCheckBox(tr(<span class="string">"Window stays on top"</span>));
windowStaysOnBottomCheckBox <span class="operator">=</span> createCheckBox(tr(<span class="string">"Window stays on bottom"</span>));
customizeWindowHintCheckBox<span class="operator">=</span> createCheckBox(tr(<span class="string">"Customize window"</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">></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">></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">></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">></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">></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">></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">></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">></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">></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">></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">></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">></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">></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">></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">&</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">&</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">></span>setReadOnly(<span class="keyword">true</span>);
textEdit<span class="operator">-</span><span class="operator">></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">"&Close"</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">></span>addWidget(textEdit);
layout<span class="operator">-</span><span class="operator">></span>addWidget(closeButton);
setLayout(layout);
setWindowTitle(tr(<span class="string">"Preview"</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">&</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">"Qt::Window"</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">"Qt::Dialog"</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">"Qt::Sheet"</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">"Qt::Drawer"</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">"Qt::Popup"</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">"Qt::Tool"</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">"Qt::ToolTip"</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">"Qt::SplashScreen"</span>;
}
<span class="keyword">if</span> (flags <span class="operator">&</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">"\n| Qt::MSWindowsFixedSizeDialogHint"</span>;
<span class="keyword">if</span> (flags <span class="operator">&</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">"\n| Qt::X11BypassWindowManagerHint"</span>;
<span class="keyword">if</span> (flags <span class="operator">&</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">"\n| Qt::FramelessWindowHint"</span>;
<span class="keyword">if</span> (flags <span class="operator">&</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">"\n| Qt::WindowTitleHint"</span>;
<span class="keyword">if</span> (flags <span class="operator">&</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">"\n| Qt::WindowSystemMenuHint"</span>;
<span class="keyword">if</span> (flags <span class="operator">&</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">"\n| Qt::WindowMinimizeButtonHint"</span>;
<span class="keyword">if</span> (flags <span class="operator">&</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">"\n| Qt::WindowMaximizeButtonHint"</span>;
<span class="keyword">if</span> (flags <span class="operator">&</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">"\n| Qt::WindowCloseButtonHint"</span>;
<span class="keyword">if</span> (flags <span class="operator">&</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">"\n| Qt::WindowContextHelpButtonHint"</span>;
<span class="keyword">if</span> (flags <span class="operator">&</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">"\n| Qt::WindowShadeButtonHint"</span>;
<span class="keyword">if</span> (flags <span class="operator">&</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">"\n| Qt::WindowStaysOnTopHint"</span>;
<span class="keyword">if</span> (flags <span class="operator">&</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">"\n| Qt::CustomizeWindowHint"</span>;
textEdit<span class="operator">-</span><span class="operator">></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">©</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>
|