QGIS API Documentation  3.18.1-Zürich (202f1bf7e5)
Public Member Functions | List of all members
QgsMapRendererCustomPainterJob Class Reference

Job implementation that renders everything sequentially using a custom painter. More...

#include <qgsmaprenderercustompainterjob.h>

Inheritance diagram for QgsMapRendererCustomPainterJob:
Inheritance graph
[legend]

Public Member Functions

 QgsMapRendererCustomPainterJob (const QgsMapSettings &settings, QPainter *painter)
 
 ~QgsMapRendererCustomPainterJob () override
 
void cancel () override
 Stop the rendering job - does not return until the job has terminated. More...
 
void cancelWithoutBlocking () override
 Triggers cancellation of the rendering job without blocking. More...
 
bool isActive () const override
 Tell whether the rendering job is currently running in background. More...
 
const LayerRenderJobs & jobs () const
 
void prepare ()
 Prepares the job for rendering synchronously in a background thread. More...
 
void renderPrepared ()
 Render a pre-prepared job. More...
 
void renderSynchronously ()
 Render the map synchronously in this thread. More...
 
void start () override
 Start the rendering job and immediately return. More...
 
QgsLabelingResultstakeLabelingResults () override
 Gets pointer to internal labeling engine (in order to get access to the results). More...
 
bool usedCachedLabels () const override
 Returns true if the render job was able to use a cached labeling solution. More...
 
void waitForFinished () override
 Block until the job has finished. More...
 
void waitForFinishedWithEventLoop (QEventLoop::ProcessEventsFlags flags=QEventLoop::AllEvents)
 Wait for the job to be finished - and keep the thread's event loop running while waiting. More...
 
- Public Member Functions inherited from QgsMapRendererAbstractCustomPainterJob
 QgsMapRendererAbstractCustomPainterJob (const QgsMapSettings &settings)
 Constructor for QgsMapRendererAbstractCustomPainterJob, using the given map settings. More...
 
- Public Member Functions inherited from QgsMapRendererJob
 QgsMapRendererJob (const QgsMapSettings &settings)
 
Errors errors () const
 List of errors that happened during the rendering job - available when the rendering has been finished. More...
 
const QgsFeatureFilterProviderfeatureFilterProvider () const
 Returns the feature filter provider used by the QgsRenderContext of each LayerRenderJob. More...
 
const QgsMapSettingsmapSettings () const
 Returns map settings with which this job was started. More...
 
QHash< QgsMapLayer *, int > perLayerRenderingTime () const
 Returns the render time (in ms) per layer. More...
 
int renderingTime () const
 Returns the total time it took to finish the job (in milliseconds). More...
 
void setCache (QgsMapRendererCache *cache)
 Assign a cache to be used for reading and storing rendered images of individual layers. More...
 
void setFeatureFilterProvider (const QgsFeatureFilterProvider *f)
 Set the feature filter provider used by the QgsRenderContext of each LayerRenderJob. More...
 
void setLayerRenderingTimeHints (const QHash< QString, int > &hints)
 Sets approximate render times (in ms) for map layers. More...
 

Additional Inherited Members

- Public Types inherited from QgsMapRendererJob
typedef QList< QgsMapRendererJob::ErrorErrors
 
- Signals inherited from QgsMapRendererJob
void finished ()
 emitted when asynchronous rendering is finished (or canceled). More...
 
void renderingLayersFinished ()
 Emitted when the layers are rendered. More...
 
- Static Public Attributes inherited from QgsMapRendererJob
static const QString LABEL_CACHE_ID
 QgsMapRendererCache ID string for cached label image. More...
 
static const QString LABEL_PREVIEW_CACHE_ID
 QgsMapRendererCache ID string for cached label image during preview compositions only. More...
 
- Protected Member Functions inherited from QgsMapRendererAbstractCustomPainterJob
void preparePainter (QPainter *painter, const QColor &backgroundColor=Qt::transparent)
 Prepares the given painter ready for a map render. More...
 
- Protected Member Functions inherited from QgsMapRendererJob
void cleanupJobs (LayerRenderJobs &jobs)
 
