Class: QgsMapRendererCustomPainterJob¶
- class qgis.core.QgsMapRendererCustomPainterJob¶
Bases:
QgsMapRendererAbstractCustomPainterJob
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).
Methods
- rtype
bool
Prepares the job for rendering synchronously in a background thread.
Prepares the given
painter
ready for a map render.Render a pre-prepared job.
Render the map synchronously in this thread.
- rtype
QgsLabelingResults
- rtype
bool
Wait for the job to be finished - and keep the thread’s event loop running while waiting.
- cancel(self)¶
- cancelWithoutBlocking(self)¶
- childEvent(self, QChildEvent)¶
- connectNotify(self, QMetaMethod)¶
- customEvent(self, QEvent)¶
- disconnectNotify(self, QMetaMethod)¶
- isActive(self) → bool¶
- Return type
bool
- isSignalConnected(self, QMetaMethod) → bool¶
- prepare(self)¶
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 forfinished()
signal), and an alternative torenderSynchronously()
(which should only ever be called from the main thread).See also
New in version 3.10.
- preparePainter(self, painter: QPainter, backgroundColor: Union[QColor, Qt.GlobalColor, QGradient] = Qt.transparent)¶
Prepares the given
painter
ready for a map render.The
backgroundColor
argument specifies the color to use for the map’s background.
- receivers(self, PYQT_SIGNAL) → int¶
- renderPrepared(self)¶
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 forfinished()
signal), and an alternative torenderSynchronously()
(which should only ever be called from the main thread).New in version 3.10.
- renderSynchronously(self)¶
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 forfinished()
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.
- sender(self) → QObject¶
- senderSignalIndex(self) → int¶
- start(self)¶
- takeLabelingResults(self) → QgsLabelingResults¶
- Return type
- timerEvent(self, QTimerEvent)¶
- usedCachedLabels(self) → bool¶
- Return type
bool
- waitForFinished(self)¶
- waitForFinishedWithEventLoop(self, flags: Union[QEventLoop.ProcessEventsFlags, QEventLoop.ProcessEventsFlag] = 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.
- Parameters
flags (Union[QEventLoop.ProcessEventsFlags) –