<div dir="ltr"><div><font>Thank you Matthias for your perseverance. It's very helpful and encouraging for beginners.<br></font></div><font>I have already tried composerRemoved but when loading the plugin, QGIS complains :</font><br><span style="color:rgb(255,0,0)"><br>Impossible de charger l'extension MapsPrinter provoque une erreur lors de l'appel de sa méthode initGui()</span><br>
<pre style="margin:12px 0px;text-indent:0px"><span style="font-family:"Courier New,courier"">Traceback (most recent call last):<br> File "C:/OSGeo4W/apps/qgis/./python\qgis\utils.py", line 228, in startPlugin<br> plugins[packageName].initGui()<br> File "C:/Users/harrissou/.qgis2/python/plugins\MapsPrinter\maps_printer.py", line 129, in initGui<br> self.iface.composerRemoved.connect(self.refreshList)<br>AttributeError: 'QgisInterface' object has no attribute 'composerRemoved'<br><br></span></pre><pre style="margin:12px 0px;text-indent:0px"><font size="4"><span style="font-family:"Courier New,courier"">This happens with all the versions of QGIS I use :<br>- osgeo4w 32bits (windows 8), </span></font><font size="4"><span style="font-family:"Courier New,courier""><font size="4"><span style="font-family:"Courier New,courier"">osgeo4w </span></font>64bits (windows 7): either with QGIS 2.8, 2.8rel-dev and 2.9<br>- and Mac OS 10.9 (it is a QGIS 2.4 but composerRemoved is supposed to have been added since QGIS 2.3 [0])<br><br></span></font></pre><pre style="margin:12px 0px;text-indent:0px"><font size="4"><span style="font-family:"Courier New,courier"">About Qt.QueuedConnection, my first tests were on the Mac OS (x86-64) and Osgeo4w 64bits versions. But I never encountered crash with the 32 bits version, using the same code. Can the bug be bound to the architecture?<br></span></font></pre><pre style="margin:12px 0px;text-indent:0px"><font size="4"><span style="font-family:"Courier New,courier"">[0] </span></font><a href="https://github.com/qgis/QGIS/blob/master/src/app/qgisapp.h#L1260">https://github.com/qgis/QGIS/blob/master/src/app/qgisapp.h#L1260</a><br></pre></div><div class="gmail_extra"><br><div class="gmail_quote">2015-04-06 22:11 GMT+02:00 Matthias Kuhn <span dir="ltr"><<a href="mailto:matthias@opengis.ch" target="_blank">matthias@opengis.ch</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
Hi Junior,<br>
<br>
The following lines work for a short test-case.<br>
<br>
def compAdded( composer ):<br>
print composer<br>
<br>
def compRemoved( composer ):<br>
print composer<br>
<br>
iface.composerAdded.connect( compAdded )<br>
iface.composerRemoved.connect( compRemoved )<br>
<br>
It is possible that the QueuedConnection crashes because along with
it a composer is emitted which at the time the slot is executed is
already deleted. That was only a possible approach which I did not
test and reading your report seems unstable.<span class="HOEnZb"><font color="#888888"><br>
<br>
Matthias</font></span><div><div class="h5"><br>
<br>
<div>On 04/06/2015 12:33 AM, Junior Delaz
wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div>
<div>Hi,<br>
</div>
I do understand nothing.<br>
</div>
<div>After I read your message, Matthias, I told myself that
using QT. QueuedConnection should be the easiest way. Then i
wrote <br>
self.iface.composerWillBeRemoved.connect(self.refreshList,
Qt.QueuedConnection)<br>
But each time i delete a composer, QGIS crashes.<br>
</div>
<div>So I've spent the week on reading about Qt.QueuedConnection
and then signal and slots, function partial, QSignalMapper,
sender trying to understand how I can catch the sender and
manage to update my list. All this without success in the
code.<br>
</div>
<div>And today, I tried again Qt.QueuedConnection, QGIS crashed.
Without any changes, I tried again and it worked and continues
to work. Adding and deleting composer in the composer manager
echoes in my list.<br>
</div>
<div>I hope it will remain like that. <br>
</div>
<div><br>
</div>
<div>But now I realize that I didn't take into account the
renaming of a composer. :(<br>
<br>
</div>
<div>I think I'd wisely keep the refreshlist button unless
someone tells me how I can reach the composer manager dialog
programmatically. So that I will try to synchronize my list
with its widgetlistitems...<br>
</div>
<div><br>
</div>
<div>Thanks for all...<br>
</div>
<div><br>
</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">2015-03-31 14:50 GMT+02:00 Matthias
Kuhn <span dir="ltr"><<a href="mailto:matthias@opengis.ch" target="_blank">matthias@opengis.ch</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000"> You should get a
parameter containing the composer that is being deleted
with composerWillBeRemoved signal. Try to use that to
infer which composer has been removed. As the signal name
indicates, at the time it is emitted, the composer is not
deleted yet.<br>
As an alternative you may make the connection with
Qt.QueuedConnection. It is possible that with this
connection style you will receive the signal after
deletion and are able to continue using your current
update method.<br>
<br>
Best<span><font color="#888888"><br>
Matthias</font></span>
<div>
<div><br>
<br>
<div>On 03/31/2015 02:04 PM, Junior Delaz wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div>
<div>
<div>
<div>
<div>
<div>Matthias,<br>
</div>
Thanks. I just give it a try it and all
goes well with composerAdded. <br>
</div>
But not really well with
composerWillBeRemoved signal. The first
deletion in the composer manager does
nothing and deleting a second composer
does remove the first one in my list. and
so on...<br>
My update function should be rewritten I
think. I'll try to see how improving it
and may (surely) ask again for help (if
needed).<br>
</div>
<br>
</div>
</div>
While seeking information about
composerWillBeRemoved, I found a composerRemoved
[1] [2] signal (that doesn't appear in the API
doc) and without being able to use it. :(<br>
[1] <a href="https://github.com/qgis/QGIS/blob/master/src/app/composer/qgscomposermanager.cpp" target="_blank">https://github.com/qgis/QGIS/blob/master/src/app/composer/qgscomposermanager.cpp</a>
(line 48<br>
[2] <a href="https://github.com/qgis/QGIS/blob/master/src/app/qgisapp.cpp" target="_blank">https://github.com/qgis/QGIS/blob/master/src/app/qgisapp.cpp</a>
(line 5601)<br>
<br>
</div>
Another thing that may not be related : what the
deletePrintComposers function (<a href="https://github.com/qgis/QGIS/blob/master/src/app/qgisapp.cpp" target="_blank">https://github.com/qgis/QGIS/blob/master/src/app/qgisapp.cpp</a>
line 5698) is for?<br>
<br>
Thanks again for the clue.</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">2015-03-31 9:43 GMT+02:00
Matthias Kuhn <span dir="ltr"><<a href="mailto:matthias@opengis.ch" target="_blank">matthias@opengis.ch</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
QgisInterface (iface) has a composerAdded
and composerWillBeRemoved signal.<br>
<br>
Did you try to connect to these?<br>
<br>
Best,<br>
Matthias
<div>
<div><br>
<br>
<div>On 03/31/2015 09:34 AM, Junior
wrote:<br>
</div>
<blockquote type="cite">
<div style="font-family:'Calibri','sans-serif'">
<div>Hi all, Luca</div>
<div>Thanks for answering. But i
already have an update function
that I linked to an update list
button. I even linked it to the
icon on the toolbar so that when
user calls foreground the dialog
it's already updated.</div>
<div>The case I'd like to manage:
user can open plugin dialog and
composer manager. The two dialogs
are visible (to the eyes) even
though composer manager is the one
at foreground. He makes changes
and directly clicked on the plugin
dialog. He should update list but
if he forgets and executes, this
may lead to bug I don't want to /
can't yet manage.</div>
<div>Reason why I want to ensure
that list is always up to date
when he interacts with the dialog</div>
<div><br>
</div>
<div>Envoyé depuis mon HTC</div>
<br>
<div>----- Reply message -----<br>
De : "Luca Manganelli" <a href="mailto:luca76@gmail.com" target="_blank"><luca76@gmail.com></a><br>
Pour :<br>
Cc : <a href="mailto:qgis-user@lists.osgeo.org" target="_blank">"qgis-user@lists.osgeo.org"</a>
<a href="mailto:qgis-user@lists.osgeo.org" target="_blank"><qgis-user@lists.osgeo.org></a>,
"qgis-developer" <a href="mailto:qgis-developer@lists.osgeo.org" target="_blank"><qgis-developer@lists.osgeo.org></a><br>
Objet : [Qgis-developer]
[Qgis-user] Pyqt4 : which signal
is sent when dialog comes to
foreground?<br>
Date : mar., mars 31, 2015 07:56</div>
</div>
<br>
<pre style="word-wrap:break-word;white-space:pre-wrap">On Mon, Mar 30, 2015 at 6:12 PM, Junior Delaz <a href="mailto:delazj@gmail.com" target="_blank"><delazj@gmail.com></a> wrote:
> I've read about defining a custom showEvent function but can't understand
> where to put it and what inside.
> If somebody can give some tips...
You could add a "Update list" button
_______________________________________________
Qgis-developer mailing list
<a href="mailto:Qgis-developer@lists.osgeo.org" target="_blank">Qgis-developer@lists.osgeo.org</a>
<a href="http://lists.osgeo.org/mailman/listinfo/qgis-developer" target="_blank">http://lists.osgeo.org/mailman/listinfo/qgis-developer</a>
</pre>
<br>
<fieldset></fieldset>
<br>
<pre>_______________________________________________
Qgis-developer mailing list
<a href="mailto:Qgis-developer@lists.osgeo.org" target="_blank">Qgis-developer@lists.osgeo.org</a>
<a href="http://lists.osgeo.org/mailman/listinfo/qgis-developer" target="_blank">http://lists.osgeo.org/mailman/listinfo/qgis-developer</a></pre>
</blockquote>
<br>
</div>
</div>
</div>
<br>
_______________________________________________<br>
Qgis-developer mailing list<br>
<a href="mailto:Qgis-developer@lists.osgeo.org" target="_blank">Qgis-developer@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/qgis-developer" target="_blank">http://lists.osgeo.org/mailman/listinfo/qgis-developer</a><br>
</blockquote>
</div>
<br>
</div>
</blockquote>
<br>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</blockquote>
<br>
</div></div></div>
</blockquote></div><br></div>