File: dialogs-sipdialog.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 (175 lines) | stat: -rw-r--r-- 14,645 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
<?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" />
<!-- sipdialog.qdoc -->
  <title>Qt 4.8: SIP Dialog 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>SIP Dialog 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="#dialog-class-definition">Dialog Class Definition</a></li>
<li class="level1"><a href="#dialog-class-implementation">Dialog Class Implementation</a></li>
<li class="level1"><a href="#the-function">The <tt>main()</tt> function</a></li>
</ul>
</div>
<h1 class="title">SIP Dialog Example</h1>
<span class="subtitle"></span>
<!-- $$$dialogs/sipdialog-description -->
<div class="descr"> <a name="details"></a>
<p>Files:</p>
<ul>
<li><a href="dialogs-sipdialog-dialog-cpp.html">dialogs/sipdialog/dialog.cpp</a></li>
<li><a href="dialogs-sipdialog-dialog-h.html">dialogs/sipdialog/dialog.h</a></li>
<li><a href="dialogs-sipdialog-main-cpp.html">dialogs/sipdialog/main.cpp</a></li>
<li><a href="dialogs-sipdialog-sipdialog-pro.html">dialogs/sipdialog/sipdialog.pro</a></li>
</ul>
<p>The SIP Dialog example shows how to create a dialog that is aware of the Windows Mobile SIP (Software Input Panel) and reacts to it.<table class="generic">
<tr valign="top" class="odd"><td ><img src="images/sipdialog-closed.png" alt="" /></td><td ><img src="images/sipdialog-opened.png" alt="" /></td></tr>
</table>
<p>Sometimes it is necessary for a dialog to take the SIP into account, as the SIP may hide important input widgets. The SIP Dialog Example shows how a <tt>Dialog</tt> object, <tt>dialog</tt>, can be resized accordingly if the SIP is opened, by embedding the contents of <tt>dialog</tt> in a <a href="qscrollarea.html">QScrollArea</a>.</p>
<a name="dialog-class-definition"></a>
<h2>Dialog Class Definition</h2>
<p>The <tt>Dialog</tt> class is a subclass of <a href="qdialog.html">QDialog</a> that implements a public slot, <tt>desktopResized()</tt>, and a public function, <tt>reactToSIP()</tt>. Also, it holds a private instance of <a href="qrect.html">QRect</a>, <tt>desktopGeometry</tt>.</p>
<pre class="cpp"> <span class="keyword">class</span> Dialog : <span class="keyword">public</span> <span class="type"><a href="qdialog.html">QDialog</a></span>
 {
     Q_OBJECT

 <span class="keyword">public</span>:
     Dialog();
     <span class="type">void</span> reactToSIP();

 <span class="keyword">private</span>:
     <span class="type"><a href="qrect.html">QRect</a></span> desktopGeometry;

 <span class="keyword">public</span> <span class="keyword">slots</span>:
     <span class="type">void</span> desktopResized(<span class="type">int</span> screen);
 };</pre>
