31#include "providers/gdal/qgsgdalprovider.h"
32#include "providers/ogr/qgsogrprovidermetadata.h"
33#include "providers/ogr/qgsogrprovider.h"
34#include "providers/meshmemory/qgsmeshmemorydataprovider.h"
42#include "providers/ept/qgseptprovider.h"
46#include "providers/copc/qgscopcprovider.h"
47#include "providers/vpc/qgsvirtualpointcloudprovider.h"
53#ifdef HAVE_STATIC_PROVIDERS
54#include "qgswmsprovider.h"
55#include "qgswcsprovider.h"
56#include "qgsdelimitedtextprovider.h"
57#include "qgsafsprovider.h"
58#include "qgsamsprovider.h"
60#include "qgsspatialiteprovider.h"
61#include "qgswfsprovider.h"
62#include "qgswfsprovidermetadata.h"
63#include "qgsoapifprovider.h"
64#include "qgsvirtuallayerprovider.h"
67#include "qgspostgresprovider.h"
74#include <QRegularExpression>
83 const QMutexLocker locker( &sMutex );
103 const QString &providerKey )
106 const QgsProviderRegistry::Providers::const_iterator i =
107 metaData.find( providerKey );
109 if ( i != metaData.end() )
115 for (
auto it = metaData.begin(); it != metaData.end(); ++it )
117 if ( providerKey.compare( it->first, Qt::CaseInsensitive ) == 0 )
124QgsProviderRegistry::QgsProviderRegistry(
const QString &pluginPath )
132 char **argv = qApp->argv();
133 QString appDir = argv[0];
134 int bin = appDir.findRev(
"/bin", -1,
false );
135 QString baseDir = appDir.left( bin );
136 QString mLibraryDirectory = baseDir +
"/lib";
140 mLibraryDirectory.setPath( pluginPath );
148 bool matchesUri(
const QString &uri )
const override
150 const QFileInfo fi( uri );
151 if ( fi.suffix().compare( QLatin1String(
"las" ), Qt::CaseInsensitive ) == 0 || fi.suffix().compare( QLatin1String(
"laz" ), Qt::CaseInsensitive ) == 0 )
160 QObject::tr(
"LAS and LAZ files cannot be opened by this QGIS install." ),
161 QList<Qgis::LayerType>() << Qgis::LayerType::PointCloud );
164 res.
detailedWarning = QObject::tr(
"The installer used to install this version of QGIS does "
165 "not include the PDAL library required for opening LAS and LAZ point clouds. Please "
166 "obtain one of the alternative installers from https://qgis.org which has point "
167 "cloud support enabled." );
169 res.
detailedWarning = QObject::tr(
"This QGIS build does not include the PDAL library dependency required for opening LAS or LAZ point clouds." );
176void QgsProviderRegistry::init()
181 mProviders[ QgsMemoryProvider::providerKey() ] =
new QgsMemoryProviderMetadata();
185 mProviders[ QgsMeshMemoryDataProvider::providerKey() ] =
new QgsMeshMemoryProviderMetadata();
189 mProviders[ QgsGdalProvider::providerKey() ] =
new QgsGdalProviderMetadata();
193 mProviders[ QgsOgrProvider::providerKey() ] =
new QgsOgrProviderMetadata();
198 mProviders[ vt->
key() ] = vt;
199 vt =
new QgsXyzVectorTileDataProviderMetadata();
200 mProviders[ vt->
key() ] = vt;
201 vt =
new QgsVtpkVectorTileDataProviderMetadata();
202 mProviders[ vt->
key() ] = vt;
203 vt =
new QgsArcGisVectorTileServiceDataProviderMetadata();
204 mProviders[ vt->
key() ] = vt;
205 vt =
new QgsMbTilesVectorTileDataProviderMetadata();
206 mProviders[ vt->
key() ] = vt;
212 mProviders[ pc->
key() ] = pc;
219 mProviders[ pc->
key() ] = pc;
224 mProviders[ pc->
key() ] = pc;
229#ifdef HAVE_STATIC_PROVIDERS
230 mProviders[ QgsWmsProvider::providerKey() ] =
new QgsWmsProviderMetadata();
231 mProviders[ QgsWcsProvider::providerKey() ] =
new QgsWcsProviderMetadata();
232 mProviders[ QgsDelimitedTextProvider::providerKey() ] =
new QgsDelimitedTextProviderMetadata();
233 mProviders[ QgsAfsProvider::providerKey() ] =
new QgsAfsProviderMetadata();
234 mProviders[ QgsAmsProvider::providerKey() ] =
new QgsAmsProviderMetadata();
235#ifdef HAVE_SPATIALITE
236 mProviders[ QgsSpatiaLiteProvider::providerKey() ] =
new QgsSpatiaLiteProviderMetadata();
237 mProviders[ QgsWFSProvider::providerKey() ] =
new QgsWfsProviderMetadata();
238 mProviders[ QgsOapifProvider::providerKey() ] =
new QgsOapifProviderMetadata();
239 mProviders[ QgsVirtualLayerProvider::providerKey() ] =
new QgsVirtualLayerProviderMetadata();
241#ifdef HAVE_POSTGRESQL
242 mProviders[ QgsPostgresProvider::providerKey() ] =
new QgsPostgresProviderMetadata();
247#ifdef HAVE_STATIC_PROVIDERS
252 mLibraryDirectory.setSorting( QDir::Name | QDir::IgnoreCase );
253 mLibraryDirectory.setFilter( QDir::Files | QDir::NoSymLinks );
255#if defined(Q_OS_WIN) || defined(__CYGWIN__)
256 mLibraryDirectory.setNameFilters( QStringList(
"*.dll" ) );
257#elif defined(ANDROID)
258 mLibraryDirectory.setNameFilters( QStringList(
"*provider_*.so" ) );
260 mLibraryDirectory.setNameFilters( QStringList( QStringLiteral(
"*.so" ) ) );
263 QgsDebugMsgLevel( QStringLiteral(
"Checking %1 for provider plugins" ).arg( mLibraryDirectory.path() ), 2 );
265 if ( mLibraryDirectory.count() == 0 )
267 QgsDebugError( QStringLiteral(
"No dynamic QGIS data provider plugins found in:\n%1\n" ).arg( mLibraryDirectory.path() ) );
271 const QString filePattern = getenv(
"QGIS_PROVIDER_FILE" );
272 QRegularExpression fileRegexp;
273 if ( !filePattern.isEmpty() )
275 fileRegexp.setPattern( filePattern );
278 typedef std::vector<QgsProviderMetadata *> *multiple_factory_function();
280 const auto constEntryInfoList = mLibraryDirectory.entryInfoList();
281 for (
const QFileInfo &fi : constEntryInfoList )
283 if ( !filePattern.isEmpty() )
285 if ( fi.fileName().indexOf( fileRegexp ) == -1 )
287 QgsDebugMsgLevel(
"provider " + fi.fileName() +
" skipped because doesn't match pattern " + filePattern, 2 );
293 if ( fi.fileName().contains( QStringLiteral(
"authmethod" ), Qt::CaseSensitivity::CaseInsensitive ) )
299 QLibrary myLib( fi.filePath() );
302 QgsDebugError( QStringLiteral(
"Checking %1: ...invalid (lib not loadable): %2" ).arg( myLib.fileName(), myLib.errorString() ) );
306 bool libraryLoaded {
false };
307 QFunctionPointer func = myLib.resolve( QStringLiteral(
"providerMetadataFactory" ).toLatin1().data() );
314 if ( findMetadata_( mProviders, meta->
key() ) )
316 QgsDebugError( QStringLiteral(
"Checking %1: ...invalid (key %2 already registered)" ).arg( myLib.fileName() ).arg( meta->
key() ) );
321 mProviders[meta->
key()] = meta;
322 libraryLoaded =
true;
327 QFunctionPointer multi_func = myLib.resolve( QStringLiteral(
"multipleProviderMetadataFactory" ).toLatin1().data() );
328 multiple_factory_function *multi_function =
reinterpret_cast< multiple_factory_function *
>(
cast_to_fptr( multi_func ) );
329 if ( multi_function )
331 std::vector<QgsProviderMetadata *> *metadatas = multi_function();
332 for (
const auto meta : *metadatas )
334 if ( findMetadata_( mProviders, meta->
key() ) )
336 QgsDebugError( QStringLiteral(
"Checking %1: ...invalid (key %2 already registered)" ).arg( myLib.fileName() ).arg( meta->
key() ) );
341 mProviders[meta->
key()] = meta;
342 libraryLoaded =
true;
348 if ( ! libraryLoaded )
350 QgsDebugMsgLevel( QStringLiteral(
"Checking %1: ...invalid (no providerMetadataFactory method)" ).arg( myLib.fileName() ), 2 );
357 QStringList pointCloudWildcards;
358 QStringList pointCloudFilters;
360 QStringList vectorTileWildcards;
361 QStringList vectorTileFilters;
364 for ( Providers::const_iterator it = mProviders.begin(); it != mProviders.end(); ++it )
366 const QString &key = it->first;
394 QgsDebugMsgLevel( QStringLiteral(
"Checking %1: ...loaded OK (%2 file mesh filters)" ).arg( key ).arg( mMeshFileFilters.split(
";;" ).count() ), 2 );
402 QgsDebugMsgLevel( QStringLiteral(
"Checking %1: ...loaded OK (%2 file dataset filters)" ).arg( key ).arg( mMeshDatasetFileFilters.split(
";;" ).count() ), 2 );
411#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
412 const QStringList filters =
filePointCloudFilters.split( QStringLiteral(
";;" ), QString::SkipEmptyParts );
414 const QStringList filters =
filePointCloudFilters.split( QStringLiteral(
";;" ), Qt::SkipEmptyParts );
416 for (
const QString &filter : filters )
418 pointCloudFilters.append( filter );
429#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
430 const QStringList filters =
fileVectorTileFilters.split( QStringLiteral(
";;" ), QString::SkipEmptyParts );
432 const QStringList filters =
fileVectorTileFilters.split( QStringLiteral(
";;" ), Qt::SkipEmptyParts );
434 for (
const QString &filter : filters )
436 vectorTileFilters.append( filter );
445 if ( !pointCloudFilters.empty() )
447 pointCloudFilters.insert( 0, QObject::tr(
"All Supported Files" ) + QStringLiteral(
" (%1)" ).arg( pointCloudWildcards.join(
' ' ) ) );
448 pointCloudFilters.insert( 1, QObject::tr(
"All Files" ) + QStringLiteral(
" (*.*)" ) );
449 mPointCloudFileFilters = pointCloudFilters.join( QLatin1String(
";;" ) );
452 if ( !vectorTileFilters.empty() )
454 vectorTileFilters.insert( 0, QObject::tr(
"All Supported Files" ) + QStringLiteral(
" (%1)" ).arg( vectorTileWildcards.join(
' ' ) ) );
455 vectorTileFilters.insert( 1, QObject::tr(
"All Files" ) + QStringLiteral(
" (*.*)" ) );
456 mVectorTileFileFilters = vectorTileFilters.join( QLatin1String(
";;" ) );
460 mDatabaseDrivers = QgsOgrProviderUtils::databaseDrivers();
463 mDirectoryDrivers = QgsOgrProviderUtils::directoryDrivers();
466 mProtocolDrivers = QgsOgrProviderUtils::protocolDrivers();
473void QgsProviderRegistry::clean()
476 if ( QgsProject::sProject )
479 Providers::const_iterator it = mProviders.begin();
481 while ( it != mProviders.end() )
484 it->second->cleanupProvider();
491bool QgsProviderRegistry::exists()
493 return static_cast< bool >( sInstance );
498 qDeleteAll( mUnusableUriHandlers );
501 if ( sInstance ==
this )
521 Providers::const_iterator it = mProviders.begin();
523 if ( mProviders.empty() )
524 return QObject::tr(
"No data provider plugins are available. No vector layers can be loaded" );
529 list += QLatin1String(
"<ol>" );
531 while ( it != mProviders.end() )
534 list += QLatin1String(
"<li>" );
536 list += it->second->description();
539 list += QLatin1String(
"<br></li>" );
547 list += QLatin1String(
"</ol>" );
554 mLibraryDirectory = path;
561 return mLibraryDirectory;
574 QgsDataProvider::ReadFlags flags )
591 const QList< QgsDataItemProvider * > itemProviders =
dataItemProviders( providerKey );
596 ret = ret | itemProvider->capabilities();
607 return QVariantMap();
642 bool overwrite, QMap<int, int> &oldToNewAttrIdxMap,
643 QString &errorMessage,
644 const QMap<QString, QVariant> *options )
648 return meta->
createEmptyLayer( uri, fields, wkbType, srs, overwrite, oldToNewAttrIdxMap, errorMessage, options );
651 errorMessage = QObject::tr(
"Unable to load %1 provider" ).arg( providerKey );
652 return Qgis::VectorExportResult::ErrorInvalidProvider;
659 const QStringList &createOptions )
674 return QList<QPair<QString, QString> >();
683 return QList<QgsDataItemProvider *>();
686int QgsProviderRegistry::listStyles(
const QString &providerKey,
const QString &uri, QStringList &ids, QStringList &names, QStringList &descriptions, QString &errCause )
692 res = meta->
listStyles( uri, ids, names, descriptions, errCause );
696 errCause = QObject::tr(
"Unable to load %1 provider" ).arg( providerKey );
707 return meta->
styleExists( uri, styleId, errorCause );
711 errorCause = QObject::tr(
"Unable to load %1 provider" ).arg( providerKey );
726 errCause = QObject::tr(
"Unable to load %1 provider" ).arg( providerKey );
733 const bool ret(
false );
740 errCause = QObject::tr(
"Unable to load %1 provider" ).arg( providerKey );
746 const QString &sldStyle,
const QString &styleName,
const QString &styleDescription,
747 const QString &uiFileContent,
bool useAsDefault, QString &errCause )
752 ret = meta->
saveStyle( uri, qmlStyle, sldStyle, styleName, styleDescription,
753 uiFileContent, useAsDefault, errCause );
756 errCause = QObject::tr(
"Unable to load %1 provider" ).arg( providerKey );
769 errCause = QObject::tr(
"Unable to load %1 provider" ).arg( providerKey );
782 errCause = QObject::tr(
"Unable to load %1 provider" ).arg( providerKey );
789 errorMessage.clear();
802 return meta->
createDb( dbPath, errCause );
805 errCause = QStringLiteral(
"Resolving createDb(...) failed" );
822 Q_UNUSED( providerKey );
825 Q_UNUSED( widgetMode );
826 QgsDebugError(
"deprecated call - use QgsGui::sourceSelectProviderRegistry()->createDataSourceWidget() instead" );
831 QString
const &functionName )
const
834 const QString lib =
library( providerKey );
839 QLibrary myLib( lib );
845 return myLib.resolve( functionName.toLatin1().data() );
849 QgsDebugError(
"Cannot load library: " + myLib.errorString() );
857 const QString lib =
library( providerKey );
862 std::unique_ptr< QLibrary > myLib(
new QLibrary( lib ) );
867 return myLib.release();
869 QgsDebugError(
"Cannot load library: " + myLib->errorString() );
876 QgsDebugError(
"deprecated - use QgsGui::providerGuiRegistry() instead." );
895 QgsDebugMsgLevel( QStringLiteral(
"Trying to register a null metadata provider!" ), 2 );
902 return mVectorFileFilters;
907 return mRasterFileFilters;
912 return mMeshFileFilters;
917 return mMeshDatasetFileFilters;
922 return mPointCloudFileFilters;
927 return mVectorTileFileFilters;
932 return mDatabaseDrivers;
937 return mDirectoryDrivers;
942 return mProtocolDrivers;
948 for ( Providers::const_iterator it = mProviders.begin(); it != mProviders.end(); ++it )
950 lst.append( it->first );
957 return findMetadata_( mProviders, providerKey );
963 for ( Providers::const_iterator it = mProviders.begin(); it != mProviders.end(); ++it )
965 if ( it->second->supportedLayerTypes().contains( type ) )
966 lst.insert( it->first );
973 QList< QgsProviderRegistry::ProviderCandidateDetails > res;
975 for (
auto it = mProviders.begin(); it != mProviders.end(); ++it )
980 const int thisProviderPriority = it->second->priorityForUri( uri );
981 if ( thisProviderPriority == 0 )
984 if ( thisProviderPriority > maxPriority )
987 maxPriority = thisProviderPriority;
989 if ( thisProviderPriority == maxPriority )
999 mUnusableUriHandlers << handler;
1007 if ( handler->matchesUri( uri ) )
1009 details = handler->details( uri );
1019 if ( providers.empty() )
1024 if ( provider.metadata()->key() == providerKey )
1032 for (
auto it = mProviders.begin(); it != mProviders.end(); ++it )
1034 if ( it->second->uriIsBlocklisted( uri ) )
1046 QList<QgsProviderSublayerDetails> res;
1047 for (
auto it = mProviders.begin(); it != mProviders.end(); ++it )
1053 res.append( it->second->querySublayers( uri, flags, feedback ) );
@ VectorTile
Vector tile layers (since QGIS 3.32)
VectorExportResult
Vector layer export result codes.
DataType
Raster data types.
LayerType
Types of layers that can be added to a map.
WkbType
The WKB type describes the number of dimensions a geometry has.
This class represents a coordinate reference system (CRS).
This is the interface for those who want to 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 SIP_HOLDGIL
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 filt...
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::MessageLevel::Warning, bool notifyUser=true)
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.
QgsDataProvider * createProvider(const QString &providerKey, const QString &dataSource, const QgsDataProvider::ProviderOptions &options=QgsDataProvider::ProviderOptions(), QgsDataProvider::ReadFlags flags=QgsDataProvider::ReadFlags())
Creates a new instance of a provider.
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.
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.
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 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.
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)
Creates new empty vector layer.
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.
QString fileRasterFilters() const
Returns a file filter string for supported raster files.
QString fileMeshFilters() const
Returns a file filter string for supported mesh files.
QString pluginList(bool asHtml=false) const
Returns list of provider plugins found.
Q_DECL_DEPRECATED int providerCapabilities(const QString &providerKey) const
Returns the provider capabilities.
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.
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 saveLayerMetadata(const QString &providerKey, const QString &uri, const QgsLayerMetadata &metadata, QString &errorMessage) SIP_THROW(QgsNotSupportedException)
Saves metadata to the layer corresponding to the specified uri.
bool registerUnusableUriHandler(UnusableUriHandlerInterface *handler)
Registers an unusable URI handler, used to handle unusable URIs which aren't handled by any registere...
Q_DECL_DEPRECATED QWidget * createSelectionWidget(const QString &providerKey, QWidget *parent=nullptr, Qt::WindowFlags fl=Qt::WindowFlags(), QgsProviderRegistry::WidgetMode widgetMode=QgsProviderRegistry::WidgetMode::None)
Returns a new widget for selecting layers from a provider.
QString filePointCloudFilters() const
Returns a file filter string for supported point clouds.
Base class for raster data providers.
The class is used as a container of context for various read/write operations on other objects.
Scoped object for logging of the runtime for a single operation or group of operations.
This class allows including a set of layers in a database-side transaction, provided the layer data p...
#define Q_NOWARN_DEPRECATED_POP
#define Q_NOWARN_DEPRECATED_PUSH
#define QgsDebugMsgLevel(str, level)
#define QgsDebugError(str)
void cleanupProviderFunction_t()
const QgsCoordinateReferenceSystem & crs
Setting options for creating vector data providers.