[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