[Qgis-developer] Re : [Qgis-user] Pyqt4 : which signal is sent when dialog comes to foreground?

Matthias Kuhn matthias at opengis.ch
Tue Apr 7 14:35:47 PDT 2015


Oops,

That should have been composerWillBeRemoved

Sorry for that...

Matthias

On 04/07/2015 10:07 PM, Junior Delaz wrote:
> Thank you Matthias for your perseverance. It's very helpful and
> encouraging for beginners.
> I have already tried composerRemoved but when loading the plugin, QGIS
> complains :
>
> Impossible de charger l'extension MapsPrinter provoque une erreur lors
> de l'appel de sa méthode initGui()
> Traceback (most recent call last):
>   File "C:/OSGeo4W/apps/qgis/./python\qgis\utils.py", line 228, in startPlugin
>     plugins[packageName].initGui()
>   File "C:/Users/harrissou/.qgis2/python/plugins\MapsPrinter\maps_printer.py", line 129, in initGui
>     self.iface.composerRemoved.connect(self.refreshList)
> AttributeError: 'QgisInterface' object has no attribute 'composerRemoved'
>
> This happens with all the versions of QGIS I use :
> - osgeo4w 32bits (windows 8), osgeo4w 64bits (windows 7): either with QGIS 2.8, 2.8rel-dev and 2.9
> - and Mac OS 10.9 (it is a QGIS 2.4 but composerRemoved is supposed to have been added since QGIS 2.3 [0])
>
> 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?
> [0] https://github.com/qgis/QGIS/blob/master/src/app/qgisapp.h#L1260
>
> 2015-04-06 22:11 GMT+02:00 Matthias Kuhn <matthias at opengis.ch
> <mailto:matthias at opengis.ch>>:
>
>     Hi Junior,
>
>     The following lines work for a short test-case.
>
>     def compAdded( composer ):
>       print composer
>
>     def compRemoved( composer ):
>       print composer
>
>     iface.composerAdded.connect( compAdded )
>     iface.composerRemoved.connect( compRemoved )
>
>     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.
>
>     Matthias
>
>
>     On 04/06/2015 12:33 AM, Junior Delaz wrote:
>>     Hi,
>>     I do understand nothing.
>>     After I read your message, Matthias, I told myself that using QT.
>>     QueuedConnection should be the easiest way. Then i wrote
>>     self.iface.composerWillBeRemoved.connect(self.refreshList,
>>     Qt.QueuedConnection)
>>     But each time i delete a composer, QGIS crashes.
>>     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.
>>     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.
>>     I hope it will remain like that.
>>
>>     But now I realize that I didn't take into account the renaming of
>>     a composer. :(
>>
>>     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...
>>
>>     Thanks for all...
>>
>>
>>     2015-03-31 14:50 GMT+02:00 Matthias Kuhn <matthias at opengis.ch
>>     <mailto:matthias at opengis.ch>>:
>>
>>         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.
>>         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.
>>
>>         Best
>>         Matthias
>>
>>
>>         On 03/31/2015 02:04 PM, Junior Delaz wrote:
>>>         Matthias,
>>>         Thanks. I just give it a try it and all goes well with
>>>         composerAdded.
>>>         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...
>>>         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).
>>>
>>>         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. :(
>>>         [1]
>>>         https://github.com/qgis/QGIS/blob/master/src/app/composer/qgscomposermanager.cpp
>>>         (line 48
>>>         [2]
>>>         https://github.com/qgis/QGIS/blob/master/src/app/qgisapp.cpp
>>>         (line 5601)
>>>
>>>         Another thing that may not be related : what the
>>>         deletePrintComposers function
>>>         (https://github.com/qgis/QGIS/blob/master/src/app/qgisapp.cpp line
>>>         5698) is for?
>>>
>>>         Thanks again for the clue.
>>>
>>>         2015-03-31 9:43 GMT+02:00 Matthias Kuhn <matthias at opengis.ch
>>>         <mailto:matthias at opengis.ch>>:
>>>
>>>             QgisInterface (iface) has a composerAdded and
>>>             composerWillBeRemoved signal.
>>>
>>>             Did you try to connect to these?
>>>
>>>             Best,
>>>             Matthias
>>>
>>>
>>>             On 03/31/2015 09:34 AM, Junior wrote:
>>>>             Hi all, Luca
>>>>             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.
>>>>             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.
>>>>             Reason why I want to ensure that list is always up to
>>>>             date when he interacts with the dialog
>>>>
>>>>             Envoyé depuis mon HTC
>>>>
>>>>             ----- Reply message -----
>>>>             De : "Luca Manganelli" <luca76 at gmail.com>
>>>>             <mailto:luca76 at gmail.com>
>>>>             Pour :
>>>>             Cc : "qgis-user at lists.osgeo.org"
>>>>             <mailto:qgis-user at lists.osgeo.org>
>>>>             <qgis-user at lists.osgeo.org>
>>>>             <mailto:qgis-user at lists.osgeo.org>, "qgis-developer"
>>>>             <qgis-developer at lists.osgeo.org>
>>>>             <mailto:qgis-developer at lists.osgeo.org>
>>>>             Objet : [Qgis-developer] [Qgis-user] Pyqt4 : which
>>>>             signal is sent when dialog comes to foreground?
>>>>             Date : mar., mars 31, 2015 07:56
>>>>
>>>>             On Mon, Mar 30, 2015 at 6:12 PM, Junior Delaz <delazj at gmail.com> <mailto:delazj at gmail.com> 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
>>>>             Qgis-developer at lists.osgeo.org <mailto:Qgis-developer at lists.osgeo.org>
>>>>             http://lists.osgeo.org/mailman/listinfo/qgis-developer
>>>>
>>>>
>>>>             _______________________________________________
>>>>             Qgis-developer mailing list
>>>>             Qgis-developer at lists.osgeo.org <mailto:Qgis-developer at lists.osgeo.org>
>>>>             http://lists.osgeo.org/mailman/listinfo/qgis-developer
>>>
>>>
>>>             _______________________________________________
>>>             Qgis-developer mailing list
>>>             Qgis-developer at lists.osgeo.org
>>>             <mailto:Qgis-developer at lists.osgeo.org>
>>>             http://lists.osgeo.org/mailman/listinfo/qgis-developer
>>>
>>>
>>
>>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20150407/1b62faa1/attachment-0001.html>


More information about the Qgis-developer mailing list