On Sun, 6 Mar 2022 at 00:16, Schmetzer, Tobias via QGIS-Developer
<qgis-developer@lists.osgeo.org> wrote:
>
> Hello everyone,
>
>
> I would like to access QgisApp::instance() (src/app/qgisapp.cpp) from a 
> provider like QgsOgrProvider::extent() 
> (src/core/providers/ogr/qgsogrprovider.cpp.

You can't, by design.

CORE classes must be completely non-gui, so that they work without
issue on non-gui platforms like QGIS server (also for clients which
have their own GUI, such as QFIeld/Input).

Just to be super-blunt: There is 100% no way this will EVER change! ;)


> When looking for this information I found some inactivating preprocessor code 
> block comments like this one (qgswfsdataitems.cpp):
>
> #if 0
>
>     // TODO: how to emit message from provider (which does not know about 
> QgisApp)
>     QgisApp::instance()->messageBar()->pushMessage( tr( "Cannot copy style" ),
>         errorMsg,
>         Qgis::MessageLevel::Critical, messageTimeout() );
> #endif

This is very old code (hence why it's disabled). Again, none of the
core classes are allowed any GUI component, and the correct approach
to handle this particular situation is to move that code from the
provider level up to app level, specifically via the
QgsDataItemGuiProvider class.

So my question would be: why do you need to raise a user-facing
message from QgsOgrProvider::extent?

Nyall
_______________________________________________
QGIS-Developer mailing list
QGIS-Developer@lists.osgeo.org
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer

Reply via email to