QGIS API Documentation  3.22.4-Białowieża (ce8e65e95e)
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"
27 #include "qgssettingsentry.h"
28 #include "qgstranslationcontext.h"
29 
34 class QgsRuntimeProfiler;
35 class QgsTaskManager;
43 class QgsSvgCache;
44 class QgsImageCache;
45 class QgsSourceCache;
53 class QgsMessageLog;
55 class QgsAnnotationRegistry;
56 class QgsUserProfile;
60 class QgsAuthManager;
63 class QTranslator;
64 class QgsCalloutRegistry;
65 class QgsBookmarkManager;
66 class QgsStyleModel;
75 
90 class CORE_EXPORT QgsApplication : public QApplication
91 {
92 
93 #ifdef SIP_RUN
94  % TypeCode
95  // Convert a Python argv list to a conventional C argc count and argv array.
96  static char **qtgui_ArgvToC( PyObject *argvlist, int &argc )
97  {
98  char **argv;
99 
100  argc = PyList_GET_SIZE( argvlist );
101 
102  // Allocate space for two copies of the argument pointers, plus the
103  // terminating NULL.
104  if ( ( argv = ( char ** )sipMalloc( 2 * ( argc + 1 ) * sizeof( char * ) ) ) == NULL )
105  return NULL;
106 
107  // Convert the list.
108  for ( int a = 0; a < argc; ++a )
109  {
110  char *arg;
111  // Get the argument and allocate memory for it.
112  if ( ( arg = PyBytes_AsString( PyList_GET_ITEM( argvlist, a ) ) ) == NULL ||
113  ( argv[a] = ( char * )sipMalloc( strlen( arg ) + 1 ) ) == NULL )
114  return NULL;
115  // Copy the argument and save a pointer to it.
116  strcpy( argv[a], arg );
117  argv[a + argc + 1] = argv[a];
118  }
119 
120  argv[argc + argc + 1] = argv[argc] = NULL;
121 
122  return argv;
123  }
124 
125  // Remove arguments from the Python argv list that have been removed from the
126  // C argv array.
127  static void qtgui_UpdatePyArgv( PyObject *argvlist, int argc, char **argv )
128  {
129  for ( int a = 0, na = 0; a < argc; ++a )
130  {
131  // See if it was removed.
132  if ( argv[na] == argv[a + argc + 1] )
133  ++na;
134  else
135  PyList_SetSlice( argvlist, na, na + 1, NULL );
136  }
137  }
138  % End
139 #endif
140 
141  Q_OBJECT
142 
143  public:
144 
154  {
155  Qt,
157  };
158 
159  static const char *QGIS_ORGANIZATION_NAME;
160  static const char *QGIS_ORGANIZATION_DOMAIN;
161  static const char *QGIS_APPLICATION_NAME;
162 #ifndef SIP_RUN
163 
173  QgsApplication( int &argc, char **argv, bool GUIenabled, const QString &profileFolder = QString(), const QString &platformName = "external" );
174 #else
175 
184  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" )];
185  % MethodCode
186  // The Python interface is a list of argument strings that is modified.
187 
188  int argc;
189  char **argv;
190 
191  // Convert the list.
192  if ( ( argv = qtgui_ArgvToC( a0, argc ) ) == NULL )
193  sipIsErr = 1;
194  else
195  {
196  // Create it now the arguments are right.
197  static int nargc = argc;
198 
199  sipCpp = new sipQgsApplication( nargc, argv, a1, *a2, *a3 );
200 
201  // Now modify the original list.
202  qtgui_UpdatePyArgv( a0, argc, argv );
203  }
204  % End
205 #endif
206 
207  ~QgsApplication() override;
208 
214  static QgsApplication *instance();
215 
223  static void init( QString profileFolder = QString() ) SIP_SKIP;
224 
226  bool event( QEvent *event ) override;
227 
229  bool notify( QObject *receiver, QEvent *event ) override;
230 
232  static void setFileOpenEventReceiver( QObject *receiver );
233 
244  static void setThemeName( const QString &themeName );
245 
250  static QString resolvePkgPath();
251 
259  static QString themeName();
260 
268  static void setUITheme( const QString &themeName );
269 
276  static QHash<QString, QString> uiThemes();
277 
279  static QString authorsFilePath();
280 
286  static QString contributorsFilePath();
287 
294  static QString developersMapFilePath();
295 
297  static QString sponsorsFilePath();
298 
300  static QString donorsFilePath();
301 
303  static QString serverResourcesPath();
304 
308  static QString translatorsFilePath();
309 
313  static QString licenceFilePath();
314 
316  static QString i18nPath();
317 
322  static QString metadataPath();
323 
325  static QString qgisMasterDatabaseFilePath();
326 
328  static QString qgisSettingsDirPath();
329 
331  static QString qgisUserDatabaseFilePath();
332 
334  static QString qgisAuthDatabaseFilePath();
335 
337  static QString splashPath();
338 
340  static QString iconsPath();
341 
343  static QString srsDatabaseFilePath();
344 
350  static void setSvgPaths( const QStringList &svgPaths );
351 
353  static QStringList svgPaths();
354 
359  static QStringList layoutTemplatePaths();
360 
362  static QMap<QString, QString> systemEnvVars();
363 
365  static QString prefixPath();
366 
368  static QString pluginPath();
369 
371  static QString pkgDataPath();
372 
374  static QString activeThemePath();
375 
377  static QString defaultThemePath();
378 
383  static QString iconPath( const QString &iconFile );
384 
392  static QIcon getThemeIcon( const QString &name, const QColor &fillColor = QColor(), const QColor &strokeColor = QColor() );
393 
398  enum Cursor
399  {
407  };
408 
415  static QCursor getThemeCursor( Cursor cursor );
416 
425  static QPixmap getThemePixmap( const QString &name, const QColor &foreColor = QColor(), const QColor &backColor = QColor(), int size = 16 );
426 
428  static QString userStylePath();
429 
435  static QRegularExpression shortNameRegularExpression();
436 
442  static QString userLoginName();
443 
449  static QString userFullName();
450 
456  static QString osName();
457 
463  static QString platform();
464 
469  static QString locale();
470 
477  static void setLocale( const QLocale &locale );
478 
480  static QString userThemesFolder();
481 
483  static QString defaultStylePath();
484 
486  static QString defaultThemesFolder();
487 
489  static QString libraryPath();
490 
492  static QString libexecPath();
493 
500  static QString qmlImportPath();
501 
503  static void setPrefixPath( const QString &prefixPath, bool useDefaultPaths = false );
504 
506  static void setPluginPath( const QString &pluginPath );
507 
509  static void setPkgDataPath( const QString &pkgDataPath );
510 
512  static void setDefaultSvgPaths( const QStringList &pathList );
513 
515  static void setAuthDatabaseDirPath( const QString &authDbDirPath );
516 
518  static void initQgis();
519 
521  static bool createDatabase( QString *errorMessage = nullptr );
522 
524  static bool createThemeFolder();
525 
527  static void exitQgis();
528 
530  static QString appIconPath();
531 
533  enum endian_t
534  {
535  XDR = 0, // network, or big-endian, byte order
536  NDR = 1 // little-endian byte order
537  };
538 
540  static endian_t endian();
541 
556  static QString reportStyleSheet( QgsApplication::StyleSheetType styleSheetType = QgsApplication::StyleSheetType::Qt );
557 
562  static QString showSettings();
563 
571  static void registerOgrDrivers();
572 
574  static QString absolutePathToRelativePath( const QString &apath, const QString &targetPath );
576  static QString relativePathToAbsolutePath( const QString &rpath, const QString &targetPath );
577 
579  static bool isRunningFromBuildDir() { return ABISYM( mRunningFromBuildDir ); }
580 #if defined(_MSC_VER) && !defined(USING_NMAKE) && !defined(USING_NINJA)
581  static QString cfgIntDir() SIP_SKIP;
582 #endif
584  static QString buildSourcePath();
586  static QString buildOutputPath();
587 
593  static void skipGdalDriver( const QString &driver );
594 
600  static void restoreGdalDriver( const QString &driver );
601 
606  static QStringList skippedGdalDrivers();
607 
614  static void applyGdalSkippedDrivers();
615 
620  static void registerGdalDriversFromSettings();
621 
628  static QStringList deferredSkippedGdalDrivers();
629 
636  static void setSkippedGdalDrivers( const QStringList &skippedGdalDrivers,
637  const QStringList &deferredSkippedGdalDrivers );
638 
643  static int maxThreads();
644 
650  static void setMaxThreads( int maxThreads );
651 
657  static QgsTaskManager *taskManager();
658 
663  static QgsSettingsRegistryCore *settingsRegistryCore() SIP_KEEPREFERENCE;
664 
669  static QgsColorSchemeRegistry *colorSchemeRegistry() SIP_KEEPREFERENCE;
670 
675  static QgsPaintEffectRegistry *paintEffectRegistry() SIP_KEEPREFERENCE;
676 
681  static QgsRendererRegistry *rendererRegistry() SIP_KEEPREFERENCE;
682 
688  static QgsRasterRendererRegistry *rasterRendererRegistry() SIP_SKIP;
689 
694  static QgsPointCloudRendererRegistry *pointCloudRendererRegistry() SIP_KEEPREFERENCE;
695 
701  static QgsDataItemProviderRegistry *dataItemProviderRegistry() SIP_KEEPREFERENCE;
702 
709  static QgsCoordinateReferenceSystemRegistry *coordinateReferenceSystemRegistry() SIP_KEEPREFERENCE;
710 
718  static QgsSvgCache *svgCache();
719 
726  static QgsImageCache *imageCache();
727 
733  static QgsSourceCache *sourceCache();
734 
739  static QgsNetworkContentFetcherRegistry *networkContentFetcherRegistry() SIP_KEEPREFERENCE;
740 
745  static QgsValidityCheckRegistry *validityCheckRegistry() SIP_KEEPREFERENCE;
746 
751  static QgsSymbolLayerRegistry *symbolLayerRegistry() SIP_KEEPREFERENCE;
752 
757  static QgsCalloutRegistry *calloutRegistry() SIP_KEEPREFERENCE;
758 
763  static QgsLayoutItemRegistry *layoutItemRegistry() SIP_KEEPREFERENCE;
764 
769  static QgsAnnotationItemRegistry *annotationItemRegistry() SIP_KEEPREFERENCE;
770 
775  static QgsGpsConnectionRegistry *gpsConnectionRegistry() SIP_KEEPREFERENCE;
776 
781  static QgsBabelFormatRegistry *gpsBabelFormatRegistry() SIP_KEEPREFERENCE;
782 
787  static QgsPluginLayerRegistry *pluginLayerRegistry() SIP_KEEPREFERENCE;
788 
793  static QgsClassificationMethodRegistry *classificationMethodRegistry() SIP_KEEPREFERENCE;
794 
799  static QgsBookmarkManager *bookmarkManager();
800 
806  static QgsTileDownloadManager *tileDownloadManager() SIP_SKIP;
807 
812  static QgsRecentStyleHandler *recentStyleHandler() SIP_KEEPREFERENCE;
813 
821  static QgsStyleModel *defaultStyleModel();
822 
827  static QgsMessageLog *messageLog();
828 
835  static QgsAuthManager *authManager();
836 
842  static QgsProcessingRegistry *processingRegistry();
843 
848  static QgsPageSizeRegistry *pageSizeRegistry() SIP_KEEPREFERENCE;
849 
855  static QgsAnnotationRegistry *annotationRegistry() SIP_SKIP;
856 
862  static QgsActionScopeRegistry *actionScopeRegistry() SIP_KEEPREFERENCE;
863 
868  static QgsConnectionRegistry *connectionRegistry();
869 
874  static QgsRuntimeProfiler *profiler();
875 
881  static QgsNumericFormatRegistry *numericFormatRegistry() SIP_KEEPREFERENCE;
882 
886  static QgsFieldFormatterRegistry *fieldFormatterRegistry() SIP_KEEPREFERENCE;
887 
892  static Qgs3DRendererRegistry *renderer3DRegistry() SIP_KEEPREFERENCE;
893 
898  static Qgs3DSymbolRegistry *symbol3DRegistry() SIP_KEEPREFERENCE;
899 
905  static QgsScaleBarRendererRegistry *scaleBarRendererRegistry() SIP_KEEPREFERENCE;
906 
911  static QgsProjectStorageRegistry *projectStorageRegistry() SIP_KEEPREFERENCE;
912 
917  static QgsExternalStorageRegistry *externalStorageRegistry() SIP_KEEPREFERENCE;
918 
926  static QgsLocalizedDataPathRegistry *localizedDataPathRegistry() SIP_KEEPREFERENCE;
927 
936  static QString nullRepresentation();
937 
941  static void setNullRepresentation( const QString &nullRepresentation );
942 
950  static QVariantMap customVariables();
951 
959  static void setCustomVariables( const QVariantMap &customVariables );
960 
966  static void setCustomVariable( const QString &name, const QVariant &value );
967 
977  static int scaleIconSize( int standardSize, bool applyDevicePixelRatio = false );
978 
987  int maxConcurrentConnectionsPerPool() const;
988 
994  static void setTranslation( const QString &translation );
995 
1001  QString translation() const;
1002 
1008  void collectTranslatableObjects( QgsTranslationContext *translationContext );
1009 
1010 #ifndef SIP_RUN
1012  static const inline QgsSettingsEntryString settingsLocaleUserLocale = QgsSettingsEntryString( QStringLiteral( "locale/userLocale" ), QgsSettings::NoSection, QString() );
1014  static const inline QgsSettingsEntryBool settingsLocaleOverrideFlag = QgsSettingsEntryBool( QStringLiteral( "locale/overrideFlag" ), QgsSettings::NoSection, false );
1016  static const inline QgsSettingsEntryString settingsLocaleGlobalLocale = QgsSettingsEntryString( QStringLiteral( "locale/globalLocale" ), QgsSettings::NoSection, QString() );
1018  static const inline QgsSettingsEntryBool settingsLocaleShowGroupSeparator = QgsSettingsEntryBool( QStringLiteral( "locale/showGroupSeparator" ), QgsSettings::NoSection, false );
1020  static const inline QgsSettingsEntryStringList settingsSearchPathsForSVG = QgsSettingsEntryStringList( QStringLiteral( "svg/searchPathsForSVG" ), QgsSettings::NoSection, QStringList() );
1021 #endif
1022 
1023 #ifdef SIP_RUN
1024  SIP_IF_FEATURE( ANDROID )
1025  //dummy method to workaround sip generation issue
1026  bool x11EventFilter( XEvent *event );
1027  SIP_END
1028 #endif
1029 
1030  signals:
1032  void preNotify( QObject *receiver, QEvent *event, bool *done ) SIP_SKIP;
1033 
1039 
1040 
1045 
1053 
1054 
1061 
1062 
1063  private:
1064 
1065  static void copyPath( const QString &src, const QString &dst );
1066  static QObject *ABISYM( mFileOpenEventReceiver );
1067 
1068  static bool ABISYM( mInitialized );
1069 
1071  static bool ABISYM( mRunningFromBuildDir );
1072 
1076  static int ABISYM( sMaxThreads );
1077 
1078  QMap<QString, QIcon> mIconCache;
1079  QMap<Cursor, QCursor> mCursorCache;
1080 
1081  QTranslator *mQgisTranslator = nullptr;
1082  QTranslator *mQtTranslator = nullptr;
1083  QTranslator *mQtBaseTranslator = nullptr;
1084 
1085  QgsDataItemProviderRegistry *mDataItemProviderRegistry = nullptr;
1086  QgsAuthManager *mAuthManager = nullptr;
1087 
1088  struct ApplicationMembers
1089  {
1090  QgsSettingsRegistryCore *mSettingsRegistryCore = nullptr;
1091  QgsCoordinateReferenceSystemRegistry *mCrsRegistry = nullptr;
1092  Qgs3DRendererRegistry *m3DRendererRegistry = nullptr;
1093  Qgs3DSymbolRegistry *m3DSymbolRegistry = nullptr;
1094  QgsActionScopeRegistry *mActionScopeRegistry = nullptr;
1095  QgsAnnotationRegistry *mAnnotationRegistry = nullptr;
1096  QgsColorSchemeRegistry *mColorSchemeRegistry = nullptr;
1097  QgsLocalizedDataPathRegistry *mLocalizedDataPathRegistry = nullptr;
1098  QgsNumericFormatRegistry *mNumericFormatRegistry = nullptr;
1099  QgsFieldFormatterRegistry *mFieldFormatterRegistry = nullptr;
1100  QgsGpsConnectionRegistry *mGpsConnectionRegistry = nullptr;
1101  QgsBabelFormatRegistry *mGpsBabelFormatRegistry = nullptr;
1102  QgsNetworkContentFetcherRegistry *mNetworkContentFetcherRegistry = nullptr;
1103  QgsScaleBarRendererRegistry *mScaleBarRendererRegistry = nullptr;
1104  QgsValidityCheckRegistry *mValidityCheckRegistry = nullptr;
1105  QgsMessageLog *mMessageLog = nullptr;
1106  QgsPaintEffectRegistry *mPaintEffectRegistry = nullptr;
1107  QgsPluginLayerRegistry *mPluginLayerRegistry = nullptr;
1108  QgsClassificationMethodRegistry *mClassificationMethodRegistry = nullptr;
1109  QgsProcessingRegistry *mProcessingRegistry = nullptr;
1110  QgsConnectionRegistry *mConnectionRegistry = nullptr;
1111  std::unique_ptr<QgsProjectStorageRegistry> mProjectStorageRegistry;
1112  QgsExternalStorageRegistry *mExternalStorageRegistry = nullptr;
1113  QgsPageSizeRegistry *mPageSizeRegistry = nullptr;
1114  QgsRasterRendererRegistry *mRasterRendererRegistry = nullptr;
1115  QgsRendererRegistry *mRendererRegistry = nullptr;
1116  QgsPointCloudRendererRegistry *mPointCloudRendererRegistry = nullptr;
1117  QgsSvgCache *mSvgCache = nullptr;
1118  QgsImageCache *mImageCache = nullptr;
1119  QgsSourceCache *mSourceCache = nullptr;
1120  QgsSymbolLayerRegistry *mSymbolLayerRegistry = nullptr;
1121  QgsCalloutRegistry *mCalloutRegistry = nullptr;
1122  QgsTaskManager *mTaskManager = nullptr;
1123  QgsLayoutItemRegistry *mLayoutItemRegistry = nullptr;
1124  QgsAnnotationItemRegistry *mAnnotationItemRegistry = nullptr;
1125  QgsUserProfileManager *mUserConfigManager = nullptr;
1126  QgsBookmarkManager *mBookmarkManager = nullptr;
1127  QgsTileDownloadManager *mTileDownloadManager = nullptr;
1128  QgsStyleModel *mStyleModel = nullptr;
1129  QgsRecentStyleHandler *mRecentStyleHandler = nullptr;
1130  QString mNullRepresentation;
1131  QStringList mSvgPathCache;
1132  bool mSvgPathCacheValid = false;
1133 
1134  ApplicationMembers();
1135  ~ApplicationMembers();
1136  };
1137 
1138  // Applications members which belong to an instance of QgsApplication
1139  ApplicationMembers *mApplicationMembers = nullptr;
1140  // ... but in case QgsApplication is never instantiated (eg with custom designer widgets), we fall back to static members
1141  static ApplicationMembers *sApplicationMembers;
1142 
1143  static QgsAuthManager *sAuthManager;
1144 
1145  static ApplicationMembers *members();
1146 
1147  static void invalidateCaches();
1148 
1149  friend class TestQgsApplication;
1150 };
1151 
1152 // clazy:excludeall=qstring-allocations
1153 
1154 #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.
Registry of external storage backends used by QgsExternalResourceWidget.
The QgsFieldFormatterRegistry manages registered classes of QgsFieldFormatter.
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 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...
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:167
#define SIP_END
Definition: qgis_sip.h:194
QObject * ABISYM(QgsApplication::mFileOpenEventReceiver)