37#include <QDomDocument>
38#include <QGestureEvent>
39#include <QGraphicsView>
96 if ( qobject_cast<QgsMapCanvas *>( sipCpp ) !=
nullptr )
97 sipType = sipType_QgsMapCanvas;
292 double scale() const;
428 QgsVectorLayer *
layer, const
QgsFeatureIds &ids, const QColor &startColor = QColor( 255, 0, 0, 255 ), const QColor &endColor = QColor( 255, 0, 0, 0 ),
int flashes = 3,
int duration = 500
445 const QColor &startColor = QColor( 255, 0, 0, 255 ),
446 const QColor &endColor = QColor( 255, 0, 0, 0 ),
550 void freeze(
bool frozen =
true );
561 bool isFrozen()
const;
585 QMap<QString, QString> layerStyleOverrides()
const;
597 void setLayerStyleOverrides(
const QMap<QString, QString> &overrides );
619 void setTheme(
const QString &theme );
625 QString
theme()
const {
return mTheme; }
637 void setWheelFactor(
double factor );
646 void zoomScale(
double scale,
bool ignoreScaleLock =
false );
655 void zoomByFactor(
double scaleFactor,
const QgsPointXY *center =
nullptr,
bool ignoreScaleLock =
false );
658 void zoomWithCenter(
int x,
int y,
bool zoomIn );
673 void enableAntiAliasing(
bool flag );
676 bool antiAliasingEnabled()
const;
679 void enableMapTileRendering(
bool flag );
684 void panActionEnd( QPoint releasePoint );
693 void panActionStart( QPoint releasePoint );
697 void panAction( QMouseEvent *event );
700 QPoint mouseLastXY();
707 void setPreviewModeEnabled(
bool previewEnabled );
715 bool previewModeEnabled()
const;
796 void setSegmentationTolerance(
double tolerance );
819 void setAnnotationsVisible(
bool visible );
836 void setSelectiveMaskingSourceSets(
const QVector< QgsSelectiveMaskingSourceSet > &sets );
845 bool previewJobsEnabled()
const;
854 void setPreviewJobsEnabled(
bool enabled );
861 void setCustomDropHandlers(
const QVector<QPointer<QgsCustomDropHandler>> &handlers )
SIP_SKIP;
970 void saveAsImage(
const QString &fileName, QPixmap *QPixmap =
nullptr,
const QString & =
"PNG" );
1047 double zoomInFactor()
const;
1052 double zoomOutFactor()
const;
1084 void mapToolDestroyed();
1087 void rendererJobFinished();
1090 void previewJobFinished();
1092 void mapUpdateTimeout();
1096 void mapThemeChanged(
const QString &theme );
1098 void mapThemeRenamed(
const QString &theme,
const QString &newTheme );
1100 void updateDevicePixelFromScreen();
1102 void onElevationShadingRendererChanged();
1279 bool event( QEvent *e )
override;
1318 void connectNotify(
const char *signal )
override;
1327 void layerRepaintRequested(
bool deferred );
1329 void autoRefreshTriggered();
1331 void updateAutoRefreshTimer();
1333 void projectThemesChanged();
1335 void startPreviewJob(
int number );
1337 void temporalControllerModeChanged();
1347 mLockedScale = mCanvas->mapSettings().
scale();
1352 QgsRectangle newExtent = mCanvas->mapSettings().extent();
1353 newExtent.
scale( mLockedScale / mCanvas->mapSettings().scale() );
1354 mCanvas->mSettings.setExtent( newExtent );
1358 QgsMapCanvas *mCanvas;
1359 double mLockedScale;
1362 enum class CacheInvalidationType
1368 QgsOverlayWidgetLayout *mLayout =
nullptr;
1373 QgsMapSettings mSettings;
1376 QgsMapCanvasMap *mMap =
nullptr;
1378 QgsScreenHelper *mScreenHelper =
nullptr;
1384 QgsTemporalController *mController =
nullptr;
1387 bool mFrozen =
false;
1390 bool mRefreshScheduled =
false;
1393 bool mRefreshAfterJob =
false;
1396 bool mRenderFlag =
true;
1398 QFlags<CacheInvalidationType> mCacheInvalidations;
1401 QPointer<QgsMapLayer> mCurrentLayer;
1404 QGraphicsScene *mScene =
nullptr;
1407 QgsMapTool *mMapTool =
nullptr;
1410 QgsProject *mProject =
nullptr;
1413 QList<QgsRectangle> mLastExtent;
1414 int mLastExtentIndex = -1;
1417 double mWheelZoomFactor = 2.0;
1420 QTimer mMapUpdateTimer;
1423 QgsMapRendererQImageJob *mJob =
nullptr;
1426 bool mJobCanceled =
false;
1429 std::unique_ptr<QgsLabelingResults> mLabelingResults;
1432 bool mLabelingResultsOutdated =
false;
1438 std::unique_ptr<QgsRenderedItemResults> mRenderedItemResults;
1444 std::unique_ptr<QgsRenderedItemResults> mPreviousRenderedItemResults;
1451 bool mRenderedItemResultsOutdated =
false;
1454 bool mUseParallelRendering =
false;
1457 bool mDrawRenderingStats =
false;
1460 std::unique_ptr<QgsMapRendererCache> mCache;
1462 QTimer *mResizeTimer =
nullptr;
1463 QTimer *mRefreshTimer =
nullptr;
1465 QgsPreviewEffect *mPreviewEffect =
nullptr;
1467 QgsRectangle imageRect(
const QImage &img,
const QgsMapSettings &mapSettings );
1469 QgsSnappingUtils *mSnappingUtils =
nullptr;
1471 QList<QgsMapRendererQImageJob *> mPreviewJobs;
1474 bool mScaleLocked =
false;
1476 QgsExpressionContextScope mExpressionContextScope;
1482 bool mZoomDragging =
false;
1485 std::unique_ptr<QgsRubberBand> mZoomRubberBand;
1487 QCursor mZoomCursor;
1489 QTimer mAutoRefreshTimer;
1491 QTimer mPreviewTimer;
1492 QMetaObject::Connection mPreviewTimerConnection;
1496 QgsPointXY mCursorPoint;
1498 bool mAnnotationsVisible =
true;
1500 bool mUsePreviewJobs =
false;
1502 QHash<QString, int> mLastLayerRenderTime;
1504 QVector<QPointer<QgsCustomDropHandler>> mDropHandlers;
1506 QgsDistanceArea mDa;
1507 QList<double> mZoomResolutions;
1509 QList<QgsMapCanvasInteractionBlocker *> mInteractionBlockers;
1511 int mBlockItemPositionUpdates = 0;
1512 int mBlockExtentChangedSignal = 0;
1513 int mBlockScaleChangedSignal = 0;
1515 std::unique_ptr<QgsTemporaryCursorOverride> mTemporaryCursorOverride;
1524 QMap<QString, QDateTime> mRendererErrors;
1527 QPointer<QgsAbstract2DMapController> mMapController;
1529 QPointer< QgsStatusBar > mStatusBar;
1535 QgsPointXY cursorPoint()
const;
1540 void updateMapSize();
1546 void beginZoomRect( QPoint pos );
1552 void endZoomRect( QPoint pos );
1555 void stopZoomRect();
1571 bool boundingBoxOfFeatureIds(
const QgsFeatureIds &ids, QgsVectorLayer *layer, QgsRectangle &bbox, QString &errorMsg )
const;
1579 QgsRectangle optimalExtentForPointLayer( QgsVectorLayer *layer,
const QgsPointXY ¢er,
int scaleFactor = 5 );
1581 void setLayersPrivate(
const QList<QgsMapLayer *> &layers );
1583 void startPreviewJobs();
1584 void stopPreviewJobs();
1585 void schedulePreviewJob(
int number );
1590 bool panOperationInProgress();
1592 int nextZoomLevel(
const QList<double> &resolutions,
bool zoomIn =
true )
const;
1598 void clearTemporalCache();
1603 void clearElevationCache();
1605 void showContextMenu( QgsMapMouseEvent *event );
Provides global constants and enumerations for use throughout the application.
DistanceUnit
Units of distance.
MessageLevel
Level for messages This will be used both for message log and message bar in application.
@ Info
Information message.
QFlags< MapCanvasFlag > MapCanvasFlags
Flags controlling behavior of map canvases.
Abstract base class for all 2D map controllers.
Abstract base class for all geometries.
Represents a coordinate reference system (CRS).
Custom exception class for Coordinate Reference System related exceptions.
QgsRange which stores a range of double values.
Abstract interface for generating an expression context.
Single scope for storing variables and functions for use within a QgsExpressionContext.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
A geometry is the spatial representation of a feature.
Highlights features on the map.
Stores global configuration for labeling engine.
Stores computed placement from labeling engine.
An interactive map canvas item which displays a QgsAnnotation.
An interface for objects which block interactions with a QgsMapCanvas.
Interaction
Available interactions to block.
Deprecated to be deleted, stuff from here should be moved elsewhere.
void setCurrentLayer(QgsMapLayer *layer)
void contextMenuAboutToShow(QMenu *menu, QgsMapMouseEvent *event)
Emitted before the map canvas context menu will be shown.
void zoomToProjectExtent()
Zoom to the full extent the project associated with this canvas.
void panToSelected(QgsMapLayer *layer=nullptr)
Pan to the selected features of current ayer keeping same extent.
void zoomToSelected(QgsMapLayer *layer=nullptr)
Zoom to the extent of the selected features of provided map layer.
bool isCachingEnabled() const
Check whether images of rendered layers are curerently being cached.
void zoomToFullExtent()
Zoom to the full extent of all layers currently visible in the canvas.
void setLayers(const QList< QgsMapLayer * > &layers)
Sets the list of layers that should be shown in the canvas.
void setProject(QgsProject *project)
Sets the project linked to this canvas.
const QgsRenderedItemResults * renderedItemResults(bool allowOutdatedResults=true) const
Gets access to the rendered item results (may be nullptr), which includes the results of rendering an...
QColor selectionColor() const
Returns color for selected features.
bool event(QEvent *e) override
void setCachingEnabled(bool enabled)
Set whether to cache images of rendered layers.
void mouseReleaseEvent(QMouseEvent *e) override
void setExtent(const QgsRectangle &r, bool magnified=false)
Sets the extent of the map canvas to the specified rectangle.
void setRenderFlag(bool flag)
Sets whether a user has disabled canvas renders via the GUI.
void selectionChanged(QgsMapLayer *layer)
Emitted when selection in any layer gets changed.
void updateCanvasItemPositions()
called on resize or changed extent to notify canvas items to change their rectangle
void extentsChanged()
Emitted when the extents of the map change.
void xyCoordinates(const QgsPointXY &p)
Emits current mouse position.
QgsExpressionContextScope & expressionContextScope()
Returns a reference to the expression context scope for the map canvas.
void setFlags(Qgis::MapCanvasFlags flags)
Sets flags which control how the map canvas behaves.
void stopRendering()
stop rendering (if there is any right now)
QgsPointXY center() const
Gets map center, in geographical coordinates.
void setZoomResolutions(const QList< double > &resolutions)
Set a list of resolutions (map units per pixel) to which to "snap to" when zooming the map.
void showEvent(QShowEvent *event) override
int layerCount() const
Returns number of layers on the map.
void emitExtentsChanged()
Emits the extentsChanged signal when appropriate.
QString theme() const
Returns the map's theme shown in the canvas, if set.
QVector< T > layers() const
Returns a list of registered map layers with a specified layer type.
void layerStateChange()
This slot is connected to the visibility change of one or more layers.
void clearCache()
Make sure to remove any rendered images from cache (does nothing if cache is not enabled).
void tapAndHoldGestureOccurred(const QgsPointXY &mapPoint, QTapAndHoldGesture *gesture)
Emitted whenever a tap and hold gesture occurs at the specified map point.
void setCanvasColor(const QColor &_newVal)
Write property of QColor bgColor.
const QList< double > & zoomResolutions() const
Returns the list of resolutions to which to "snap to" when zooming the map.
void panDistanceBearingChanged(double distance, Qgis::DistanceUnit unit, double bearing)
Emitted whenever the distance or bearing of an in-progress panning operation is changed.
const QgsTemporalController * temporalController() const
Gets access to the temporal controller that will be used to update the canvas temporal range.
void flashGeometries(const QList< QgsGeometry > &geometries, const QgsCoordinateReferenceSystem &crs=QgsCoordinateReferenceSystem(), const QColor &startColor=QColor(255, 0, 0, 255), const QColor &endColor=QColor(255, 0, 0, 0), int flashes=3, int duration=500)
Causes a set of geometries to flash within the canvas.
void setMapUpdateInterval(int timeMilliseconds)
Set how often map preview should be updated while it is being rendered (in milliseconds).
bool scaleLocked() const
Returns whether the scale is locked, so zooming can be performed using magnication.
bool setReferencedExtent(const QgsReferencedRectangle &extent)
Sets the canvas to the specified extent.
void dragEnterEvent(QDragEnterEvent *e) override
QgsMapRendererCache * cache()
Returns the map renderer cache, if caching is enabled.
void zRangeChanged()
Emitted when the map canvas z (elevation) range changes.
void keyPressEvent(QKeyEvent *e) override
void clearExtentHistory()
Clears the list of extents and sets current extent as first item.
void zoomToPreviousExtent()
Zoom to the previous extent (view).
friend class TestQgsMapCanvas
QList< QgsMapLayer * > layers(bool expandGroupLayers=false) const
Returns the list of layers shown within the map canvas.
void scaleChanged(double scale)
Emitted when the scale of the map changes.
void mapToolSet(QgsMapTool *newTool, QgsMapTool *oldTool)
Emit map tool changed with the old tool.
void canvasColorChanged()
Emitted when canvas background color changes.
void saveAsImage(const QString &fileName, QPixmap *QPixmap=nullptr, const QString &="PNG")
Save the contents of the map canvas to disk as an image.
void moveCanvasContents(bool reset=false)
called when panning is in action, reset indicates end of panning
void magnificationChanged(double magnification)
Emitted when the scale of the map changes.
void zoomOut()
Zoom out with fixed factor.
void currentLayerChanged(QgsMapLayer *layer)
Emitted when the current layer is changed.
void setTemporalController(QgsTemporalController *controller)
Sets the temporal controller for this canvas.
void renderErrorOccurred(const QString &error, QgsMapLayer *layer)
Emitted whenever an error is encountered during a map render operation.
void addOverlayWidget(QWidget *widget, Qt::Edge edge)
Adds an overlay widget to the layout, which will be bound to the specified edge.
void waitWhileRendering()
Blocks until the rendering job has finished.
void mapRefreshCanceled()
Emitted when the pending map refresh has been canceled.
double magnificationFactor() const
Returns the magnification factor.
void writeProject(QDomDocument &)
called to write map canvas settings to project
void mousePressEvent(QMouseEvent *e) override
void updateScale()
Emits signal scaleChanged to update scale in main window.
void setMagnificationFactor(double factor, const QgsPointXY *center=nullptr)
Sets the factor of magnification to apply to the map canvas.
void refreshAllLayers()
Reload all layers (including refreshing layer properties from their data sources),...
void unsetMapTool(QgsMapTool *mapTool)
Unset the current map tool or last non zoom tool.
void resizeEvent(QResizeEvent *e) override
void renderStarting()
Emitted when the canvas is about to be rendered.
void setMapSettingsFlags(Qgis::MapSettingsFlags flags)
Resets the flags for the canvas' map settings.
std::unique_ptr< CanvasProperties > mCanvasProperties
Handle pattern for implementation object.
void keyReleased(QKeyEvent *e)
Emit key release event.
QgsMapTool * mapTool() const
Returns the currently active tool.
const QgsExpressionContextScope & expressionContextScope() const
Returns a const reference to the expression context scope for the map canvas.
void layerStyleOverridesChanged()
Emitted when the configuration of overridden layer styles changes.
QgsMapCanvas(QWidget *parent=nullptr)
Constructor.
void zoomNextStatusChanged(bool available)
Emitted when zoom next status changed.
void setPreviewJobsEnabled(bool enabled)
Sets whether canvas map preview jobs (low priority render jobs which render portions of the view just...
QgsRectangle fullExtent() const
Returns the combined extent for all layers on the map canvas.
void redrawAllLayers()
Clears all cached images and redraws all layers.
void keyReleaseEvent(QKeyEvent *e) override
void rotationChanged(double rotation)
Emitted when the rotation of the map changes.
void panToFeatureIds(QgsVectorLayer *layer, const QgsFeatureIds &ids, bool alwaysRecenter=true)
Centers canvas extent to feature ids.
void messageEmitted(const QString &title, const QString &message, Qgis::MessageLevel level=Qgis::MessageLevel::Info)
emit a message (usually to be displayed in a message bar)
void scaleLockChanged(bool locked)
Emitted when the scale locked state of the map changes.
const QgsLabelingResults * labelingResults(bool allowOutdatedResults=true) const
Gets access to the labeling results (may be nullptr).
void mouseMoveEvent(QMouseEvent *e) override
bool renderFlag() const
Returns true if canvas render is disabled as a result of user disabling renders via the GUI.
QgsRectangle projectExtent() const
Returns the associated project's full extent, in the canvas' CRS.
void setCenter(const QgsPointXY ¢er)
Set the center of the map canvas, in geographical coordinates.
void setParallelRenderingEnabled(bool enabled)
Set whether the layers are rendered in parallel or sequentially.
void setDestinationCrs(const QgsCoordinateReferenceSystem &crs)
Sets destination coordinate reference system.
void flashFeatureIds(QgsVectorLayer *layer, const QgsFeatureIds &ids, const QColor &startColor=QColor(255, 0, 0, 255), const QColor &endColor=QColor(255, 0, 0, 0), int flashes=3, int duration=500)
Causes a set of features with matching ids from a vector layer to flash within the canvas.
bool isParallelRenderingEnabled() const
Check whether the layers are rendered in parallel or sequentially.
double scale() const
Returns the last reported scale of the canvas.
double rotation() const
Gets the current map canvas rotation in clockwise degrees.
void temporalRangeChanged()
Emitted when the map canvas temporal range changes.
void paintEvent(QPaintEvent *e) override
void zoomToLayers(const QList< QgsMapLayer * > &layers)
Zoom to the combined extent of a set of layers.
void zoomLastStatusChanged(bool available)
Emitted when zoom last status changed.
void themeChanged(const QString &theme)
Emitted when the canvas has been assigned a different map theme.
void destinationCrsChanged()
Emitted when map CRS has changed.
void transformContextChanged()
Emitted when the canvas transform context is changed.
void keyPressed(QKeyEvent *e)
Emit key press event.
void setMapTool(QgsMapTool *mapTool, bool clean=false)
Sets the map tool currently being used on the canvas.
QColor canvasColor() const
Read property of QColor bgColor.
void mapCanvasRefreshed()
Emitted when canvas finished a refresh request.
int mapUpdateInterval() const
Find out how often map preview should be updated while it is being rendered (in milliseconds).
void setSelectionColor(const QColor &color)
Set color of selected vector features.
double mapUnitsPerPixel() const
Returns the mapUnitsPerPixel (map units per pixel) for the canvas.
void mouseDoubleClickEvent(QMouseEvent *e) override
void selectionChangedSlot()
Receives signal about selection change, and pass it on with layer info.
bool viewportEvent(QEvent *event) override
void zoomToNextExtent()
Zoom to the next extent (view).
void layersChanged()
Emitted when a new set of layers has been received.
void zoomToFeatureIds(QgsVectorLayer *layer, const QgsFeatureIds &ids)
Set canvas extent to the bounding box of a set of features.
void renderComplete(QPainter *painter)
Emitted when the canvas has rendered.
void zoomIn()
Zoom in with fixed factor.
QgsMapLayer * layer(int index)
Returns the map layer at position index in the layer stack.
bool annotationsVisible() const
Returns true if annotations are visible within the map canvas.
void cancelJobs()
Cancel any rendering job, in a blocking way.
Qgis::MapCanvasFlags flags() const
Returns flags which control how the map canvas behaves.
void wheelEvent(QWheelEvent *e) override
static const QgsSettingsEntryString * settingsCustomCoordinateCrs
void dropEvent(QDropEvent *event) override
QgsProject * project()
Returns the project linked to this canvas.
void setScaleLocked(bool isLocked)
Lock the scale, so zooming can be performed using magnication.
void setRotation(double degrees)
Set the rotation of the map canvas in clockwise degrees.
void readProject(const QDomDocument &)
called to read map canvas settings from project
void setTheme(const QString &theme)
Sets a map theme to show in the canvas.
const QgsMapSettings & mapSettings() const
Gets access to properties used for map rendering.
QgsRectangle extent() const
Returns the current zoom extent of the map canvas.
void refresh()
Repaints the canvas map.
void setExpressionContextScope(const QgsExpressionContextScope &scope)
Sets an expression context scope for the map canvas.
Base class for all map layer types.
A mouse event which is the result of a user interaction with a QgsMapCanvas.
A widget that displays an overview map.
Responsible for keeping a cache of rendered images resulting from a map rendering job.
QList< QgsMapRendererJob::Error > Errors
Intermediate base class adding functionality that allows a client to query the rendered image.
Contains configuration for rendering maps.
Perform transforms between map coordinates and device coordinates.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
A rectangle specified with double values.
void scale(double scaleFactor, const QgsPointXY *c=nullptr)
Scale the rectangle around its center point.
A QgsRectangle with associated coordinate reference system.
Stores collated details of rendered items during a map rendering operation.
Responsible for drawing transient features (e.g.
A utility class for dynamic handling of changes to screen properties.
Contains configuration of snapping and can return answers to snapping queries.
A proxy widget for QStatusBar.
A controller base class for temporal objects, contains a signal for notifying updates of the objects ...
Temporarily sets a cursor override for the QApplication for the lifetime of the object.
Represents a vector layer which manages a vector based dataset.
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
#define SIP_KEEPREFERENCE
#define SIP_THROW(name,...)
QSet< QgsFeatureId > QgsFeatureIds
QgsTemporalRange< QDateTime > QgsDateTimeRange
QgsRange which stores a range of date times.