File: qdesignercontainerextension.html

package info (click to toggle)
python-qt4 4.12.1%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 40,300 kB
  • ctags: 6,185
  • sloc: python: 125,988; cpp: 13,291; xml: 292; makefile: 246; php: 27; sh: 2
file content (162 lines) | stat: -rw-r--r-- 16,005 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
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html><head><title>QDesignerContainerExtension Class Reference</title><style>h3.fn,span.fn { margin-left: 1cm; text-indent: -1cm }
a:link { color: #004faf; text-decoration: none }
a:visited { color: #672967; text-decoration: none }
td.postheader { font-family: sans-serif }
tr.address { font-family: sans-serif }
body { background: #ffffff; color: black; }
</style></head><body><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr /><td align="left" valign="top" width="32"><img align="left" border="0" height="32" src="images/rb-logo.png" width="32" /></td><td width="1">&#160;&#160;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a>&#160;&#183; <a href="classes.html"><font color="#004faf">All Classes</font></a>&#160;&#183; <a href="modules.html"><font color="#004faf">Modules</font></a></td></table><h1 align="center">QDesignerContainerExtension Class Reference<br /><sup><sup>[<a href="qtdesigner.html">QtDesigner</a> module]</sup></sup></h1><p>The QDesignerContainerExtension class allows you to add pages to
a custom multi-page container in Qt Designer's workspace. <a href="#details">More...</a></p>

<p>Inherited by <a href="qpydesignercontainerextension.html">QPyDesignerContainerExtension</a>.</p><h3>Methods</h3><ul><li><div class="fn" /><b><a href="qdesignercontainerextension.html#QDesignerContainerExtension">__init__</a></b> (<i>self</i>)</li><li><div class="fn" /><b><a href="qdesignercontainerextension.html#QDesignerContainerExtension-2">__init__</a></b> (<i>self</i>, QDesignerContainerExtension)</li><li><div class="fn" /><b><a href="qdesignercontainerextension.html#addWidget">addWidget</a></b> (<i>self</i>, QWidget&#160;<i>widget</i>)</li><li><div class="fn" />int <b><a href="qdesignercontainerextension.html#count">count</a></b> (<i>self</i>)</li><li><div class="fn" />int <b><a href="qdesignercontainerextension.html#currentIndex">currentIndex</a></b> (<i>self</i>)</li><li><div class="fn" /><b><a href="qdesignercontainerextension.html#insertWidget">insertWidget</a></b> (<i>self</i>, int&#160;<i>index</i>, QWidget&#160;<i>widget</i>)</li><li><div class="fn" /><b><a href="qdesignercontainerextension.html#remove">remove</a></b> (<i>self</i>, int&#160;<i>index</i>)</li><li><div class="fn" /><b><a href="qdesignercontainerextension.html#setCurrentIndex">setCurrentIndex</a></b> (<i>self</i>, int&#160;<i>index</i>)</li><li><div class="fn" />QWidget <b><a href="qdesignercontainerextension.html#widget">widget</a></b> (<i>self</i>, int&#160;<i>index</i>)</li></ul><h3>Special Methods</h3><ul><li><div class="fn" />int <b><a href="qdesignercontainerextension.html#__len__">__len__</a></b> (<i>self</i>)</li></ul><a name="details" /><hr /><h2>Detailed Description</h2><p>The QDesignerContainerExtension class allows you to add pages to
a custom multi-page container in Qt Designer's workspace.</p>
<p>QDesignerContainerExtension provide an interface for creating
custom container extensions. A container extension consists of a
collection of functions that <i>Qt Designer</i> needs to manage a
multi-page container plugin, and a list of the container's
pages.</p>
<p class="centerAlign"><img alt="" src="images/containerextension-example.png" /></p>
<p><b>Warning:</b> This is <i>not</i> an extension for container
plugins in general, only custom <i>multi-page</i> containers.</p>
<p>To create a container extension, your extension class must
inherit from both <a href="qobject.html">QObject</a> and
QDesignerContainerExtension. For example:</p>
<pre class="cpp">
 <span class="keyword">class</span> MyContainerExtension : <span class="keyword">public</span> <span class="type"><a href="qobject.html">QObject</a></span><span class="operator">,</span>
        <span class="keyword">public</span> <span class="type">QDesignerContainerExtension</span>
 {
     Q_OBJECT
     Q_INTERFACES(<span class="type">QDesignerContainerExtension</span>)

 <span class="keyword">public</span>:
     MyContainerExtension(MyCustomWidget <span class="operator">*</span>widget<span class="operator">,</span>
                          <span class="type"><a href="qobject.html">QObject</a></span> <span class="operator">*</span>parent <span class="operator">=</span> <span class="number">0</span>);
     <span class="type">int</span> count() <span class="keyword">const</span>;
     <span class="type"><a href="qwidget.html">QWidget</a></span> <span class="operator">*</span>widget(<span class="type">int</span> index) <span class="keyword">const</span>;
     <span class="type">int</span> currentIndex() <span class="keyword">const</span>;
     <span class="type">void</span> setCurrentIndex(<span class="type">int</span> index);
     <span class="type">void</span> addWidget(<span class="type"><a href="qwidget.html">QWidget</a></span> <span class="operator">*</span>widget);
     <span class="type">void</span> insertWidget(<span class="type">int</span> index<span class="operator">,</span> <span class="type"><a href="qwidget.html">QWidget</a></span> <span class="operator">*</span>widget);
     <span class="type">void</span> remove(<span class="type">int</span> index);

 <span class="keyword">private</span>:
     MyCustomWidget <span class="operator">*</span>myWidget;
 };
</pre>
<p>Since we are implementing an interface, we must ensure that it's
made known to the meta object system using the <a href="qobject.html#Q_INTERFACES">Q_INTERFACES</a>() macro. This enables
<i>Qt Designer</i> to use the <a href="qobject.html#qobject_cast">qobject_cast</a>() function to query
for supported interfaces using nothing but a <a href="qobject.html">QObject</a> pointer.</p>
<p>You must reimplement several functions to enable <i>Qt
Designer</i> to manage a custom multi-page container widget: <i>Qt
Designer</i> uses <a href="qdesignercontainerextension.html#count">count</a>() to keep track
of the number pages in your container, <a href="qdesignercontainerextension.html#widget">widget</a>() to return
the page at a given index in the list of the container's pages, and
<a href="qdesignercontainerextension.html#currentIndex">currentIndex</a>()
to return the list index of the selected page. <i>Qt Designer</i>
uses the <a href="qdesignercontainerextension.html#addWidget">addWidget</a>()
function to add a given page to the container, expecting it to be
appended to the list of pages, while it expects the <a href="qdesignercontainerextension.html#insertWidget">insertWidget</a>()
function to add a given page to the container by inserting it at a
given index.</p>
<p>In <i>Qt Designer</i> the extensions are not created until they
are required. For that reason you must also create a <a href="qextensionfactory.html">QExtensionFactory</a>, i.e a class that is
able to make an instance of your extension, and register it using
<i>Qt Designer</i>'s <a href="qextensionmanager.html">extension
manager</a>.</p>
<p>When a container extension is required, <i>Qt Designer</i>'s
<a href="qextensionmanager.html">extension manager</a> will run
through all its registered factories calling <a href="qextensionfactory.html#createExtension">QExtensionFactory.createExtension</a>()
for each until the first one that is able to create a container
extension, is found. This factory will then create the extension
for the plugin.</p>
<p>There are four available types of extensions in <i>Qt
Designer</i>: QDesignerContainerExtension , <a href="qdesignermembersheetextension.html">QDesignerMemberSheetExtension</a>,
<a href="qdesignerpropertysheetextension.html">QDesignerPropertySheetExtension</a>
and <a href="qdesignertaskmenuextension.html">QDesignerTaskMenuExtension</a>.
<i>Qt Designer</i>'s behavior is the same whether the requested
extension is associated with a multi page container, a member
sheet, a property sheet or a task menu.</p>
<p>The <a href="qextensionfactory.html">QExtensionFactory</a> class
provides a standard extension factory, and can also be used as an
interface for custom extension factories. You can either create a
new <a href="qextensionfactory.html">QExtensionFactory</a> and
reimplement the <a href="qextensionfactory.html#createExtension">QExtensionFactory.createExtension</a>()
function. For example:</p>
<pre class="cpp">
 <span class="type"><a href="qobject.html">QObject</a></span> <span class="operator">*</span>ANewExtensionFactory<span class="operator">.</span>createExtension(<span class="type"><a href="qobject.html">QObject</a></span> <span class="operator">*</span>object<span class="operator">,</span>
         <span class="keyword">const</span> <span class="type"><a href="qstring.html">QString</a></span> <span class="operator">&amp;</span>iid<span class="operator">,</span> <span class="type"><a href="qobject.html">QObject</a></span> <span class="operator">*</span>parent) <span class="keyword">const</span>
 {
     <span class="keyword">if</span> (iid <span class="operator">!</span><span class="operator">=</span> Q_TYPEID(<span class="type">QDesignerContainerExtension</span>))
         <span class="keyword">return</span> <span class="number">0</span>;

     <span class="keyword">if</span> (MyCustomWidget <span class="operator">*</span>widget <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span>MyCustomWidget<span class="operator">*</span><span class="operator">&gt;</span>
            (object))
         <span class="keyword">return</span> <span class="keyword">new</span> MyContainerExtension(widget<span class="operator">,</span> parent);

     <span class="keyword">return</span> <span class="number">0</span>;
 }
</pre>
<p>Or you can use an existing factory, expanding the <a href="qextensionfactory.html#createExtension">QExtensionFactory.createExtension</a>()
function to make the factory able to create a container extension
as well. For example:</p>
<pre class="cpp">
 <span class="type"><a href="qobject.html">QObject</a></span> <span class="operator">*</span>AGeneralExtensionFactory<span class="operator">.</span>createExtension(<span class="type"><a href="qobject.html">QObject</a></span> <span class="operator">*</span>object<span class="operator">,</span>
         <span class="keyword">const</span> <span class="type"><a href="qstring.html">QString</a></span> <span class="operator">&amp;</span>iid<span class="operator">,</span> <span class="type"><a href="qobject.html">QObject</a></span> <span class="operator">*</span>parent) <span class="keyword">const</span>
 {
     MyCustomWidget <span class="operator">*</span>widget <span class="operator">=</span> qobject_cast<span class="operator">&lt;</span>MyCustomWidget<span class="operator">*</span><span class="operator">&gt;</span>(object);

     <span class="keyword">if</span> (widget <span class="operator">&amp;</span><span class="operator">&amp;</span> (iid <span class="operator">=</span><span class="operator">=</span> Q_TYPEID(<span class="type"><a href="qdesignertaskmenuextension.html">QDesignerTaskMenuExtension</a></span>))) {
         <span class="keyword">return</span> <span class="keyword">new</span> MyTaskMenuExtension(widget<span class="operator">,</span> parent);

     } <span class="keyword">else</span> <span class="keyword">if</span> (widget <span class="operator">&amp;</span><span class="operator">&amp;</span> (iid <span class="operator">=</span><span class="operator">=</span> Q_TYPEID(<span class="type">QDesignerContainerExtension</span>))) {
         <span class="keyword">return</span> <span class="keyword">new</span> MyContainerExtension(widget<span class="operator">,</span> parent);

     } <span class="keyword">else</span> {
         <span class="keyword">return</span> <span class="number">0</span>;
     }
 }
</pre>
<p>For a complete example using the QDesignerContainerExtension
class, see the <a href="designer-containerextension.html">Container
Extension example</a>. The example shows how to create a custom
multi-page plugin for <i>Qt Designer</i>.</p>
<hr /><h2>Method Documentation</h2><h3 class="fn"><a name="QDesignerContainerExtension" />QDesignerContainerExtension.__init__ (<i>self</i>)</h3><h3 class="fn"><a name="QDesignerContainerExtension-2" />QDesignerContainerExtension.__init__ (<i>self</i>, <a href="qdesignercontainerextension.html">QDesignerContainerExtension</a>)</h3><h3 class="fn"><a name="addWidget" />QDesignerContainerExtension.addWidget (<i>self</i>, <a href="qwidget.html">QWidget</a>&#160;<i>widget</i>)</h3><p>This method is abstract and should be reimplemented in any sub-class.</p><p>Adds the given <i>page</i> to the container by appending it to
the extension's list of pages.</p>
<p><b>See also</b> <a href="qdesignercontainerextension.html#insertWidget">insertWidget</a>(),
<a href="qdesignercontainerextension.html#remove">remove</a>(), and
<a href="qdesignercontainerextension.html#widget">widget</a>().</p>


<h3 class="fn"><a name="count" />int QDesignerContainerExtension.count (<i>self</i>)</h3><p>This method is abstract and should be reimplemented in any sub-class.</p><p>Returns the number of pages in the container.</p>


<h3 class="fn"><a name="currentIndex" />int QDesignerContainerExtension.currentIndex (<i>self</i>)</h3><p>This method is abstract and should be reimplemented in any sub-class.</p><p>Returns the index of the currently selected page in the
container.</p>
<p><b>See also</b> <a href="qdesignercontainerextension.html#setCurrentIndex">setCurrentIndex</a>().</p>


<h3 class="fn"><a name="insertWidget" />QDesignerContainerExtension.insertWidget (<i>self</i>, int&#160;<i>index</i>, <a href="qwidget.html">QWidget</a>&#160;<i>widget</i>)</h3><p>This method is abstract and should be reimplemented in any sub-class.</p><p>Adds the given <i>page</i> to the container by inserting it at
the given <i>index</i> in the extension's list of pages.</p>
<p><b>See also</b> <a href="qdesignercontainerextension.html#addWidget">addWidget</a>(),
<a href="qdesignercontainerextension.html#remove">remove</a>(), and
<a href="qdesignercontainerextension.html#widget">widget</a>().</p>


<h3 class="fn"><a name="remove" />QDesignerContainerExtension.remove (<i>self</i>, int&#160;<i>index</i>)</h3><p>This method is abstract and should be reimplemented in any sub-class.</p><p>Removes the page at the given <i>index</i> from the extension's
list of pages.</p>
<p><b>See also</b> <a href="qdesignercontainerextension.html#addWidget">addWidget</a>() and
<a href="qdesignercontainerextension.html#insertWidget">insertWidget</a>().</p>


<h3 class="fn"><a name="setCurrentIndex" />QDesignerContainerExtension.setCurrentIndex (<i>self</i>, int&#160;<i>index</i>)</h3><p>This method is abstract and should be reimplemented in any sub-class.</p><p>Sets the currently selected page in the container to be the page
at the given <i>index</i> in the extension's list of pages.</p>
<p><b>See also</b> <a href="qdesignercontainerextension.html#currentIndex">currentIndex</a>().</p>


<h3 class="fn"><a name="widget" /><a href="qwidget.html">QWidget</a> QDesignerContainerExtension.widget (<i>self</i>, int&#160;<i>index</i>)</h3><p>This method is abstract and should be reimplemented in any sub-class.</p><p>Returns the page at the given <i>index</i> in the extension's
list of pages.</p>
<p><b>See also</b> <a href="qdesignercontainerextension.html#addWidget">addWidget</a>() and
<a href="qdesignercontainerextension.html#insertWidget">insertWidget</a>().</p>
<h3 class="fn"><a name="__len__" />int QDesignerContainerExtension.__len__ (<i>self</i>)</h3><address><hr /><div align="center"><table border="0" cellspacing="0" width="100%"><tr class="address"><td align="left" width="25%">PyQt&#160;4.12.1 for X11</td><td align="center" width="50%">Copyright &#169; <a href="http://www.riverbankcomputing.com">Riverbank&#160;Computing&#160;Ltd</a> and <a href="http://www.qt.io">The Qt Company</a> 2015</td><td align="right" width="25%">Qt&#160;4.8.7</td></tr></table></div></address></body></html>