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

Junior Delaz delazj at gmail.com
Wed Apr 8 09:05:27 PDT 2015


Ahh indeed, you are right... I should have paid attention to the Class in
which I found the signal. But I was too obsessed by composerWillBeRemoved
that I thought I was still in QgisInterface.
If it can be added to QgisInterface, why not?
Any idea about my remark on Qt.QueuedConnection and architecture 64bits vs
32bits?

In the meantime, I think I'll keep the refresh button and find a simple way
to deal with the case user doesn't refresh before executing (it might not
be that hard :) ). And in this case, I also keep compatibility with all 2.x
releases.

2015-04-08 0:16 GMT+02:00 Matthias Kuhn <matthias at opengis.ch>:

>  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>:
>
>>  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>:
>>
>>>  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>:
>>>
>>>>  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>:
>>>>
>>>>>  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> <luca76 at gmail.com>
>>>>> Pour :
>>>>> Cc : "qgis-user at lists.osgeo.org" <qgis-user at lists.osgeo.org>
>>>>> <qgis-user at lists.osgeo.org> <qgis-user at lists.osgeo.org>,
>>>>> "qgis-developer" <qgis-developer at lists.osgeo.org>
>>>>> <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> <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 listQgis-developer at lists.osgeo.orghttp://lists.osgeo.org/mailman/listinfo/qgis-developer
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Qgis-developer mailing listQgis-developer at lists.osgeo.orghttp://lists.osgeo.org/mailman/listinfo/qgis-developer
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Qgis-developer mailing list
>>>>> 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/1b7e8fdb/attachment-0001.html>


More information about the Qgis-developer mailing list