[QGIS-Developer] Making QgsRasterLayerProperties class independent again from QgisApp instance

Nyall Dawson nyall.dawson at gmail.com
Wed Sep 18 21:36:48 PDT 2019


On Thu, 19 Sep 2019 at 13:55, Vincent Cloarec <vcloarec at gmail.com> wrote:
>
> In standalone applications, I am using the QgsRasterLayerProperties class to manage rasters displayed in the map canvas.
>
> However, since QGis 3.8, this class is no longer independent from the QgisApp instance because the methode QgisApp::instance()->askUserForDatumTransform() is called from the QgsRasterLayerProperties instance.
>
> As in my standalone applications, I don't have QgsApp instance (no need), now this applications crash when the raster layer properties widget opens ...
>
> So, after a look at the Qgis code, I am thinking about to make a PR to make again the QgsRasterLayerProperties independant from the QgisApp instance. I think it could be possible with a static method in the QgisApp class. I have to work on it.

Possibly -- but it's a band-aid solution only. There's a LOT of code
in the app library which will make assumptions that the QgisApp
instance is available, and that's why all this code is partitioned off
into the app library. app also has no stable API guarantees and you'll
continue to hit situations like this.

I'd suggest two possible alternative ways forward:

1. Use the stable api classes exposes through the gui library to
rebuild your own raster layer properties dialog
2. Submit a PR moving the raster layer properties class from app ->
gui and adding it to the stable API

Both approaches are more upfront work, but are paths to much less pain
and future breakage...

Nyall


More information about the QGIS-Developer mailing list