21#include "providers/gdal/qgsgdalprovider.h"
23#include "providers/meshmemory/qgsmeshmemorydataprovider.h"
24#include "providers/ogr/qgsogrprovider.h"
25#include "providers/ogr/qgsogrprovidermetadata.h"
46#include "providers/ept/qgseptprovider.h"
50#include "providers/copc/qgscopcprovider.h"
51#include "providers/vpc/qgsvirtualpointcloudprovider.h"
57#ifdef HAVE_STATIC_PROVIDERS
58#include "qgswmsprovider.h"
59#include "qgswcsprovider.h"
60#include "qgsdelimitedtextprovider.h"
61#include "qgsafsprovider.h"
62#include "qgsamsprovider.h"
64#include "qgsspatialiteprovider.h"
65#include "qgswfsprovider.h"
66#include "qgswfsprovidermetadata.h"
67#include "qgsoapifprovider.h"
68#include "qgsvirtuallayerprovider.h"
71#include "qgspostgresprovider.h"
78#include <QRegularExpression>
87 const QMutexLocker locker( &sMutex );
90 sInstance =
new QgsProviderRegistry( pluginPath );
107 const QString &providerKey )
110 const QgsProviderRegistry::Providers::const_iterator i =
111 metaData.find( providerKey );
113 if ( i != metaData.end() )
119 for (
auto it = metaData.begin(); it != metaData.end(); ++it )
121 if ( providerKey.compare( it->first, Qt::CaseInsensitive ) == 0 )
128QgsProviderRegistry::QgsProviderRegistry(
const QString &pluginPath )
136 char **argv = qApp->argv();
137 QString appDir = argv[0];
138 int bin = appDir.findRev(
"/bin", -1,
false );
139 QString baseDir = appDir.left( bin );
140 QString mLibraryDirectory = baseDir +
"/lib";
143 const QgsScopedRuntimeProfile profile( QObject::tr(
"Initialize data providers" ) );
144 mLibraryDirectory.setPath( pluginPath );
152 bool matchesUri(
const QString &uri )
const override
154 const QFileInfo fi( uri );
155 if ( fi.suffix().compare( QLatin1String(
"las" ), Qt::CaseInsensitive ) == 0 || fi.suffix().compare( QLatin1String(
"laz" ), Qt::CaseInsensitive ) == 0 )
161 QgsProviderRegistry::UnusableUriDetails
details(
const QString &uri )
const override
163 QgsProviderRegistry::UnusableUriDetails res = QgsProviderRegistry::UnusableUriDetails( uri,
164 QObject::tr(
"LAS and LAZ files cannot be opened by this QGIS install." ),
168 res.
detailedWarning = QObject::tr(
"The installer used to install this version of QGIS does "
169 "not include the PDAL library required for opening LAS and LAZ point clouds. Please "
170 "obtain one of the alternative installers from https://qgis.org which has point "
171 "cloud support enabled." );
173 res.
detailedWarning = QObject::tr(
"This QGIS build does not include the PDAL library dependency required for opening LAS or LAZ point clouds." );
180void QgsProviderRegistry::init()
184 const QgsScopedRuntimeProfile profile( QObject::tr(
"Create memory layer provider" ) );
185 mProviders[ QgsMemoryProvider::providerKey() ] =
new QgsMemoryProviderMetadata();
188 const QgsScopedRuntimeProfile profile( QObject::tr(
"Create mesh memory layer provider" ) );
189 mProviders[ QgsMeshMemoryDataProvider::providerKey() ] =
new QgsMeshMemoryProviderMetadata();
192 const QgsScopedRuntimeProfile profile( QObject::tr(
"Create GDAL provider" ) );
193 mProviders[ QgsGdalProvider::providerKey() ] =
new QgsGdalProviderMetadata();
196 const QgsScopedRuntimeProfile profile( QObject::tr(
"Create OGR provider" ) );
197 mProviders[ QgsOgrProvider::providerKey() ] =
new QgsOgrProviderMetadata();
200 const QgsScopedRuntimeProfile profile( QObject::tr(
"Create OGC SensorThings API provider" ) );
201 mProviders[ QgsSensorThingsProvider::providerKey() ] =
new QgsSensorThingsProviderMetadata();
204 const QgsScopedRuntimeProfile profile( QObject::tr(
"Create vector tile providers" ) );
205 QgsProviderMetadata *vt =
new QgsVectorTileProviderMetadata();
206 mProviders[ vt->
key() ] = vt;
207 vt =
new QgsXyzVectorTileDataProviderMetadata();
208 mProviders[ vt->
key() ] = vt;
209 vt =
new QgsVtpkVectorTileDataProviderMetadata();
210 mProviders[ vt->
key() ] = vt;
211 vt =
new QgsArcGisVectorTileServiceDataProviderMetadata();
212 mProviders[ vt->
key() ] = vt;
213 vt =
new QgsMbTilesVectorTileDataProviderMetadata();
214 mProviders[ vt->
key() ] = vt;
218 const QgsScopedRuntimeProfile profile( QObject::tr(
"Create EPT point cloud provider" ) );
219 QgsProviderMetadata *pc =
new QgsEptProviderMetadata();
220 mProviders[ pc->
key() ] = pc;
225 const QgsScopedRuntimeProfile profile( QObject::tr(
"Create COPC point cloud provider" ) );
226 QgsProviderMetadata *pc =
new QgsCopcProviderMetadata();
227 mProviders[ pc->
key() ] = pc;
230 const QgsScopedRuntimeProfile profile( QObject::tr(
"Create Virtual point cloud provider" ) );
231 QgsProviderMetadata *pc =
new QgsVirtualPointCloudProviderMetadata();
232 mProviders[ pc->
key() ] = pc;
238 const QgsScopedRuntimeProfile profile( QObject::tr(
"Create tiled scene providers" ) );
239 QgsProviderMetadata *metadata =
new QgsTiledSceneProviderMetadata();
240 mProviders[ metadata->
key() ] = metadata;
242 metadata =
new QgsCesiumTilesProviderMetadata();
243 mProviders[ metadata->
key() ] = metadata;
245 metadata =
new QgsQuantizedMeshProviderMetadata();
246 mProviders[ metadata->
key() ] = metadata;
248 metadata =
new QgsEsriI3SProviderMetadata();
249 mProviders[ metadata->
key() ] = metadata;
252#ifdef HAVE_STATIC_PROVIDERS
253 mProviders[ QgsWmsProvider::providerKey() ] =
new QgsWmsProviderMetadata();
254 mProviders[ QgsWcsProvider::providerKey() ] =
new QgsWcsProviderMetadata();
255 mProviders[ QgsDelimitedTextProvider::providerKey() ] =
new QgsDelimitedTextProviderMetadata();
256 mProviders[ QgsAfsProvider::providerKey() ] =
new QgsAfsProviderMetadata();
257 mProviders[ QgsAmsProvider::providerKey() ] =
new QgsAmsProviderMetadata();
258#ifdef HAVE_SPATIALITE
259 mProviders[ QgsSpatiaLiteProvider::providerKey() ] =
new QgsSpatiaLiteProviderMetadata();
260 mProviders[ QgsWFSProvider::providerKey() ] =
new QgsWfsProviderMetadata();
261 mProviders[ QgsOapifProvider::providerKey() ] =
new QgsOapifProviderMetadata();
262 mProviders[ QgsVirtualLayerProvider::providerKey() ] =
new QgsVirtualLayerProviderMetadata();
264#ifdef HAVE_POSTGRESQL
265 mProviders[ QgsPostgresProvider::providerKey() ] =
new QgsPostgresProviderMetadata();
270#ifdef HAVE_STATIC_PROVIDERS
273 typedef QgsProviderMetadata *factory_function( );
275 mLibraryDirectory.setSorting( QDir::Name | QDir::IgnoreCase );
276 mLibraryDirectory.setFilter( QDir::Files | QDir::NoSymLinks );
278#if defined(Q_OS_WIN) || defined(__CYGWIN__)
279 mLibraryDirectory.setNameFilters( QStringList(
"*.dll" ) );
280#elif defined(ANDROID)
281 mLibraryDirectory.setNameFilters( QStringList(
"*provider_*.so" ) );
283 mLibraryDirectory.setNameFilters( QStringList( QStringLiteral(
"*.so" ) ) );
286 QgsDebugMsgLevel( QStringLiteral(
"Checking %1 for provider plugins" ).arg( mLibraryDirectory.path() ), 2 );
288 if ( mLibraryDirectory.count() == 0 )
290 QgsDebugError( QStringLiteral(
"No dynamic QGIS data provider plugins found in:\n%1\n" ).arg( mLibraryDirectory.path() ) );
294 const QString filePattern = getenv(
"QGIS_PROVIDER_FILE" );
295 QRegularExpression fileRegexp;
296 if ( !filePattern.isEmpty() )
298 fileRegexp.setPattern( filePattern );
301 typedef std::vector<QgsProviderMetadata *> *multiple_factory_function();
303 const auto constEntryInfoList = mLibraryDirectory.entryInfoList();
304 for (
const QFileInfo &fi : constEntryInfoList )
306 if ( !filePattern.isEmpty() )
308 if ( fi.fileName().indexOf( fileRegexp ) == -1 )
310 QgsDebugMsgLevel(
"provider " + fi.fileName() +
" skipped because doesn't match pattern " + filePattern, 2 );
316 if ( fi.fileName().contains( QStringLiteral(
"authmethod" ), Qt::CaseSensitivity::CaseInsensitive ) )
321 const QgsScopedRuntimeProfile profile( QObject::tr(
"Load %1" ).arg( fi.fileName() ) );
322 QLibrary myLib( fi.filePath() );
325 QgsDebugError( QStringLiteral(
"Checking %1: ...invalid (lib not loadable): %2" ).arg( myLib.fileName(), myLib.errorString() ) );
329 bool libraryLoaded {
false };
330 QFunctionPointer func = myLib.resolve( QStringLiteral(
"providerMetadataFactory" ).toLatin1().data() );
334 QgsProviderMetadata *meta =
function();
337 if ( findMetadata_( mProviders, meta->
key() ) )
339 QgsDebugError( QStringLiteral(
"Checking %1: ...invalid (key %2 already registered)" ).arg( myLib.fileName() ).arg( meta->
key() ) );
344 mProviders[meta->
key()] = meta;
345 libraryLoaded =
true;
350 QFunctionPointer multi_func = myLib.resolve( QStringLiteral(
"multipleProviderMetadataFactory" ).toLatin1().data() );
351 multiple_factory_function *multi_function =
reinterpret_cast< multiple_factory_function *
>(
cast_to_fptr( multi_func ) );
352 if ( multi_function )
354 std::vector<QgsProviderMetadata *> *metadatas = multi_function();
355 for (
const auto meta : *metadatas )
357 if ( findMetadata_( mProviders, meta->
key() ) )
359 QgsDebugError( QStringLiteral(
"Checking %1: ...invalid (key %2 already registered)" ).arg( myLib.fileName() ).arg( meta->
key() ) );
364 mProviders[meta->
key()] = meta;
365 libraryLoaded =
true;
371 if ( ! libraryLoaded )
373 QgsDebugMsgLevel( QStringLiteral(
"Checking %1: ...invalid (no providerMetadataFactory method)" ).arg( myLib.fileName() ), 2 );
381 for ( Providers::const_iterator it = mProviders.begin(); it != mProviders.end(); ++it )
383 const QString &key = it->first;
385 const QgsScopedRuntimeProfile profile( QObject::tr(
"Initialize %1" ).arg( key ) );
387 QgsProviderMetadata *meta = it->second;
393 rebuildFilterStrings();
396 mDatabaseDrivers = QgsOgrProviderUtils::databaseDrivers();
399 mDirectoryDrivers = QgsOgrProviderUtils::directoryDrivers();
402 mProtocolDrivers = QgsOgrProviderUtils::protocolDrivers();
405void QgsProviderRegistry::rebuildFilterStrings()
407 mVectorFileFilters.clear();
408 mRasterFileFilters.clear();
409 mMeshFileFilters.clear();
410 mMeshDatasetFileFilters.clear();
411 mPointCloudFileFilters.clear();
412 mVectorTileFileFilters.clear();
413 mTiledSceneFileFilters.clear();
415 QStringList pointCloudWildcards;
416 QStringList pointCloudFilters;
418 QStringList vectorTileWildcards;
419 QStringList vectorTileFilters;
421 QStringList tiledSceneWildcards;
422 QStringList tiledSceneFilters;
424 for ( Providers::const_iterator it = mProviders.begin(); it != mProviders.end(); ++it )
426 QgsProviderMetadata *meta = it->second;
450 QgsDebugMsgLevel( QStringLiteral(
"Checking %1: ...loaded OK (%2 file mesh filters)" ).arg( it->first ).arg( mMeshFileFilters.split(
";;" ).count() ), 2 );
458 QgsDebugMsgLevel( QStringLiteral(
"Checking %1: ...loaded OK (%2 file dataset filters)" ).arg( it->first ).arg( mMeshDatasetFileFilters.split(
";;" ).count() ), 2 );
467 const QStringList filters =
filePointCloudFilters.split( QStringLiteral(
";;" ), Qt::SkipEmptyParts );
468 for (
const QString &filter : filters )
470 pointCloudFilters.append( filter );
481 const QStringList filters =
fileVectorTileFilters.split( QStringLiteral(
";;" ), Qt::SkipEmptyParts );
482 for (
const QString &filter : filters )
484 vectorTileFilters.append( filter );
495 const QStringList filters =
fileTiledSceneFilters.split( QStringLiteral(
";;" ), Qt::SkipEmptyParts );
496 for (
const QString &filter : filters )
498 tiledSceneFilters.append( filter );
504 if ( !pointCloudFilters.empty() )
506 pointCloudFilters.insert( 0, QObject::tr(
"All Supported Files" ) + QStringLiteral(
" (%1)" ).arg( pointCloudWildcards.join(
' ' ) ) );
507 pointCloudFilters.insert( 1, QObject::tr(
"All Files" ) + QStringLiteral(
" (*.*)" ) );
508 mPointCloudFileFilters = pointCloudFilters.join( QLatin1String(
";;" ) );
511 if ( !vectorTileFilters.empty() )
513 vectorTileFilters.insert( 0, QObject::tr(
"All Supported Files" ) + QStringLiteral(
" (%1)" ).arg( vectorTileWildcards.join(
' ' ) ) );
514 vectorTileFilters.insert( 1, QObject::tr(
"All Files" ) + QStringLiteral(
" (*.*)" ) );
515 mVectorTileFileFilters = vectorTileFilters.join( QLatin1String(
";;" ) );
518 if ( !tiledSceneFilters.empty() )
520 tiledSceneFilters.insert( 0, QObject::tr(
"All Supported Files" ) + QStringLiteral(
" (%1)" ).arg( tiledSceneWildcards.join(
' ' ) ) );
521 tiledSceneFilters.insert( 1, QObject::tr(
"All Files" ) + QStringLiteral(
" (*.*)" ) );
522 mTiledSceneFileFilters = tiledSceneFilters.join( QLatin1String(
";;" ) );
529void QgsProviderRegistry::clean()
532 if ( QgsProject::sProject )
535 Providers::const_iterator it = mProviders.begin();
537 while ( it != mProviders.end() )
540 it->second->cleanupProvider();
547bool QgsProviderRegistry::exists()
549 return static_cast< bool >( sInstance );
554 qDeleteAll( mUnusableUriHandlers );
557 if ( sInstance ==
this )
577 Providers::const_iterator it = mProviders.begin();
579 if ( mProviders.empty() )
580 return QObject::tr(
"No data provider plugins are available. No vector layers can be loaded" );
585 list += QLatin1String(
"<ol>" );
587 while ( it != mProviders.end() )
590 list += QLatin1String(
"<li>" );
592 list += it->second->description();
595 list += QLatin1String(
"<br></li>" );
603 list += QLatin1String(
"</ol>" );
610 mLibraryDirectory = path;
617 return mLibraryDirectory;
647 const QList< QgsDataItemProvider * > itemProviders =
dataItemProviders( providerKey );
652 ret |= itemProvider->capabilities();
663 return QVariantMap();
698 bool overwrite, QMap<int, int> &oldToNewAttrIdxMap,
699 QString &errorMessage,
700 const QMap<QString, QVariant> *options, QString &createdLayerName )
704 return meta->
createEmptyLayer( uri, fields, wkbType, srs, overwrite, oldToNewAttrIdxMap, errorMessage, options, createdLayerName );
707 errorMessage = QObject::tr(
"Unable to load %1 provider" ).arg( providerKey );
715 const QStringList &creationOptions )
719 return meta->
createRasterDataProvider( uri, format, nBands, type, width, height, geoTransform, crs, creationOptions );
730 return QList<QPair<QString, QString> >();
739 return QList<QgsDataItemProvider *>();
742int QgsProviderRegistry::listStyles(
const QString &providerKey,
const QString &uri, QStringList &ids, QStringList &names, QStringList &descriptions, QString &errCause )
748 res = meta->
listStyles( uri, ids, names, descriptions, errCause );
752 errCause = QObject::tr(
"Unable to load %1 provider" ).arg( providerKey );
763 return meta->
styleExists( uri, styleId, errorCause );
767 errorCause = QObject::tr(
"Unable to load %1 provider" ).arg( providerKey );
782 errCause = QObject::tr(
"Unable to load %1 provider" ).arg( providerKey );
789 const bool ret(
false );
796 errCause = QObject::tr(
"Unable to load %1 provider" ).arg( providerKey );
802 const QString &sldStyle,
const QString &styleName,
const QString &styleDescription,
803 const QString &uiFileContent,
bool useAsDefault, QString &errCause )
808 ret = meta->
saveStyle( uri, qmlStyle, sldStyle, styleName, styleDescription,
809 uiFileContent, useAsDefault, errCause );
812 errCause = QObject::tr(
"Unable to load %1 provider" ).arg( providerKey );
825 errCause = QObject::tr(
"Unable to load %1 provider" ).arg( providerKey );
838 errCause = QObject::tr(
"Unable to load %1 provider" ).arg( providerKey );
845 errorMessage.clear();
858 return meta->
createDb( dbPath, errCause );
861 errCause = QStringLiteral(
"Resolving createDb(...) failed" );
878 Q_UNUSED( providerKey );
881 Q_UNUSED( widgetMode );
882 QgsDebugError(
"deprecated call - use QgsGui::sourceSelectProviderRegistry()->createDataSourceWidget() instead" );
887 QString
const &functionName )
const
890 const QString lib =
library( providerKey );
895 QLibrary myLib( lib );
901 return myLib.resolve( functionName.toLatin1().data() );
905 QgsDebugError(
"Cannot load library: " + myLib.errorString() );
913 const QString lib =
library( providerKey );
918 auto myLib = std::make_unique<QLibrary>( lib );
923 return myLib.release();
925 QgsDebugError(
"Cannot load library: " + myLib->errorString() );
932 QgsDebugError(
"deprecated - use QgsGui::providerGuiRegistry() instead." );
943 rebuildFilterStrings();
948 QgsDebugMsgLevel( QStringLiteral(
"Cannot register provider metadata: a provider with the same key (%1) was already registered!" ).arg(
providerMetadata->key() ), 2 );
953 QgsDebugMsgLevel( QStringLiteral(
"Trying to register a null metadata provider!" ), 2 );
960 return mVectorFileFilters;
965 return mRasterFileFilters;
970 return mMeshFileFilters;
975 return mMeshDatasetFileFilters;
980 return mPointCloudFileFilters;
985 return mVectorTileFileFilters;
990 return mTiledSceneFileFilters;
995 return mDatabaseDrivers;
1000 return mDirectoryDrivers;
1005 return mProtocolDrivers;
1011 for ( Providers::const_iterator it = mProviders.begin(); it != mProviders.end(); ++it )
1013 lst.append( it->first );
1020 return findMetadata_( mProviders, providerKey );
1026 for ( Providers::const_iterator it = mProviders.begin(); it != mProviders.end(); ++it )
1028 if ( it->second->supportedLayerTypes().contains( type ) )
1029 lst.insert( it->first );
1036 QList< QgsProviderRegistry::ProviderCandidateDetails > res;
1037 int maxPriority = 0;
1038 for (
auto it = mProviders.begin(); it != mProviders.end(); ++it )
1043 const int thisProviderPriority = it->second->priorityForUri( uri );
1044 if ( thisProviderPriority == 0 )
1047 if ( thisProviderPriority > maxPriority )
1050 maxPriority = thisProviderPriority;
1052 if ( thisProviderPriority == maxPriority )
1062 mUnusableUriHandlers << handler;
1070 if ( handler->matchesUri( uri ) )
1072 details = handler->details( uri );
1082 if ( providers.empty() )
1087 if ( provider.metadata()->key() == providerKey )
1095 for (
auto it = mProviders.begin(); it != mProviders.end(); ++it )
1097 if ( it->second->uriIsBlocklisted( uri ) )
1109 QList<QgsProviderSublayerDetails> res;
1110 for (
auto it = mProviders.begin(); it != mProviders.end(); ++it )
1116 res.append( it->second->querySublayers( uri, flags, feedback ) );
@ TiledScene
Tiled scene layers.
@ VectorTile
Vector tile layers.
@ MeshDataset
Mesh datasets.
@ PointCloud
Point clouds.
VectorExportResult
Vector layer export result codes.
@ ErrorInvalidProvider
Could not find a matching provider key.
QFlags< DataItemProviderCapability > DataItemProviderCapabilities
Capabilities for data item providers.
QFlags< DataProviderReadFlag > DataProviderReadFlags
Flags which control data provider construction.
DataType
Raster data types.
QFlags< SublayerQueryFlag > SublayerQueryFlags
Sublayer query flags.
LayerType
Types of layers that can be added to a map.
@ PointCloud
Point cloud layer. Added in QGIS 3.18.
WkbType
The WKB type describes the number of dimensions a geometry has.
Represents a coordinate reference system (CRS).
Interface for providers that add custom data items to the browser tree.
Abstract base class for spatial data provider implementations.
Base class for feedback objects to be used for cancellation of something running in a worker thread.
bool isCanceled() const
Tells whether the operation has been canceled already.
Container of fields for a vector layer.
static QString wildcardsFromFilter(const QString &filter)
Given a filter string like GeoTIFF Files (*.tiff *.tif), extracts the wildcard portion of this filter...
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::MessageLevel::Warning, bool notifyUser=true, const char *file=__builtin_FILE(), const char *function=__builtin_FUNCTION(), int line=__builtin_LINE())
Adds a message to the log instance (and creates it if necessary).
Custom exception class which is raised when an operation is not supported.
static QgsProject * instance()
Returns the QgsProject singleton instance.
void removeAllMapLayers()
Removes all registered layers.
Contains information pertaining to a candidate provider.
Contains information about unusable URIs which aren't handled by any registered providers.
QString detailedWarning
Contains a longer, user-friendly, translated message advising why the URI is not usable.
An interface used to handle unusable URIs which aren't handled by any registered providers,...
virtual UnusableUriDetails details(const QString &uri) const =0
Returns the details for advising the user why the uri is not usable.
virtual bool matchesUri(const QString &uri) const =0
Returns true if the handle is an unusable URI handler for the specified uri.
A registry / canonical manager of data providers.
QString absoluteToRelativeUri(const QString &providerKey, const QString &uri, const QgsReadWriteContext &context) const
Converts absolute path(s) to relative path(s) in the given provider-specific URI.
std::map< QString, QgsProviderMetadata * > Providers
Type for data provider metadata associative container.
bool styleExists(const QString &providerKey, const QString &uri, const QString &styleId, QString &errorCause)
Returns true if a layer style with the specified styleId exists in the provider defined by providerKe...
QString loadStyle(const QString &providerKey, const QString &uri, QString &errCause)
Loads a layer style defined by uri.
QString getStyleById(const QString &providerKey, const QString &uri, const QString &styleId, QString &errCause)
Gets a layer style defined by styleId.
QVariantMap decodeUri(const QString &providerKey, const QString &uri)
Breaks a provider data source URI into its component paths (e.g.
void setLibraryDirectory(const QDir &path)
Sets library directory where to search for plugins.
QString fileVectorTileFilters() const
Returns a file filter string for supported vector tile files.
Qgis::VectorExportResult createEmptyLayer(const QString &providerKey, const QString &uri, const QgsFields &fields, Qgis::WkbType wkbType, const QgsCoordinateReferenceSystem &srs, bool overwrite, QMap< int, int > &oldToNewAttrIdxMap, QString &errorMessage, const QMap< QString, QVariant > *options, QString &createdLayerName)
Creates new empty vector layer.
QgsTransaction * createTransaction(const QString &providerKey, const QString &connString)
Returns new instance of transaction.
QList< QgsProviderSublayerDetails > querySublayers(const QString &uri, Qgis::SublayerQueryFlags flags=Qgis::SublayerQueryFlags(), QgsFeedback *feedback=nullptr) const
Queries the specified uri and returns a list of any valid sublayers found in the dataset which can be...
Q_DECL_DEPRECATED void registerGuis(QWidget *widget)
static QgsProviderRegistry * instance(const QString &pluginPath=QString())
Means of accessing canonical single instance.
WidgetMode
Different ways a source select dialog can be used.
Q_DECL_DEPRECATED QWidget * createSelectionWidget(const QString &providerKey, QWidget *parent=nullptr, Qt::WindowFlags fl=Qt::WindowFlags(), QgsProviderRegistry::WidgetMode widgetMode=QgsProviderRegistry::WidgetMode::Standalone)
Returns a new widget for selecting layers from a provider.
QString protocolDrivers() const
Returns a string containing the available protocol drivers.
QList< QgsProviderRegistry::ProviderCandidateDetails > preferredProvidersForUri(const QString &uri) const
Returns the details for the preferred provider(s) for opening the specified uri.
Q_DECL_DEPRECATED QString library(const QString &providerKey) const
Returns path for the library of the provider.
QString fileTiledSceneFilters() const
Returns a file filter string for supported tiled scene files.
QString databaseDrivers() const
Returns a string containing the available database drivers.
QString encodeUri(const QString &providerKey, const QVariantMap &parts)
Reassembles a provider data source URI from its component paths (e.g.
QList< QgsDataItemProvider * > dataItemProviders(const QString &providerKey) const
Returns list of data item providers of the provider.
QgsRasterDataProvider * createRasterDataProvider(const QString &providerKey, const QString &uri, const QString &format, int nBands, Qgis::DataType type, int width, int height, double *geoTransform, const QgsCoordinateReferenceSystem &crs, const QStringList &createOptions=QStringList())
Creates new instance of raster data provider.
QList< QPair< QString, QString > > pyramidResamplingMethods(const QString &providerKey)
Returns list of raster pyramid resampling methods.
bool uriIsBlocklisted(const QString &uri) const
Returns true if the specified uri is known by any registered provider to be something which should be...
Q_DECL_DEPRECATED QLibrary * createProviderLibrary(const QString &providerKey) const
Returns a new QLibrary for the specified providerKey.
bool handleUnusableUri(const QString &uri, UnusableUriDetails &details) const
Returns true if the specified uri can potentially be handled by QGIS, if additional dependencies or b...
QString fileVectorFilters() const
Returns a file filter string for supported vector files.
QgsDataProvider * createProvider(const QString &providerKey, const QString &dataSource, const QgsDataProvider::ProviderOptions &options=QgsDataProvider::ProviderOptions(), Qgis::DataProviderReadFlags flags=Qgis::DataProviderReadFlags())
Creates a new instance of a provider.
QString fileRasterFilters() const
Returns a file filter string for supported raster files.
bool saveLayerMetadata(const QString &providerKey, const QString &uri, const QgsLayerMetadata &metadata, QString &errorMessage)
Saves metadata to the layer corresponding to the specified uri.
QString fileMeshFilters() const
Returns a file filter string for supported mesh files.
QString pluginList(bool asHtml=false) const
Returns list of provider plugins found.
bool shouldDeferUriForOtherProviders(const QString &uri, const QString &providerKey) const
Returns true if the provider with matching providerKey should defer handling of the specified uri to ...
bool deleteStyleById(const QString &providerKey, const QString &uri, const QString &styleId, QString &errCause)
Deletes a layer style defined by styleId.
QStringList providerList() const
Returns list of available providers by their keys.
Q_DECL_DEPRECATED Qgis::DataItemProviderCapabilities providerCapabilities(const QString &providerKey) const
Returns the provider capabilities.
QString fileMeshDatasetFilters() const
Returns a file filter string for supported mesh dataset files.
QString loadStoredStyle(const QString &providerKey, const QString &uri, QString &styleName, QString &errCause)
Loads a layer style from the provider storage, reporting its name.
QDir libraryDirectory() const
Returns the library directory where plugins are found.
QString relativeToAbsoluteUri(const QString &providerKey, const QString &uri, const QgsReadWriteContext &context) const
Converts relative path(s) to absolute path(s) in the given provider-specific URI.
QgsProviderMetadata * providerMetadata(const QString &providerKey) const
Returns metadata of the provider or nullptr if not found.
int listStyles(const QString &providerKey, const QString &uri, QStringList &ids, QStringList &names, QStringList &descriptions, QString &errCause)
Lists stored layer styles in the provider defined by providerKey and uri.
bool createDb(const QString &providerKey, const QString &dbPath, QString &errCause)
Creates database by the provider on the path.
bool saveStyle(const QString &providerKey, const QString &uri, const QString &qmlStyle, const QString &sldStyle, const QString &styleName, const QString &styleDescription, const QString &uiFileContent, bool useAsDefault, QString &errCause)
Saves a layer style to provider.
QSet< QString > providersForLayerType(Qgis::LayerType type) const
Returns a list of the provider keys for available providers which handle the specified layer type.
bool registerProvider(QgsProviderMetadata *providerMetadata)
register a new vector data provider from its providerMetadata
Q_DECL_DEPRECATED QFunctionPointer function(const QString &providerKey, const QString &functionName) const
Gets pointer to provider function.
QString directoryDrivers() const
Returns a string containing the available directory drivers.
bool registerUnusableUriHandler(UnusableUriHandlerInterface *handler)
Registers an unusable URI handler, used to handle unusable URIs which aren't handled by any registere...
QString filePointCloudFilters() const
Returns a file filter string for supported point clouds.
Base class for raster data providers.
A container for the context for various read/write operations on objects.
Allows creation of a multi-layer database-side transaction.
#define Q_NOWARN_DEPRECATED_POP
#define Q_NOWARN_DEPRECATED_PUSH
#define QgsDebugMsgLevel(str, level)
#define QgsDebugError(str)
void cleanupProviderFunction_t()
Setting options for creating vector data providers.