void cleanupLabelJob (LabelRenderJob &job)
 Handles clean up tasks for a label job, including deletion of images and storing cached label results. More...
 
void cleanupSecondPassJobs (LayerRenderJobs &jobs)
 
void logRenderingTime (const LayerRenderJobs &jobs, const LayerRenderJobs &secondPassJobs, const LabelRenderJob &labelJob)
 
LayerRenderJobs prepareJobs (QPainter *painter, QgsLabelingEngine *labelingEngine2, bool deferredPainterSet=false)
 Creates a list of layer rendering jobs and prepares them for later render. More...
 
bool prepareLabelCache () const
 Prepares the cache for storing the result of labeling. More...
 
LabelRenderJob prepareLabelingJob (QPainter *painter, QgsLabelingEngine *labelingEngine2, bool canUseLabelCache=true)
 Prepares a labeling job. More...
 
LayerRenderJobs prepareSecondPassJobs (LayerRenderJobs &firstPassJobs, LabelRenderJob &labelJob)
 Prepares jobs for a second pass, if selective masks exist (from labels or symbol layers). More...
 
- Static Protected Member Functions inherited from QgsMapRendererJob
static QImage composeImage (const QgsMapSettings &settings, const LayerRenderJobs &jobs, const LabelRenderJob &labelJob, const QgsMapRendererCache *cache=nullptr)
 
static void composeSecondPass (LayerRenderJobs &secondPassJobs, LabelRenderJob &labelJob)
 Compose second pass images into first pass images. More...
 
static Q_DECL_DEPRECATED void drawLabeling (const QgsMapSettings &settings, QgsRenderContext &renderContext, QgsLabelingEngine *labelingEngine2, QPainter *painter)
 
static void drawLabeling (QgsRenderContext &renderContext, QgsLabelingEngine *labelingEngine2, QPainter *painter)
 
static QImage layerImageToBeComposed (const QgsMapSettings &settings, const LayerRenderJob &job, const QgsMapRendererCache *cache)
 
- Protected Attributes inherited from QgsMapRendererJob
QgsMapRendererCachemCache = nullptr
 
Errors mErrors
 
QHash< QString, int > mLayerRenderingTimeHints
 Approximate expected layer rendering time per layer, by layer ID. More...
 
QHash< QgsWeakMapLayerPointer, int > mPerLayerRenderingTime
 Render time (in ms) per layer, by layer ID. More...
 
bool mRecordRenderingTime = true
 true if layer rendering time should be recorded. More...
 
QElapsedTimer mRenderingStart
 
int mRenderingTime = 0
 
QgsMapSettings mSettings
 

Detailed Description

Job implementation that renders everything sequentially using a custom painter.

Also supports synchronous rendering in main thread for cases when rendering in background is not an option because of some technical limitations (e.g. printing to printer on some platforms).

Since
QGIS 2.4

Definition at line 63 of file qgsmaprenderercustompainterjob.h.

Constructor & Destructor Documentation

◆ QgsMapRendererCustomPainterJob()

QgsMapRendererCustomPainterJob::QgsMapRendererCustomPainterJob ( const QgsMapSettings settings,
QPainter *  painter 
)

Definition at line 62 of file qgsmaprenderercustompainterjob.cpp.

◆ ~QgsMapRendererCustomPainterJob()

QgsMapRendererCustomPainterJob::~QgsMapRendererCustomPainterJob ( )
override

Definition at line 71 of file qgsmaprenderercustompainterjob.cpp.

Member Function Documentation

◆ cancel()

void QgsMapRendererCustomPainterJob::cancel ( )
overridevirtual

Stop the rendering job - does not return until the job has terminated.

Does nothing if the rendering is not active.

Implements QgsMapRendererJob.

Definition at line 131 of file qgsmaprenderercustompainterjob.cpp.

◆ cancelWithoutBlocking()

void QgsMapRendererCustomPainterJob::cancelWithoutBlocking ( )
overridevirtual

Triggers cancellation of the rendering job without blocking.

The render job will continue to operate until it is able to cancel, at which stage the finished() signal will be emitted. Does nothing if the rendering is not active.

Implements QgsMapRendererJob.

Definition at line 155 of file qgsmaprenderercustompainterjob.cpp.

