File: qsignalspy.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 (138 lines) | stat: -rw-r--r-- 11,044 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
<?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" />
<!-- qsignalspy.qdoc -->
  <title>Qt 4.8: QSignalSpy Class Reference</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="modules.html">Modules</a></li>
<li><a href="qttest.html">QtTest</a></li>
<li>QSignalSpy</li>
    </ul>
  </div>
</div>
<div class="content mainContent">
<div class="toc">
<h3><a name="toc">Contents</a></h3>
<ul>
<li class="level1"><a href="#public-functions">Public Functions</a></li>
<li class="level1"><a href="#details">Detailed Description</a></li>
</ul>
</div>
<h1 class="title">QSignalSpy Class Reference</h1>
<!-- $$$QSignalSpy-brief -->
<p>The QSignalSpy class enables introspection of signal emission. <a href="#details">More...</a></p>
<!-- @@@QSignalSpy -->
<pre class="cpp"> <span class="preprocessor">#include &lt;QSignalSpy&gt;</span></pre><p><b>Inherits: </b><a href="qobject.html">QObject</a> and <a href="qlist.html">QList&lt;QList&lt;QVariant&gt; &gt;</a>.</p>
<ul>
<li><a href="qsignalspy-members.html">List of all members, including inherited members</a></li>
</ul>
<a name="public-functions"></a>
<h2>Public Functions</h2>
<table class="alignedsummary">
<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="qsignalspy.html#QSignalSpy">QSignalSpy</a></b> ( QObject * <i>object</i>, const char * <i>signal</i> )</td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> bool </td><td class="memItemRight bottomAlign"><b><a href="qsignalspy.html#isValid">isValid</a></b> () const</td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> QByteArray </td><td class="memItemRight bottomAlign"><b><a href="qsignalspy.html#signal">signal</a></b> () const</td></tr>
</table>
<ul>
<li class="fn">29 public functions inherited from <a href="qobject.html#public-functions">QObject</a></li>
<li class="fn">67 public functions inherited from <a href="qlist.html#public-functions">QList</a></li>
</ul>
<h3>Additional Inherited Members</h3>
<ul>
<li class="fn">1 property inherited from <a href="qobject.html#properties">QObject</a></li>
<li class="fn">1 public slot inherited from <a href="qobject.html#public-slots">QObject</a></li>
<li class="fn">1 signal inherited from <a href="qobject.html#signals">QObject</a></li>
<li class="fn">7 static public members inherited from <a href="qobject.html#static-public-members">QObject</a></li>
<li class="fn">3 static public members inherited from <a href="qlist.html#static-public-members">QList</a></li>
<li class="fn">8 protected functions inherited from <a href="qobject.html#protected-functions">QObject</a></li>
</ul>
<a name="details"></a>
<!-- $$$QSignalSpy-description -->
<div class="descr">
<h2>Detailed Description</h2>
<p>The QSignalSpy class enables introspection of signal emission.</p>
<p>QSignalSpy can connect to any signal of any object and records its emission. QSignalSpy itself is a list of <a href="qvariant.html">QVariant</a> lists. Each emission of the signal will append one item to the list, containing the arguments of the signal.</p>
<p>The following example records all signal emissions for the <tt>clicked()</tt> signal of a <a href="qcheckbox.html">QCheckBox</a>:</p>
<pre class="cpp"> <span class="type"><a href="qcheckbox.html">QCheckBox</a></span> <span class="operator">*</span>box <span class="operator">=</span> <span class="operator">.</span><span class="operator">.</span><span class="operator">.</span>;
 <span class="type">QSignalSpy</span> spy(box<span class="operator">,</span> SIGNAL(clicked(<span class="type">bool</span>)));

 <span class="comment">// do something that triggers the signal</span>
 box<span class="operator">-</span><span class="operator">&gt;</span>animateClick();

 <a href="qtest.html#QCOMPARE">QCOMPARE</a>(spy<span class="operator">.</span>count()<span class="operator">,</span> <span class="number">1</span>); <span class="comment">// make sure the signal was emitted exactly one time</span>
 <span class="type"><a href="qlist.html">QList</a></span><span class="operator">&lt;</span><span class="type"><a href="qvariant.html">QVariant</a></span><span class="operator">&gt;</span> arguments <span class="operator">=</span> spy<span class="operator">.</span><a href="qlist.html#takeFirst">takeFirst</a>(); <span class="comment">// take the first signal</span>

 <a href="qtest.html#QVERIFY">QVERIFY</a>(arguments<span class="operator">.</span>at(<span class="number">0</span>)<span class="operator">.</span>toBool() <span class="operator">=</span><span class="operator">=</span> <span class="keyword">true</span>); <span class="comment">// verify the first argument</span></pre>