<a name="dialog-class-implementation"></a>
<h2>Dialog Class Implementation</h2>
<p>In the constructor of <tt>Dialog</tt>, we start by obtaining the available geometry of the screen with <a href="qdesktopwidget.html#availableGeometry">availableGeometry()</a>. The parameter used is <tt>0</tt> to indicate that we require the primary screen.</p>
<pre class="cpp"> Dialog<span class="operator">::</span>Dialog()
 {
     desktopGeometry <span class="operator">=</span> <span class="type"><a href="qapplication.html">QApplication</a></span><span class="operator">::</span>desktop()<span class="operator">-</span><span class="operator">&gt;</span>availableGeometry(<span class="number">0</span>);

     setWindowTitle(tr(<span class="string">&quot;SIP Dialog Example&quot;</span>));
     <span class="type"><a href="qscrollarea.html">QScrollArea</a></span> <span class="operator">*</span>scrollArea <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qscrollarea.html">QScrollArea</a></span>(<span class="keyword">this</span>);
     <span class="type"><a href="qgroupbox.html">QGroupBox</a></span> <span class="operator">*</span>groupBox <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qgroupbox.html">QGroupBox</a></span>(scrollArea);
     groupBox<span class="operator">-</span><span class="operator">&gt;</span>setTitle(tr(<span class="string">&quot;SIP Dialog Example&quot;</span>));
     <span class="type"><a href="qgridlayout.html">QGridLayout</a></span> <span class="operator">*</span>gridLayout <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qgridlayout.html">QGridLayout</a></span>(groupBox);
     groupBox<span class="operator">-</span><span class="operator">&gt;</span>setLayout(gridLayout);</pre>
<p>We set the window's title to &quot;SIP Dialog Example&quot; and declare a <a href="qscrollarea.html">QScrollArea</a> object, <tt>scrollArea</tt>. Next we instantiate a <a href="qgroupbox.html">QGroupBox</a>, <tt>groupBox</tt>, with <tt>scrollArea</tt> as its parent. The title of <tt>groupBox</tt> is also set to &quot;SIP Dialog Example&quot;. A <a href="qgridlayout.html">QGridLayout</a> object, <tt>gridLayout</tt>, is then used as <tt>groupBox</tt>'s layout.</p>
<p>We create a <a href="qlineedit.html">QLineEdit</a>, a <a href="qlabel.html">QLabel</a> and a <a href="qpushbutton.html">QPushButton</a> and we set the <a href="qwidget.html#minimumWidth-prop">minimumWidth</a> property to 220 pixels, respectively.</p>
<pre class="cpp">     <span class="type"><a href="qlineedit.html">QLineEdit</a></span><span class="operator">*</span> lineEdit <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qlineedit.html">QLineEdit</a></span>(groupBox);
     lineEdit<span class="operator">-</span><span class="operator">&gt;</span>setText(tr(<span class="string">&quot;Open and close the SIP&quot;</span>));
     lineEdit<span class="operator">-</span><span class="operator">&gt;</span>setMinimumWidth(<span class="number">220</span>);

     <span class="type"><a href="qlabel.html">QLabel</a></span><span class="operator">*</span> label <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qlabel.html">QLabel</a></span>(groupBox);
     label<span class="operator">-</span><span class="operator">&gt;</span>setText(tr(<span class="string">&quot;This dialog resizes if the SIP is opened&quot;</span>));
     label<span class="operator">-</span><span class="operator">&gt;</span>setMinimumWidth(<span class="number">220</span>);

     <span class="type"><a href="qpushbutton.html">QPushButton</a></span><span class="operator">*</span> button <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qpushbutton.html">QPushButton</a></span>(groupBox);
     button<span class="operator">-</span><span class="operator">&gt;</span>setText(tr(<span class="string">&quot;Close Dialog&quot;</span>));
     button<span class="operator">-</span><span class="operator">&gt;</span>setMinimumWidth(<span class="number">220</span>);</pre>
<p>Also, all three widgets' text are set accordingly. The <a href="qgridlayout.html#verticalSpacing-prop">verticalSpacing</a> property of <tt>gridLayout</tt> is set based on the height of <tt>desktopGeometry</tt>. This is to adapt to the different form factors of Windows Mobile. Then, we add our widgets to the layout.</p>
<pre class="cpp">     <span class="keyword">if</span> (desktopGeometry<span class="operator">.</span>height() <span class="operator">&lt;</span> <span class="number">400</span>)
         gridLayout<span class="operator">-</span><span class="operator">&gt;</span>setVerticalSpacing(<span class="number">80</span>);
     <span class="keyword">else</span>
         gridLayout<span class="operator">-</span><span class="operator">&gt;</span>setVerticalSpacing(<span class="number">150</span>);

     gridLayout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(label);
     gridLayout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(lineEdit);
     gridLayout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(button);</pre>
<p>The <tt>scrollArea</tt>'s widget is set to <tt>groupBox</tt>. We use a <a href="qhboxlayout.html">QHBoxLayout</a> object, <tt>layout</tt>, to contain <tt>scrollArea</tt>. The <tt>Dialog</tt>'s layout is set to <tt>layout</tt> and the scroll area's horizontal scroll bar is turned off.</p>
<pre class="cpp">     scrollArea<span class="operator">-</span><span class="operator">&gt;</span>setWidget(groupBox);
     <span class="type"><a href="qhboxlayout.html">QHBoxLayout</a></span><span class="operator">*</span> layout <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qhboxlayout.html">QHBoxLayout</a></span>();
     layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(scrollArea);
     setLayout(layout);
     scrollArea<span class="operator">-</span><span class="operator">&gt;</span>setHorizontalScrollBarPolicy(<span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>ScrollBarAlwaysOff);</pre>
<p>The following signals are connected to their respective slots:</p>
<ul>
<li><tt>button</tt>'s <a href="qabstractbutton.html#pressed">pressed()</a> signal to <a href="qapplication.html">QApplication</a>'s <a href="qapplication.html#closeAllWindows">closeAllWindows()</a> slot,</li>
<li><a href="qdesktopwidget.html">QDesktopWidget</a>'s <a href="qdesktopwidget.html#workAreaResized">workAreaResized()</a> signal to <tt>dialog</tt>'s <tt>desktopResized()</tt> slot.</li>
</ul>
<pre class="cpp">     connect(button<span class="operator">,</span> SIGNAL(clicked())<span class="operator">,</span>
         qApp<span class="operator">,</span> SLOT(closeAllWindows()));
     connect(<span class="type"><a href="qapplication.html">QApplication</a></span><span class="operator">::</span>desktop()<span class="operator">,</span> SIGNAL(workAreaResized(<span class="type">int</span>))<span class="operator">,</span>
         <span class="keyword">this</span><span class="operator">,</span> SLOT(desktopResized(<span class="type">int</span>)));
 }</pre>