◆ isActive()

bool QgsMapRendererCustomPainterJob::isActive ( ) const
overridevirtual

Tell whether the rendering job is currently running in background.

Implements QgsMapRendererJob.

Definition at line 189 of file qgsmaprenderercustompainterjob.cpp.

◆ jobs()

const LayerRenderJobs& QgsMapRendererCustomPainterJob::jobs ( ) const
inline
Note
not available in Python bindings

Definition at line 79 of file qgsmaprenderercustompainterjob.h.

◆ prepare()

void QgsMapRendererCustomPainterJob::prepare ( )

Prepares the job for rendering synchronously in a background thread.

Must be called from the main thread.

This is an alternative to ordinary API (using start() + waiting for finished() signal), and an alternative to renderSynchronously() (which should only ever be called from the main thread).

See also
renderPrepared()
Since
QGIS 3.10

Definition at line 224 of file qgsmaprenderercustompainterjob.cpp.

◆ renderPrepared()

void QgsMapRendererCustomPainterJob::renderPrepared ( )

Render a pre-prepared job.

Can be safely called in a background thread.

Must be preceded by a call to prepare()

This is an alternative to ordinary API (using start() + waiting for finished() signal), and an alternative to renderSynchronously() (which should only ever be called from the main thread).

Since
QGIS 3.10

Definition at line 232 of file qgsmaprenderercustompainterjob.cpp.

◆ renderSynchronously()

void QgsMapRendererCustomPainterJob::renderSynchronously ( )

Render the map synchronously in this thread.

The function does not return until the map is completely rendered.

This is an alternative to ordinary API (using start() + waiting for finished() signal). Users are discouraged to use this method unless they have a strong reason for doing it. The synchronous rendering blocks the main thread, making the application unresponsive. Also, it is not possible to cancel rendering while it is in progress.

Definition at line 216 of file qgsmaprenderercustompainterjob.cpp.

◆ start()

void QgsMapRendererCustomPainterJob::start ( )
overridevirtual

Start the rendering job and immediately return.

Does nothing if the rendering is already in progress.

Implements QgsMapRendererJob.

Definition at line 78 of file qgsmaprenderercustompainterjob.cpp.

◆ takeLabelingResults()

QgsLabelingResults * QgsMapRendererCustomPainterJob::takeLabelingResults ( )
overridevirtual

Gets pointer to internal labeling engine (in order to get access to the results).

This should not be used if cached labeling was redrawn - see usedCachedLabels().

See also
usedCachedLabels()

Implements QgsMapRendererJob.

Definition at line 199 of file qgsmaprenderercustompainterjob.cpp.

◆ usedCachedLabels()

bool QgsMapRendererCustomPainterJob::usedCachedLabels ( ) const
overridevirtual

Returns true if the render job was able to use a cached labeling solution.

If so, any previously stored labeling results (see takeLabelingResults()) should be retained.

See also
takeLabelingResults()
Since
QGIS 3.0

Implements QgsMapRendererJob.

Definition at line 194 of file qgsmaprenderercustompainterjob.cpp.

◆ waitForFinished()

void QgsMapRendererCustomPainterJob::waitForFinished ( )
overridevirtual

Block until the job has finished.

Implements QgsMapRendererJob.

Definition at line 172 of file qgsmaprenderercustompainterjob.cpp.

◆ waitForFinishedWithEventLoop()

void QgsMapRendererCustomPainterJob::waitForFinishedWithEventLoop ( QEventLoop::ProcessEventsFlags  flags = QEventLoop::AllEvents)

Wait for the job to be finished - and keep the thread's event loop running while waiting.

With a call to waitForFinished(), the waiting is done with a synchronization primitive and does not involve processing of messages. That may cause issues to code which requires some events to be handled in the main thread. Some plugins hooking into the rendering pipeline may require this in order to work properly - for example, OpenLayers plugin which uses a QWebPage in the main thread.

Ideally the "wait for finished" method should not be used at all. The code triggering rendering should not need to actively wait for rendering to finish.

Definition at line 208 of file qgsmaprenderercustompainterjob.cpp.


The documentation for this class was generated from the following files: