QGIS API Documentation 3.29.0-Master (006c3c0232)
qgsapplication.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsapplication.h - Accessors for application-wide data
3 --------------------------------------
4 Date : 02-Jan-2006
5 Copyright : (C) 2006 by Tom Elwertowski
6 Email : telwertowski at users dot sourceforge dot net
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15#ifndef QGSAPPLICATION_H
16#define QGSAPPLICATION_H
17
18#include "qgis_core.h"
19#include <QApplication>
20#include <QEvent>
21#include <QStringList>
22#include <QColor>
23
24#include <memory>
25#include "qgis_sip.h"
26#include "qgsconfig.h"
29
35class QgsTaskManager;
44class QgsSvgCache;
45class QgsImageCache;
46class QgsSourceCache;
54class QgsMessageLog;
56class QgsAnnotationRegistry;
57class QgsUserProfile;
61class QgsAuthManager;
64class QTranslator;
67class QgsStyleModel;
77class QgsFontManager;
78
93class CORE_EXPORT QgsApplication : public QApplication
94{
95
96#ifdef SIP_RUN
97 % TypeCode
98 // Convert a Python argv list to a conventional C argc count and argv array.
99 static char **qtgui_ArgvToC( PyObject *argvlist, int &argc )
100 {
101 char **argv;
102
103 argc = PyList_GET_SIZE( argvlist );
104
105 // Allocate space for two copies of the argument pointers, plus the
106 // terminating NULL.
107 if ( ( argv = ( char ** )sipMalloc( 2 * ( argc + 1 ) * sizeof( char * ) ) ) == NULL )
108 return NULL;
109
110 // Convert the list.
111 for ( int a = 0; a < argc; ++a )
112 {
113 char *arg;
114 // Get the argument and allocate memory for it.
115 if ( ( arg = PyBytes_AsString( PyList_GET_ITEM( argvlist, a ) ) ) == NULL ||
116 ( argv[a] = ( char * )sipMalloc( strlen( arg ) + 1 ) ) == NULL )
117 return NULL;
118 // Copy the argument and save a pointer to it.
119 strcpy( argv[a], arg );
120 argv[a + argc + 1] = argv[a];
121 }
122
123 argv[argc + argc + 1] = argv[argc] = NULL;
124
125 return argv;
126 }
127
128 // Remove arguments from the Python argv list that have been removed from the
129 // C argv array.
130 static void qtgui_UpdatePyArgv( PyObject *argvlist, int argc, char **argv )
131 {
132 for ( int a = 0, na = 0; a < argc; ++a )
133 {
134 // See if it was removed.
135 if ( argv[na] == argv[a + argc + 1] )
136 ++na;
137 else
138 PyList_SetSlice( argvlist, na, na + 1, NULL );
139 }
140 }
141 % End
142#endif
143
144 Q_OBJECT
145
146 public:
147
157 {
160 };
161
162 static const char *QGIS_ORGANIZATION_NAME;
163 static const char *QGIS_ORGANIZATION_DOMAIN;
164 static const char *QGIS_APPLICATION_NAME;
165#ifndef SIP_RUN
166
176 QgsApplication( int &argc, char **argv, bool GUIenabled, const QString &profileFolder = QString(), const QString &platformName = "external" );
177#else
178
187 QgsApplication( SIP_PYLIST argv, bool GUIenabled, QString profileFolder = QString(), QString platformName = "external" ) / PostHook = __pyQtQAppHook__ / [( int &argc, char **argv, bool GUIenabled, const QString &profileFolder = QString(), const QString &platformName = "desktop" )];
188 % MethodCode
189 // The Python interface is a list of argument strings that is modified.
190
191 int argc;
192 char **argv;
193
194 // Convert the list.
195 if ( ( argv = qtgui_ArgvToC( a0, argc ) ) == NULL )
196 sipIsErr = 1;
197 else
198 {
199 // Create it now the arguments are right.
200 static int nargc = argc;
201
202 sipCpp = new sipQgsApplication( nargc, argv, a1, *a2, *a3 );
203
204 // Now modify the original list.
205 qtgui_UpdatePyArgv( a0, argc, argv );
206 }
207 % End
208#endif
209
210 ~QgsApplication() override;
211
217 static QgsApplication *instance();
218
226 static void init( QString profileFolder = QString() ) SIP_SKIP;
227
229 bool event( QEvent *event ) override;
230
232 bool notify( QObject *receiver, QEvent *event ) override;
233
235 static void setFileOpenEventReceiver( QObject *receiver );
236
247 static void setThemeName( const QString &themeName );
248
253 static QString resolvePkgPath();
254
262 static QString themeName();
263
271 static void setUITheme( const QString &themeName );
272
279 static QHash<QString, QString> uiThemes();
280
282 static QString authorsFilePath();
283
289 static QString contributorsFilePath();
290
297 static QString developersMapFilePath();
298
300 static QString sponsorsFilePath();
301
303 static QString donorsFilePath();
304
306 static QString serverResourcesPath();
307
311 static QString translatorsFilePath();
312
316 static QString licenceFilePath();
317
319 static QString i18nPath();
320
325 static QString metadataPath();
326
328 static QString qgisMasterDatabaseFilePath();
329
331 static QString qgisSettingsDirPath();
332
334 static QString qgisUserDatabaseFilePath();
335
337 static QString qgisAuthDatabaseFilePath();
338
340 static QString splashPath();
341
343 static QString iconsPath();
344
346 static QString srsDatabaseFilePath();
347
353 static void setSvgPaths( const QStringList &svgPaths );
354
356 static QStringList svgPaths();
357
362 static QStringList layoutTemplatePaths();
363
365 static QMap<QString, QString> systemEnvVars();
366
368 static QString prefixPath();
369
371 static QString pluginPath();
372
374 static QString pkgDataPath();
375
377 static QString activeThemePath();
378
380 static QString defaultThemePath();
381
386 static QString iconPath( const QString &iconFile );
387
395 static QIcon getThemeIcon( const QString &name, const QColor &fillColor = QColor(), const QColor &strokeColor = QColor() );
396
402 {
410 };
411
418 static QCursor getThemeCursor( Cursor cursor );
419
428 static QPixmap getThemePixmap( const QString &name, const QColor &foreColor = QColor(), const QColor &backColor = QColor(), int size = 16 );
429
431 static QString userStylePath();
432
438 static QRegularExpression shortNameRegularExpression();
439
445 static QString userLoginName();
446
452 static QString userFullName();
453
459 static QString osName();
460
468 static int systemMemorySizeMb();
469
475 static QString platform();
476
481 static QString locale();
482
489 static void setLocale( const QLocale &locale );
490
492 static QString userThemesFolder();
493
495 static QString defaultStylePath();
496
498 static QString defaultThemesFolder();
499
501 static QString libraryPath();
502
504 static QString libexecPath();
505
512 static QString qmlImportPath();
513
515 static void setPrefixPath( const QString &prefixPath, bool useDefaultPaths = false );
516
518 static void setPluginPath( const QString &pluginPath );
519
521 static void setPkgDataPath( const QString &pkgDataPath );
522
524 static void setDefaultSvgPaths( const QStringList &pathList );
525
527 static void setAuthDatabaseDirPath( const QString &authDbDirPath );
528
530 static void initQgis();
531
533 static bool createDatabase( QString *errorMessage = nullptr );
534
536 static bool createThemeFolder();
537
539 static void exitQgis();
540
542 static QString appIconPath();
543
546 {
547 XDR = 0, // network, or big-endian, byte order
548 NDR = 1 // little-endian byte order
549 };
550
552 static endian_t endian();
553
568 static QString reportStyleSheet( QgsApplication::StyleSheetType styleSheetType = QgsApplication::StyleSheetType::Qt );
569
574 static QString showSettings();
575
583 static void registerOgrDrivers();
584
586 static QString absolutePathToRelativePath( const QString &apath, const QString &targetPath );
588 static QString relativePathToAbsolutePath( const QString &rpath, const QString &targetPath );
589
591 static bool isRunningFromBuildDir() { return ABISYM( mRunningFromBuildDir ); }
592#if defined(_MSC_VER) && !defined(USING_NMAKE) && !defined(USING_NINJA)
593 static QString cfgIntDir() SIP_SKIP;
594#endif
596 static QString buildSourcePath();
598 static QString buildOutputPath();
599
605 static void skipGdalDriver( const QString &driver );
606
612 static void restoreGdalDriver( const QString &driver );
613
618 static QStringList skippedGdalDrivers();
619
626 static void applyGdalSkippedDrivers();
627
632 static void registerGdalDriversFromSettings();
633
640 static QStringList deferredSkippedGdalDrivers();
641
648 static void setSkippedGdalDrivers( const QStringList &skippedGdalDrivers,
649 const QStringList &deferredSkippedGdalDrivers );
650
655 static int maxThreads();
656
662 static void setMaxThreads( int maxThreads );
663
669 static QgsTaskManager *taskManager();
670
675 static QgsSettingsRegistryCore *settingsRegistryCore() SIP_KEEPREFERENCE;
676
681 static QgsColorSchemeRegistry *colorSchemeRegistry() SIP_KEEPREFERENCE;
682
687 static QgsPaintEffectRegistry *paintEffectRegistry() SIP_KEEPREFERENCE;
688
693 static QgsRendererRegistry *rendererRegistry() SIP_KEEPREFERENCE;
694
700 static QgsRasterRendererRegistry *rasterRendererRegistry() SIP_SKIP;
701
706 static QgsPointCloudRendererRegistry *pointCloudRendererRegistry() SIP_KEEPREFERENCE;
707
713 static QgsDataItemProviderRegistry *dataItemProviderRegistry() SIP_KEEPREFERENCE;
714
721 static QgsCoordinateReferenceSystemRegistry *coordinateReferenceSystemRegistry() SIP_KEEPREFERENCE;
722
730 static QgsSvgCache *svgCache();
731
738 static QgsImageCache *imageCache();
739
745 static QgsSourceCache *sourceCache();
746
751 static QgsNetworkContentFetcherRegistry *networkContentFetcherRegistry() SIP_KEEPREFERENCE;
752
757 static QgsValidityCheckRegistry *validityCheckRegistry() SIP_KEEPREFERENCE;
758
763 static QgsSymbolLayerRegistry *symbolLayerRegistry() SIP_KEEPREFERENCE;
764
769 static QgsCalloutRegistry *calloutRegistry() SIP_KEEPREFERENCE;
770
775 static QgsLayoutItemRegistry *layoutItemRegistry() SIP_KEEPREFERENCE;
776
781 static QgsAnnotationItemRegistry *annotationItemRegistry() SIP_KEEPREFERENCE;
782
787 static QgsGpsConnectionRegistry *gpsConnectionRegistry() SIP_KEEPREFERENCE;
788
793 static QgsBabelFormatRegistry *gpsBabelFormatRegistry() SIP_KEEPREFERENCE;
794
799 static QgsPluginLayerRegistry *pluginLayerRegistry() SIP_KEEPREFERENCE;
800
805 static QgsClassificationMethodRegistry *classificationMethodRegistry() SIP_KEEPREFERENCE;
806
811 static QgsBookmarkManager *bookmarkManager();
812
818 static QgsTileDownloadManager *tileDownloadManager() SIP_SKIP;
819
824 static QgsRecentStyleHandler *recentStyleHandler() SIP_KEEPREFERENCE;
825
831 static QgsDatabaseQueryLog *databaseQueryLog() SIP_KEEPREFERENCE;
832
840 static QgsStyleModel *defaultStyleModel();
841
847 static QgsFontManager *fontManager() SIP_KEEPREFERENCE;
848
853 static QgsMessageLog *messageLog();
854
861 static QgsAuthManager *authManager();
862
868 static QgsProcessingRegistry *processingRegistry();
869
874 static QgsPageSizeRegistry *pageSizeRegistry() SIP_KEEPREFERENCE;
875
881 static QgsAnnotationRegistry *annotationRegistry() SIP_SKIP;
882
888 static QgsActionScopeRegistry *actionScopeRegistry() SIP_KEEPREFERENCE;
889
894 static QgsConnectionRegistry *connectionRegistry();
895
900 static QgsRuntimeProfiler *profiler();
901
907 static QgsNumericFormatRegistry *numericFormatRegistry() SIP_KEEPREFERENCE;
908
912 static QgsFieldFormatterRegistry *fieldFormatterRegistry() SIP_KEEPREFERENCE;
913
918 static Qgs3DRendererRegistry *renderer3DRegistry() SIP_KEEPREFERENCE;
919
924 static Qgs3DSymbolRegistry *symbol3DRegistry() SIP_KEEPREFERENCE;
925
931 static QgsScaleBarRendererRegistry *scaleBarRendererRegistry() SIP_KEEPREFERENCE;
932
937 static QgsProjectStorageRegistry *projectStorageRegistry() SIP_KEEPREFERENCE;
938
943 static QgsLayerMetadataProviderRegistry *layerMetadataProviderRegistry() SIP_KEEPREFERENCE;
944
949 static QgsExternalStorageRegistry *externalStorageRegistry() SIP_KEEPREFERENCE;
950
958 static QgsLocalizedDataPathRegistry *localizedDataPathRegistry() SIP_KEEPREFERENCE;
959
968 static QString nullRepresentation();
969
973 static void setNullRepresentation( const QString &nullRepresentation );
974
982 static QVariantMap customVariables();
983
991 static void setCustomVariables( const QVariantMap &customVariables );
992
998 static void setCustomVariable( const QString &name, const QVariant &value );
999
1009 static int scaleIconSize( int standardSize, bool applyDevicePixelRatio = false );
1010
1019 int maxConcurrentConnectionsPerPool() const;
1020
1026 static void setTranslation( const QString &translation );
1027
1033 QString translation() const;
1034
1040 void collectTranslatableObjects( QgsTranslationContext *translationContext );
1041
1042#ifndef SIP_RUN
1044 static const inline QgsSettingsEntryString settingsLocaleUserLocale = QgsSettingsEntryString( QStringLiteral( "userLocale" ), QgsSettings::Prefix::LOCALE, QString() );
1046 static const inline QgsSettingsEntryBool settingsLocaleOverrideFlag = QgsSettingsEntryBool( QStringLiteral( "overrideFlag" ), QgsSettings::Prefix::LOCALE, false );
1048 static const inline QgsSettingsEntryString settingsLocaleGlobalLocale = QgsSettingsEntryString( QStringLiteral( "globalLocale" ), QgsSettings::Prefix::LOCALE, QString() );
1050 static const inline QgsSettingsEntryBool settingsLocaleShowGroupSeparator = QgsSettingsEntryBool( QStringLiteral( "showGroupSeparator" ), QgsSettings::Prefix::LOCALE, false );
1052 static const inline QgsSettingsEntryStringList settingsSearchPathsForSVG = QgsSettingsEntryStringList( QStringLiteral( "searchPathsForSVG" ), QgsSettings::Prefix::SVG, QStringList() );
1053#endif
1054
1055#ifdef SIP_RUN
1056 SIP_IF_FEATURE( ANDROID )
1057 //dummy method to workaround sip generation issue
1058 bool x11EventFilter( XEvent *event );
1059 SIP_END
1060#endif
1061
1062 signals:
1064 void preNotify( QObject *receiver, QEvent *event, bool *done ) SIP_SKIP;
1065
1071
1072
1077
1085
1086
1093
1094
1095 private:
1096
1097 static void copyPath( const QString &src, const QString &dst );
1098 static QObject *ABISYM( mFileOpenEventReceiver );
1099
1100 static bool ABISYM( mInitialized );
1101
1103 static bool ABISYM( mRunningFromBuildDir );
1104
1108 static int ABISYM( sMaxThreads );
1109
1110 QMap<QString, QIcon> mIconCache;
1111 QMap<Cursor, QCursor> mCursorCache;
1112
1113 QTranslator *mQgisTranslator = nullptr;
1114 QTranslator *mQtTranslator = nullptr;
1115 QTranslator *mQtBaseTranslator = nullptr;
1116
1117 QgsDataItemProviderRegistry *mDataItemProviderRegistry = nullptr;
1118 QgsAuthManager *mAuthManager = nullptr;
1119
1120 struct ApplicationMembers
1121 {
1122 QgsSettingsRegistryCore *mSettingsRegistryCore = nullptr;
1123 QgsCoordinateReferenceSystemRegistry *mCrsRegistry = nullptr;
1124 Qgs3DRendererRegistry *m3DRendererRegistry = nullptr;
1125 Qgs3DSymbolRegistry *m3DSymbolRegistry = nullptr;
1126 QgsActionScopeRegistry *mActionScopeRegistry = nullptr;
1127 QgsAnnotationRegistry *mAnnotationRegistry = nullptr;
1128 QgsColorSchemeRegistry *mColorSchemeRegistry = nullptr;
1129 QgsLocalizedDataPathRegistry *mLocalizedDataPathRegistry = nullptr;
1130 QgsNumericFormatRegistry *mNumericFormatRegistry = nullptr;
1131 QgsFieldFormatterRegistry *mFieldFormatterRegistry = nullptr;
1132 QgsGpsConnectionRegistry *mGpsConnectionRegistry = nullptr;
1133 QgsBabelFormatRegistry *mGpsBabelFormatRegistry = nullptr;
1134 QgsNetworkContentFetcherRegistry *mNetworkContentFetcherRegistry = nullptr;
1135 QgsScaleBarRendererRegistry *mScaleBarRendererRegistry = nullptr;
1136 QgsValidityCheckRegistry *mValidityCheckRegistry = nullptr;
1137 QgsMessageLog *mMessageLog = nullptr;
1138 QgsPaintEffectRegistry *mPaintEffectRegistry = nullptr;
1139 QgsPluginLayerRegistry *mPluginLayerRegistry = nullptr;
1140 QgsClassificationMethodRegistry *mClassificationMethodRegistry = nullptr;
1141 QgsProcessingRegistry *mProcessingRegistry = nullptr;
1142 QgsConnectionRegistry *mConnectionRegistry = nullptr;
1143 QgsProjectStorageRegistry *mProjectStorageRegistry = nullptr;
1144 QgsLayerMetadataProviderRegistry *mLayerMetadataProviderRegistry = nullptr;
1145 QgsExternalStorageRegistry *mExternalStorageRegistry = nullptr;
1146 QgsPageSizeRegistry *mPageSizeRegistry = nullptr;
1147 QgsRasterRendererRegistry *mRasterRendererRegistry = nullptr;
1148 QgsRendererRegistry *mRendererRegistry = nullptr;
1149 QgsPointCloudRendererRegistry *mPointCloudRendererRegistry = nullptr;
1150 QgsSvgCache *mSvgCache = nullptr;
1151 QgsImageCache *mImageCache = nullptr;
1152 QgsSourceCache *mSourceCache = nullptr;
1153 QgsSymbolLayerRegistry *mSymbolLayerRegistry = nullptr;
1154 QgsCalloutRegistry *mCalloutRegistry = nullptr;
1155 QgsTaskManager *mTaskManager = nullptr;
1156 QgsLayoutItemRegistry *mLayoutItemRegistry = nullptr;
1157 QgsAnnotationItemRegistry *mAnnotationItemRegistry = nullptr;
1158 QgsUserProfileManager *mUserConfigManager = nullptr;
1159 QgsBookmarkManager *mBookmarkManager = nullptr;
1160 QgsTileDownloadManager *mTileDownloadManager = nullptr;
1161 QgsStyleModel *mStyleModel = nullptr;
1162 QgsRecentStyleHandler *mRecentStyleHandler = nullptr;
1163 QgsDatabaseQueryLog *mQueryLogger = nullptr;
1164 QgsFontManager *mFontManager;
1165 QString mNullRepresentation;
1166 QStringList mSvgPathCache;
1167 bool mSvgPathCacheValid = false;
1168
1169 ApplicationMembers();
1170 ~ApplicationMembers();
1171 };
1172
1173 // Applications members which belong to an instance of QgsApplication
1174 ApplicationMembers *mApplicationMembers = nullptr;
1175 // ... but in case QgsApplication is never instantiated (eg with custom designer widgets), we fall back to static members
1176 static ApplicationMembers *sApplicationMembers;
1177
1178 static QgsAuthManager *sAuthManager;
1179
1180 static ApplicationMembers *members();
1181
1182 static void invalidateCaches();
1183
1184 friend class TestQgsApplication;
1185};
1186
1187// clazy:excludeall=qstring-allocations
1188
1189#endif
Keeps track of available 3D renderers.
Registry of available 3D symbol classes.
The action scope registry is an application wide registry that contains a list of available action sc...
Registry of available annotation item types.
Extends QApplication to provide access to QGIS specific resources such as theme paths,...
endian_t
Constants for endian-ness.
void customVariablesChanged()
Emitted whenever a custom global variable changes.
StyleSheetType
The StyleSheetType enum represents the stylesheet type that a widget supports.
@ WebBrowser
StyleSheet for Qt GUI widgets (based on QLabel or QTextBrowser), supports basic CSS and Qt extensions...
static const char * QGIS_APPLICATION_NAME
static const char * QGIS_ORGANIZATION_DOMAIN
void preNotify(QObject *receiver, QEvent *event, bool *done)
void localeChanged()
Emitted when project locale has been changed.
static const char * QGIS_ORGANIZATION_NAME
Cursor
The Cursor enum defines constants for QGIS custom cursors.
@ ZoomOut
Zoom out.
@ CrossHair
Precisely identify a point on the canvas.
@ Identify
Identify: obtain information about the object.
@ Select
Select a rectangle.
@ CapturePoint
Select and capture a point or a feature.
@ Sampler
Color/Value picker.
@ ZoomIn
Zoom in.
void requestForTranslatableObjects(QgsTranslationContext *translationContext)
Emitted when project strings which require translation are being collected for inclusion in a ....
void nullRepresentationChanged()
This string is used to represent the value NULL throughout QGIS.
static bool isRunningFromBuildDir()
Indicates whether running from build directory (not installed)
Singleton offering an interface to manage the authentication configuration database and to utilize co...
A registry for QgsAbstractBabelFormat GPSBabel formats.
Manages storage of a set of bookmarks.
Registry of available callout classes.
This class manages all known classification methods.
Registry of color schemes.
A registry for saved data provider connections, allowing retrieval of saved connections by name and p...
A registry for known coordinate reference system (CRS) definitions, including any user-defined CRSes.
This class keeps a list of data item providers that may add items to the browser tree.
Handles logging of database queries.
Registry of external storage backends used by QgsExternalResourceWidget.
The QgsFieldFormatterRegistry manages registered classes of QgsFieldFormatter.
Manages available fonts and font installation for a QGIS instance.
A class to register / unregister existing GPS connections such that the information is available to a...
A cache for images derived from raster files.
Registry of layer metadata provider backends.
Registry of available layout item types.
A registry class to hold localized data paths which can be used for basemaps, logos,...
Interface for logging messages from QGIS in GUI independent way.
Definition: qgsmessagelog.h:40
Registry for temporary fetched files.
The QgsNumericFormatRegistry manages registered classes of QgsNumericFormat.
A registry for known page sizes.
Registry of available paint effects.
A registry of plugin layers types.
Registry of 2D renderers for point clouds.
Registry for various processing components, including providers, algorithms and various parameters an...
Registry of storage backends that QgsProject may use.
Registry for raster renderers.
Handles and tracks style items recently used in the QGIS GUI.
Registry of renderers.
Provides a method of recording run time profiles of operations, allowing easy recording of their over...
The QgsScaleBarRendererRegistry manages registered scalebar renderers.
A boolean settings entry.
A string list settings entry.
A string settings entry.
QgsSettingsRegistryCore is used for settings introspection and collects all QgsSettingsEntry instance...
static const char * SVG
Definition: qgssettings.h:105
static const char * LOCALE
Definition: qgssettings.h:97
A cache for source strings that returns a local file path containing the source content.
A QAbstractItemModel subclass for showing symbol and color ramp entities contained within a QgsStyle ...
A cache for images / pictures derived from SVG files.
Definition: qgssvgcache.h:123
Registry of available symbol layer classes.
Task manager for managing a set of long-running QgsTask tasks.
Tile download manager handles downloads of map tiles for the purpose of map rendering.
Used for the collecting of strings from projects for translation and creation of ts files.
User profile manager is used to manager list, and manage user profiles on the users machine.
User profile contains information about the user profile folders on the machine.
This class keeps a list of QgsAbstractValidityCheck checks which can be used when performing validity...
int scaleIconSize(int standardSize)
Scales an icon size to compensate for display pixel density, making the icon size hi-dpi friendly,...
#define SIP_KEEPREFERENCE
Definition: qgis_sip.h:86
#define SIP_SKIP
Definition: qgis_sip.h:126
#define SIP_IF_FEATURE(feature)
Definition: qgis_sip.h:176
#define SIP_END
Definition: qgis_sip.h:203
QObject * ABISYM(QgsApplication::mFileOpenEventReceiver)