<p>The <tt>desktopResized()</tt> function accepts an integer, <i>screen</i>, corresponding to the screen's index. We only invoke <tt>reactToSIP()</tt> if <i>screen</i> is the primary screen (e.g&#x2e; index = 0).</p>
<pre class="cpp"> <span class="type">void</span> Dialog<span class="operator">::</span>desktopResized(<span class="type">int</span> screen)
 {
     <span class="keyword">if</span> (screen <span class="operator">!</span><span class="operator">=</span> <span class="number">0</span>)
         <span class="keyword">return</span>;
     reactToSIP();
 }</pre>
<p>The <tt>reactToSIP()</tt> function resizes <tt>dialog</tt> accordingly if the desktop's available geometry changed vertically, as this change signifies that the SIP may have been opened or closed.</p>
<pre class="cpp"> <span class="type">void</span> Dialog<span class="operator">::</span>reactToSIP()
 {
     <span class="type"><a href="qrect.html">QRect</a></span> availableGeometry <span class="operator">=</span> <span class="type"><a href="qapplication.html">QApplication</a></span><span class="operator">::</span>desktop()<span class="operator">-</span><span class="operator">&gt;</span>availableGeometry(<span class="number">0</span>);

     <span class="keyword">if</span> (desktopGeometry <span class="operator">!</span><span class="operator">=</span> availableGeometry) {
         <span class="keyword">if</span> (windowState() <span class="operator">|</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>WindowMaximized)
             setWindowState(windowState() <span class="operator">&amp;</span> <span class="operator">~</span><span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>WindowMaximized);

         setGeometry(availableGeometry);
     }

     desktopGeometry <span class="operator">=</span> availableGeometry;
 }</pre>
<p>If the height has decreased, we unset the maximized window state. Otherwise, we set the maximized window state. Lastly, we update <tt>desktopGeometry</tt> to the desktop's available geometry.</p>
<a name="the-function"></a>
<h2>The <tt>main()</tt> function</h2>
<p>The <tt>main()</tt> function for the SIP Dialog example instantiates <tt>Dialog</tt> and invokes its <a href="qdialog.html#exec">exec()</a> function.</p>
<pre class="cpp"> <span class="type">int</span> main(<span class="type">int</span> argc<span class="operator">,</span> <span class="type">char</span> <span class="operator">*</span>argv<span class="operator">[</span><span class="operator">]</span>)
 {
     <span class="type"><a href="qapplication.html">QApplication</a></span> app(argc<span class="operator">,</span> argv);
     Dialog dialog;
     <span class="keyword">return</span> dialog<span class="operator">.</span>exec();
 }</pre>
<p><b>Note:</b> Although this example uses a dialog, the techniques used here apply to all top-level widgets respectively.</p>
</div>
<!-- @@@dialogs/sipdialog -->
  <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>