<p><tt>spy.takeFirst()</tt> returns the arguments for the first emitted signal, as a list of <a href="qvariant.html">QVariant</a> objects. The <tt>clicked()</tt> signal has a single bool argument, which is stored as the first entry in the list of arguments.</p>
<p>The example below catches a signal from a custom object:</p>
<pre class="cpp"> <span class="type">QSignalSpy</span> spy(myCustomObject<span class="operator">,</span> SIGNAL(mySignal(<span class="type">int</span><span class="operator">,</span> <span class="type"><a href="qstring.html">QString</a></span><span class="operator">,</span> <span class="type">double</span>)));

 myCustomObject<span class="operator">-</span><span class="operator">&gt;</span>doSomething(); <span class="comment">// trigger emission of the signal</span>

 <span class="type"><a href="qlist.html">QList</a></span><span class="operator">&lt;</span><span class="type"><a href="qvariant.html">QVariant</a></span><span class="operator">&gt;</span> arguments <span class="operator">=</span> spy<span class="operator">.</span><a href="qlist.html#takeFirst">takeFirst</a>();
 <a href="qtest.html#QVERIFY">QVERIFY</a>(arguments<span class="operator">.</span>at(<span class="number">0</span>)<span class="operator">.</span>type() <span class="operator">=</span><span class="operator">=</span> <span class="type"><a href="qvariant.html">QVariant</a></span><span class="operator">::</span>Int);
 <a href="qtest.html#QVERIFY">QVERIFY</a>(arguments<span class="operator">.</span>at(<span class="number">1</span>)<span class="operator">.</span>type() <span class="operator">=</span><span class="operator">=</span> <span class="type"><a href="qvariant.html">QVariant</a></span><span class="operator">::</span><span class="type"><a href="qstring.html">QString</a></span>);
 <a href="qtest.html#QVERIFY">QVERIFY</a>(arguments<span class="operator">.</span>at(<span class="number">2</span>)<span class="operator">.</span>type() <span class="operator">=</span><span class="operator">=</span> <span class="type"><a href="qvariant.html">QVariant</a></span><span class="operator">::</span><span class="type">double</span>);</pre>
<p><b>Note:</b> Non-standard data types need to be registered, using the <a href="qmetatype.html#qRegisterMetaType">qRegisterMetaType</a>() function, before you can create a QSignalSpy. For example:</p>
<pre class="cpp"> <a href="qmetatype.html#qRegisterMetaType">qRegisterMetaType</a><span class="operator">&lt;</span><span class="type"><a href="qmodelindex.html">QModelIndex</a></span><span class="operator">&gt;</span>(<span class="string">&quot;QModelIndex&quot;</span>);
 <span class="type">QSignalSpy</span> spy(<span class="operator">&amp;</span>model<span class="operator">,</span> SIGNAL(whatever(<span class="type"><a href="qmodelindex.html">QModelIndex</a></span>)));</pre>
<p>To retrieve the <tt>QModelIndex</tt>, you can use qvariant_cast:</p>
<pre class="cpp"> <span class="comment">// get the first argument from the first received signal:</span>
 <span class="type"><a href="qmodelindex.html">QModelIndex</a></span> result <span class="operator">=</span> qvariant_cast<span class="operator">&lt;</span><span class="type"><a href="qmodelindex.html">QModelIndex</a></span><span class="operator">&gt;</span>(spy<span class="operator">.</span>at(<span class="number">0</span>)<span class="operator">.</span>at(<span class="number">0</span>));</pre>
</div>
<!-- @@@QSignalSpy -->
<div class="func">
<h2>Member Function Documentation</h2>
<!-- $$$QSignalSpy[overload1]$$$QSignalSpyQObject*constchar* -->
<h3 class="fn"><a name="QSignalSpy"></a>QSignalSpy::<span class="name">QSignalSpy</span> ( <span class="type"><a href="qobject.html">QObject</a></span> * <i>object</i>, const <span class="type">char</span> * <i>signal</i> )</h3>
<p>Constructs a new <a href="qsignalspy.html">QSignalSpy</a> that listens for emissions of the <i>signal</i> from the <a href="qobject.html">QObject</a> <i>object</i>. Neither <i>signal</i> nor <i>object</i> can be null.</p>
<p>Example:</p>
<pre class="cpp"> <span class="type"><a href="qsignalspy.html">QSignalSpy</a></span> spy(myPushButton<span class="operator">,</span> SIGNAL(clicked(<span class="type">bool</span>)));</pre>
<!-- @@@QSignalSpy -->
<!-- $$$isValid[overload1]$$$isValid -->
<h3 class="fn"><a name="isValid"></a><span class="type">bool</span> QSignalSpy::<span class="name">isValid</span> () const</h3>
<p>Returns true if the signal spy listens to a valid signal, otherwise false.</p>
<!-- @@@isValid -->
<!-- $$$signal[overload1]$$$signal -->
<h3 class="fn"><a name="signal"></a><span class="type"><a href="qbytearray.html">QByteArray</a></span> QSignalSpy::<span class="name">signal</span> () const</h3>
<p>Returns the normalized signal the spy is currently listening to.</p>
<!-- @@@signal -->
</div>
  <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>