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 <matth...@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 <matth...@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 <matth...@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 <matth...@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 <matth...@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" <luc...@gmail.com> <luc...@gmail.com> >>>>> Pour : >>>>> Cc : "qgis-u...@lists.osgeo.org" <qgis-u...@lists.osgeo.org> >>>>> <qgis-u...@lists.osgeo.org> <qgis-u...@lists.osgeo.org>, >>>>> "qgis-developer" <qgis-developer@lists.osgeo.org> >>>>> <qgis-developer@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 <del...@gmail.com> >>>>> <del...@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@lists.osgeo.orghttp://lists.osgeo.org/mailman/listinfo/qgis-developer >>>>> >>>>> >>>>> >>>>> _______________________________________________ >>>>> Qgis-developer mailing >>>>> listQgis-developer@lists.osgeo.orghttp://lists.osgeo.org/mailman/listinfo/qgis-developer >>>>> >>>>> >>>>> >>>>> _______________________________________________ >>>>> Qgis-developer mailing list >>>>> Qgis-developer@lists.osgeo.org >>>>> http://lists.osgeo.org/mailman/listinfo/qgis-developer >>>>> >>>> >>>> >>>> >>> >>> >> >> > >
_______________________________________________ Qgis-developer mailing list Qgis-developer@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/qgis-developer