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

Junior Delaz delazj at gmail.com
Tue Apr 7 14:51:20 PDT 2015


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/20150407/4d83ca0d/attachment-0001.html>


More information about the Qgis-developer mailing list