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

Matthias Kuhn matthias at opengis.ch
Tue Apr 7 15:16:34 PDT 2015


It's in QgisApp but not in QgisInterface.

It is only used internally by the app (in the composermanager for
exactly the same purpose as you are trying to use it for AFAICS).
Anyway, I don't see any reason not to make this available on the public
interface as well...

On 04/07/2015 11:51 PM, Junior Delaz wrote:
> But why does composerRemoved not work? You can find it in the code on
> github repo but not on QGIS API website...
>
> 2015-04-07 23:35 GMT+02:00 Matthias Kuhn <matthias at opengis.ch
> <mailto:matthias at opengis.ch>>:
>
>     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/20150408/495b1e57/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20150408/495b1e57/attachment-0001.pgp>


More information about the Qgis-developer mailing list