47#include "moc_qgslayoutview.cpp"
49using namespace Qt::StringLiterals;
51#define MIN_VIEW_SCALE 0.05
52#define MAX_VIEW_SCALE 1000.0
55 : QGraphicsView( parent )
57 setResizeAnchor( QGraphicsView::AnchorViewCenter );
58 setMouseTracking(
true );
59 viewport()->setMouseTracking(
true );
65 viewport()->setStyleSheet( u
"background-color:#d7d7d7;"_s );
72 viewport()->setGraphicsEffect( mPreviewEffect );
86 return qobject_cast<QgsLayout *>( scene() );
91 return qobject_cast<const QgsLayout *>( scene() );
105 mSnapMarker =
new QgsLayoutViewSnapMarker();
107 layout->addItem( mSnapMarker );
108 mHorizontalSnapLine = createSnapLine();
109 mHorizontalSnapLine->hide();
110 layout->addItem( mHorizontalSnapLine );
111 mVerticalSnapLine = createSnapLine();
112 mVerticalSnapLine->hide();
113 layout->addItem( mVerticalSnapLine );
114 mSectionLabel =
nullptr;
116 if ( mHorizontalRuler )
118 connect( &layout->
guides(), &QAbstractItemModel::dataChanged, mHorizontalRuler, [
this] { mHorizontalRuler->update(); } );
119 connect( &layout->
guides(), &QAbstractItemModel::rowsInserted, mHorizontalRuler, [
this] { mHorizontalRuler->update(); } );
120 connect( &layout->
guides(), &QAbstractItemModel::rowsRemoved, mHorizontalRuler, [
this] { mHorizontalRuler->update(); } );
121 connect( &layout->
guides(), &QAbstractItemModel::modelReset, mHorizontalRuler, [
this] { mHorizontalRuler->update(); } );
123 if ( mVerticalRuler )
125 connect( &layout->
guides(), &QAbstractItemModel::dataChanged, mVerticalRuler, [
this] { mVerticalRuler->update(); } );
126 connect( &layout->
guides(), &QAbstractItemModel::rowsInserted, mVerticalRuler, [
this] { mVerticalRuler->update(); } );
127 connect( &layout->
guides(), &QAbstractItemModel::rowsRemoved, mVerticalRuler, [
this] { mVerticalRuler->update(); } );
128 connect( &layout->
guides(), &QAbstractItemModel::modelReset, mVerticalRuler, [
this] { mVerticalRuler->update(); } );
153 if ( mHorizontalSnapLine )
154 mHorizontalSnapLine->hide();
155 if ( mVerticalSnapLine )
156 mVerticalSnapLine->hide();
168 if ( mTool && mTool ==
tool )
172 setCursor( Qt::ArrowCursor );
178 mPreviewEffect->setEnabled( enabled );
183 return mPreviewEffect->isEnabled();
188 mPreviewEffect->setMode( mode );
193 return mPreviewEffect->mode();
198 double currentScale = transform().m11();
199 scale *= currentScale;
201 setTransform( QTransform::fromScale( scale, scale ) );
213 setTransform( QTransform::fromScale( level, level ) );
217 const double dpi = mScreenHelper->screenDpi();
222 setTransform( QTransform::fromScale( mmLevel, mmLevel ) );
230 mHorizontalRuler = ruler;
234 connect( &layout->guides(), &QAbstractItemModel::dataChanged, ruler, [
this] { mHorizontalRuler->update(); } );
235 connect( &layout->guides(), &QAbstractItemModel::rowsInserted, ruler, [
this] { mHorizontalRuler->update(); } );
236 connect( &layout->guides(), &QAbstractItemModel::rowsRemoved, ruler, [
this] { mHorizontalRuler->update(); } );
237 connect( &layout->guides(), &QAbstractItemModel::modelReset, ruler, [
this] { mHorizontalRuler->update(); } );
244 mVerticalRuler = ruler;
248 connect( &layout->guides(), &QAbstractItemModel::dataChanged, ruler, [
this] { mVerticalRuler->update(); } );
249 connect( &layout->guides(), &QAbstractItemModel::rowsInserted, ruler, [
this] { mVerticalRuler->update(); } );
250 connect( &layout->guides(), &QAbstractItemModel::rowsRemoved, ruler, [
this] { mVerticalRuler->update(); } );
251 connect( &layout->guides(), &QAbstractItemModel::modelReset, ruler, [
this] { mVerticalRuler->update(); } );
258 mMenuProvider.reset( provider );
263 return mMenuProvider.get();
269 return QList<QgsLayoutItemPage *>();
272 QRect viewportRect( 0, 0, viewport()->width(), viewport()->height() );
273 QRectF visibleRect = mapToScene( viewportRect ).boundingRect();
283 QRect viewportRect( 0, 0, viewport()->width(), viewport()->height() );
284 QRectF visibleRect = mapToScene( viewportRect ).boundingRect();
327 QDomElement documentElement = doc.createElement( u
"LayoutItemClipboard"_s );
331 QSet<QgsLayoutMultiFrame *> copiedMultiFrames;
338 const QList<QgsLayoutItem *> groupedItems = itemGroup->items();
341 groupedItem->writeXml( documentElement, doc, context );
344 else if (
QgsLayoutFrame *frame = qobject_cast<QgsLayoutFrame *>( item ) )
347 if ( frame->multiFrame() && !copiedMultiFrames.contains( frame->multiFrame() ) )
349 frame->multiFrame()->writeXml( documentElement, doc, context );
350 copiedMultiFrames.insert( frame->multiFrame() );
353 item->writeXml( documentElement, doc, context );
357 doc.appendChild( documentElement );
365 QDomNodeList itemsNodes = doc.elementsByTagName( u
"LayoutItem"_s );
366 for (
int i = 0; i < itemsNodes.count(); ++i )
368 QDomNode itemNode = itemsNodes.at( i );
369 if ( itemNode.isElement() )
371 itemNode.toElement().removeAttribute( u
"uuid"_s );
372 itemNode.toElement().removeAttribute( u
"groupUuid"_s );
375 QDomNodeList multiFrameNodes = doc.elementsByTagName( u
"LayoutMultiFrame"_s );
376 for (
int i = 0; i < multiFrameNodes.count(); ++i )
378 QDomNode multiFrameNode = multiFrameNodes.at( i );
379 if ( multiFrameNode.isElement() )
381 multiFrameNode.toElement().removeAttribute( u
"uuid"_s );
382 QDomNodeList frameNodes = multiFrameNode.toElement().elementsByTagName( u
"childFrame"_s );
383 for (
int j = 0; j < frameNodes.count(); ++j )
385 QDomNode itemNode = frameNodes.at( j );
386 if ( itemNode.isElement() )
388 itemNode.toElement().removeAttribute( u
"uuid"_s );
394 QMimeData *mimeData =
new QMimeData;
395 mimeData->setData( u
"text/xml"_s, doc.toByteArray() );
396 QClipboard *clipboard = QApplication::clipboard();
397 clipboard->setMimeData( mimeData );
403 return QList<QgsLayoutItem *>();
405 QList<QgsLayoutItem *> pastedItems;
407 QClipboard *clipboard = QApplication::clipboard();
408 const QMimeData *mimeData = clipboard->mimeData();
412 if ( doc.setContent( mimeData->data( u
"text/xml"_s ) ) )
414 QDomElement docElem = doc.documentElement();
415 if ( docElem.tagName() ==
"LayoutItemClipboard"_L1 )
424 pt = mapToScene( mapFromGlobal( QCursor::pos() ) );
430 pt = mapToScene( viewport()->rect().center() );
448 return QList<QgsLayoutItem *>();
450 QList<QgsLayoutItem *> pastedItems;
452 QClipboard *clipboard = QApplication::clipboard();
453 const QMimeData *mimeData = clipboard->mimeData();
457 if ( doc.setContent( mimeData->data( u
"text/xml"_s ) ) )
459 QDomElement docElem = doc.documentElement();
460 if ( docElem.tagName() ==
"LayoutItemClipboard"_L1 )
475 QClipboard *clipboard = QApplication::clipboard();
476 const QMimeData *mimeData = clipboard->mimeData();
480 if ( doc.setContent( mimeData->data( u
"text/xml"_s ) ) )
482 QDomElement docElem = doc.documentElement();
483 if ( docElem.tagName() ==
"LayoutItemClipboard"_L1 )
492 double increment = 1.0;
493 if ( event->modifiers() & Qt::ShiftModifier )
498 else if ( event->modifiers() & Qt::AltModifier )
501 double viewScale = transform().m11();
504 increment = 1 / viewScale;
510 switch ( event->key() )
528 return QPointF( deltaX, deltaY );
533 mPaintingEnabled = enabled;
543 if ( !mSectionLabel )
545 mSectionLabel =
new QgsLayoutReportSectionLabel(
currentLayout(),
this );
547 mSectionLabel->setRect( 0, -200, 1000, 200 );
548 mSectionLabel->setZValue( -1 );
550 mSectionLabel->setLabel( label );
558 fitInView( scene()->sceneRect(), Qt::KeepAspectRatio );
569 QRect viewportRect( 0, 0, viewport()->width(), viewport()->height() );
570 QRectF visibleRect = mapToScene( viewportRect ).boundingRect();
572 double verticalCenter = ( visibleRect.top() + visibleRect.bottom() ) / 2.0;
577 const double tinyHeight = 0.01;
578 QRectF targetRect( scene()->sceneRect().left(), verticalCenter - tinyHeight, scene()->sceneRect().width(), tinyHeight * 2 );
580 fitInView( targetRect, Qt::KeepAspectRatio );
614 const QList<QGraphicsItem *> itemList =
currentLayout()->items();
615 for ( QGraphicsItem *graphicsItem : itemList )
619 if ( item && !paperItem )
656 const QList<QGraphicsItem *> itemList =
currentLayout()->items();
657 for ( QGraphicsItem *graphicsItem : itemList )
661 if ( item && !paperItem )
664 if ( item->isSelected() || item->
isLocked() )
688 if ( !selectedItems.isEmpty() )
690 previousSelectedItem = selectedItems.at( 0 );
693 if ( !previousSelectedItem )
701 selectedItem = layout->
itemsModel()->findItemBelow( previousSelectedItem );
703 selectedItem = layout->
itemsModel()->findItemAbove( previousSelectedItem );
730 bool itemsRaised =
false;
753 bool itemsLowered =
false;
776 bool itemsRaised =
false;
799 bool itemsLowered =
false;
825 item->setLocked(
true );
845 const QList<QGraphicsItem *> itemList =
currentLayout()->items();
846 for ( QGraphicsItem *graphicItem : itemList )
907 item->setSelected(
false );
920 QList<QgsLayoutItem *> ungroupedItems;
928 ungroupedItems.append(
currentLayout()->ungroupItems( itemGroup ) );
932 if ( !ungroupedItems.empty() )
934 for (
QgsLayoutItem *item : std::as_const( ungroupedItems ) )
936 item->setSelected(
true );
948 mSnapMarker->setVisible(
false );
953 mTool->layoutPressEvent( me.get() );
954 event->setAccepted( me->isAccepted() );
957 if ( !mTool || !event->isAccepted() )
959 if ( event->button() == Qt::MiddleButton && mTool != mSpacePanTool && mTool != mSpaceZoomTool )
962 setTool( mMidMouseButtonPanTool );
965 else if ( event->button() == Qt::RightButton && mMenuProvider )
967 QMenu *menu = mMenuProvider->createContextMenu(
this,
currentLayout(), mapToScene( event->pos() ) );
970 menu->exec( event->globalPos() );
976 QGraphicsView::mousePressEvent( event );
989 mTool->layoutReleaseEvent( me.get() );
990 event->setAccepted( me->isAccepted() );
993 if ( !mTool || !event->isAccepted() )
994 QGraphicsView::mouseReleaseEvent( event );
1002 mMouseCurrentXY =
event->pos();
1004 QPointF cursorPos = mapToScene( mMouseCurrentXY );
1007 auto me = std::make_unique<QgsLayoutViewMouseEvent>(
this, event,
false );
1010 me->snapPoint( mHorizontalSnapLine, mVerticalSnapLine, mTool->ignoredSnapItems() );
1015 if ( me->isSnapped() )
1017 cursorPos = me->snappedPoint();
1020 mSnapMarker->setPos( me->snappedPoint() );
1021 mSnapMarker->setVisible(
true );
1024 else if ( mSnapMarker )
1026 mSnapMarker->setVisible(
false );
1029 mTool->layoutMoveEvent( me.get() );
1030 event->setAccepted( me->isAccepted() );
1036 if ( !mTool || !event->isAccepted() )
1037 QGraphicsView::mouseMoveEvent( event );
1048 mTool->layoutDoubleClickEvent( me.get() );
1049 event->setAccepted( me->isAccepted() );
1052 if ( !mTool || !event->isAccepted() )
1053 QGraphicsView::mouseDoubleClickEvent( event );
1063 mTool->wheelEvent( event );
1066 if ( !mTool || !event->isAccepted() )
1080 mTool->keyPressEvent( event );
1083 if ( mTool && event->isAccepted() )
1086 if ( event->key() == Qt::Key_Space && !event->isAutoRepeat() && mTool != mMidMouseButtonPanTool )
1088 if ( !( event->modifiers() & Qt::ControlModifier ) )
1100 else if ( event->key() == Qt::Key_Left || event->key() == Qt::Key_Right || event->key() == Qt::Key_Up || event->key() == Qt::Key_Down )
1111 item->attemptMoveBy( delta.x(), delta.y() );
1126 mTool->keyReleaseEvent( event );
1129 if ( !mTool || !event->isAccepted() )
1130 QGraphicsView::keyReleaseEvent( event );
1135 QGraphicsView::resizeEvent( event );
1142 QGraphicsView::scrollContentsBy( dx, dy );
1156 if ( mPaintingEnabled )
1158 QGraphicsView::paintEvent( event );
1167void QgsLayoutView::invalidateCachedRenders()
1173 QList<QgsLayoutItem *> items;
1178 item->invalidateCache();
1184 if ( mHorizontalRuler )
1186 mHorizontalRuler->setSceneTransform( viewportTransform() );
1188 if ( mVerticalRuler )
1190 mVerticalRuler->setSceneTransform( viewportTransform() );
1194 QRect viewportRect( 0, 0, viewport()->width(), viewport()->height() );
1195 QRectF visibleRect = mapToScene( viewportRect ).boundingRect();
1196 QPointF centerVisible = visibleRect.center();
1201 if ( newPage != mCurrentPage )
1203 mCurrentPage = newPage;
1214void QgsLayoutView::wheelZoom( QWheelEvent *event )
1219 bool zoomIn = reverseZoom ?
event->angleDelta().y() < 0 :
event->angleDelta().y() > 0;
1222 zoomFactor = 1.0 + ( zoomFactor - 1.0 ) / 120.0 * std::fabs( event->angleDelta().y() );
1224 if ( event->modifiers() & Qt::ControlModifier )
1227 zoomFactor = 1.0 + ( zoomFactor - 1.0 ) / 20.0;
1231 double scaleFactor = (
zoomIn ? 1 / zoomFactor : zoomFactor );
1234 QRect viewportRect( 0, 0, viewport()->width(), viewport()->height() );
1235 QgsRectangle visibleRect = QgsRectangle( mapToScene( viewportRect ).boundingRect() );
1238 QPointF scenePoint = mapToScene( event->position().x(), event->position().y() );
1241 QgsPointXY oldCenter( visibleRect.
center() );
1242 QgsPointXY newCenter( scenePoint.x() + ( ( oldCenter.x() - scenePoint.x() ) * scaleFactor ), scenePoint.y() + ( ( oldCenter.y() - scenePoint.y() ) * scaleFactor ) );
1243 centerOn( newCenter.x(), newCenter.y() );
1256QGraphicsLineItem *QgsLayoutView::createSnapLine()
const
1258 auto item = std::make_unique<QGraphicsLineItem>(
nullptr );
1259 QPen pen = QPen( QColor( Qt::blue ) );
1260 pen.setStyle( Qt::DotLine );
1261 pen.setWidthF( 0.0 );
1262 item->setPen( pen );
1264 return item.release();
1272QgsLayoutViewSnapMarker::QgsLayoutViewSnapMarker()
1273 : QGraphicsRectItem( QRectF( 0, 0, 0, 0 ) )
1276 QFontMetrics fm( f );
1277 mSize = fm.horizontalAdvance(
'X' );
1278 setPen( QPen( Qt::transparent, mSize ) );
1280 setFlags( flags() | QGraphicsItem::ItemIgnoresTransformations );
1284void QgsLayoutViewSnapMarker::paint( QPainter *p,
const QStyleOptionGraphicsItem *, QWidget * )
1286 QPen pen( QColor( 255, 0, 0 ) );
1289 p->setBrush( Qt::NoBrush );
1291 double halfSize = mSize / 2.0;
1292 p->drawLine( QLineF( -halfSize, -halfSize, halfSize, halfSize ) );
1293 p->drawLine( QLineF( -halfSize, halfSize, halfSize, -halfSize ) );
@ Millimeters
Millimeters.
Alignment
Alignment options.
static void alignItems(QgsLayout *layout, const QList< QgsLayoutItem * > &items, Alignment alignment)
Aligns a set of items from a layout in place.
static void distributeItems(QgsLayout *layout, const QList< QgsLayoutItem * > &items, Distribution distribution)
Distributes a set of items from a layout in place.
static void resizeItems(QgsLayout *layout, const QList< QgsLayoutItem * > &items, Resize resize)
Resizes a set of items from a layout in place.
Distribution
Distribution options.
Base class for frame items, which form a layout multiframe item.
A container for grouping several QgsLayoutItems.
Item representing the paper in a layout.
@ LayoutGroup
Grouped item.
Base class for graphical items within a QgsLayout.
@ UndoIncrementalMove
Layout item incremental movement, e.g. as a result of a keypress.
virtual void setSelected(bool selected)
Sets whether the item should be selected.
bool isLocked() const
Returns true if the item is locked, and cannot be interacted with using the mouse.
void setLocked(bool locked)
Sets whether the item is locked, preventing mouse interactions with the item.
double length() const
Returns the length of the measurement.
QList< int > visiblePageNumbers(const QRectF ®ion) const
Returns a list of the page numbers which are visible within the specified region (in layout coordinat...
void changed()
Emitted when pages are added or removed from the collection.
int pageNumberForPoint(QPointF point) const
Returns the page number corresponding to a point in the layout (in layout units).
QList< QgsLayoutItemPage * > visiblePages(const QRectF ®ion) const
Returns a list of the pages which are visible within the specified region (in layout coordinates).
A custom ruler widget for use with QgsLayoutView, displaying the current zoom and position of the vis...
void setLayoutView(QgsLayoutView *view)
Sets the current layout view to synchronize the ruler with.
void endCommand()
Saves final state of an object and pushes the active command to the undo history.
void beginMacro(const QString &commandText)
Starts a macro command, with the given descriptive commandText.
void beginCommand(QgsLayoutUndoObjectInterface *object, const QString &commandText, int id=0)
Begins a new undo command for the specified object.
void endMacro()
Ends a macro command.
void alignSelectedItems(QgsLayoutAligner::Alignment alignment)
Aligns all selected items using the specified alignment.
void zoomFull()
Zooms the view to the full extent of the layout.
void selectNextItemBelow()
Selects the next item below the existing selection, by item z order.
QgsLayoutView(QWidget *parent=nullptr)
Constructor for QgsLayoutView.
void moveSelectedItemsToBottom()
Lowers the selected items to the bottom of the z-order.
void pushStatusMessage(const QString &message)
Pushes a new status bar message to the view.
void viewChanged()
Updates associated rulers and other widgets after view extent or zoom has changed.
void cursorPosChanged(QPointF layoutPoint)
Emitted when the mouse cursor coordinates change within the view.
@ PasteModeCenter
Paste items in center of view.
@ PasteModeInPlace
Paste items in place.
@ PasteModeCursor
Paste items at cursor position.
void unlockAllItems()
Unlocks all locked items in the layout.
void deleteSelectedItems()
Deletes all selected items.
void mouseMoveEvent(QMouseEvent *event) override
QgsLayout * currentLayout
void setMenuProvider(QgsLayoutViewMenuProvider *provider)
Sets a provider for context menus.
void dragEnterEvent(QDragEnterEvent *e) override
void resizeEvent(QResizeEvent *event) override
void lowerSelectedItems()
Lowers the selected items down the z-order.
void setPaintingEnabled(bool enabled)
Sets whether widget repainting should be allowed for the view.
void mouseReleaseEvent(QMouseEvent *event) override
QgsPreviewEffect::PreviewMode previewMode() const
Returns the preview mode which may be used to modify the view's appearance.
void lockSelectedItems()
Locks any selected items, preventing them from being interacted with by mouse interactions.
void setSectionLabel(const QString &label)
Sets a section label, to display above the first page shown in the view.
void resizeSelectedItems(QgsLayoutAligner::Resize resize)
Resizes all selected items using the specified resize mode.
void setTool(QgsLayoutViewTool *tool)
Sets the tool currently being used in the view.
void zoomLevelChanged()
Emitted whenever the zoom level of the view is changed.
void deleteItems(const QList< QgsLayoutItem * > &items)
Delete the specified items.
void selectAll()
Selects all items in the view.
QList< QgsLayoutItem * > pasteItems(PasteMode mode)
Pastes items from clipboard, using the specified mode.
void willBeDeleted()
Emitted in the destructor when the view is about to be deleted, but is still in a perfectly valid sta...
QPointF deltaForKeyEvent(QKeyEvent *event)
Returns the delta (in layout coordinates) by which to move items for the given key event.
void setHorizontalRuler(QgsLayoutRuler *ruler)
Sets a horizontal ruler to synchronize with the view state.
~QgsLayoutView() override
void setPreviewMode(QgsPreviewEffect::PreviewMode mode)
Sets the preview mode which should be used to modify the view's appearance.
void deselectAll()
Deselects all items in the view.
void keyPressEvent(QKeyEvent *event) override
void zoomWidth()
Zooms the view to the full width of the layout.
void raiseSelectedItems()
Raises the selected items up the z-order.
void statusMessage(const QString &message)
Emitted when the view has a message for display in a parent window's status bar.
void itemFocused(QgsLayoutItem *item)
Emitted when an item is "focused" in the view, i.e.
void selectNextItemAbove()
Selects the next item above the existing selection, by item z order.
void moveSelectedItemsToTop()
Raises the selected items to the top of the z-order.
bool hasItemsInClipboard() const
Returns true if the current clipboard contains layout items.
void zoomActual()
Zooms to the actual size of the layout.
void setPreviewModeEnabled(bool enabled)
Sets whether a preview effect should be used to alter the view's appearance.
void layoutSet(QgsLayout *layout)
Emitted when a layout is set for the view.
void setCurrentLayout(QgsLayout *layout)
Sets the current layout to edit in the view.
void wheelEvent(QWheelEvent *event) override
ClipboardOperation
Clipboard operations.
void ungroupSelectedItems()
Ungroups all selected items.
void emitZoomLevelChanged()
Emits the zoomLevelChanged() signal.
bool previewModeEnabled() const
Returns true if a preview effect is being used to alter the view's appearance.
void zoomOut()
Zooms out of the view by a preset amount.
void setVerticalRuler(QgsLayoutRuler *ruler)
Sets a vertical ruler to synchronize with the view state.
QList< QgsLayoutItemPage * > visiblePages() const
Returns a list of page items which are currently visible in the view.
void copyItems(const QList< QgsLayoutItem * > &items, ClipboardOperation operation)
Cuts or copies the a list of items, respecting the specified operation.
void setZoomLevel(double level)
Sets the zoom level for the view, where a zoom level of 1.0 corresponds to 100%.
void distributeSelectedItems(QgsLayoutAligner::Distribution distribution)
Distributes all selected items using the specified distribution.
void unsetTool(QgsLayoutViewTool *tool)
Unsets the current view tool, if it matches the specified tool.
void invertSelection()
Inverts the current selection, selecting deselected items and deselecting and selected items.
void toolSet(QgsLayoutViewTool *tool)
Emitted when the current tool is changed.
void mouseDoubleClickEvent(QMouseEvent *event) override
void scaleSafe(double scale)
Scales the view in a safe way, by limiting the acceptable range of the scale applied.
void pageChanged(int page)
Emitted when the page visible in the view is changed.
void scrollContentsBy(int dx, int dy) override
void copySelectedItems(ClipboardOperation operation)
Cuts or copies the selected items, respecting the specified operation.
void zoomIn()
Zooms in to the view by a preset amount.
void paintEvent(QPaintEvent *event) override
void keyReleaseEvent(QKeyEvent *event) override
QgsLayoutViewMenuProvider * menuProvider() const
Returns the provider for context menus.
QList< int > visiblePageNumbers() const
Returns a list of page numbers for pages which are currently visible in the view.
void groupSelectedItems()
Groups all selected items.
void mousePressEvent(QMouseEvent *event) override
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
QgsLayoutModel * itemsModel()
Returns the items model attached to the layout.
QgsLayoutPageCollection * pageCollection()
Returns a pointer to the layout's page collection, which stores and manages page items in the layout.
void layoutItems(QList< T * > &itemList) const
Returns a list of layout items of a specific type.
QgsLayoutGuideCollection & guides()
Returns a reference to the layout's guide collection, which manages page snap guides.
bool moveItemToTop(QgsLayoutItem *item, bool deferUpdate=false)
Raises an item up to the top of the z-order.
bool moveItemToBottom(QgsLayoutItem *item, bool deferUpdate=false)
Lowers an item down to the bottom of the z-order.
QgsLayoutItemGroup * groupItems(const QList< QgsLayoutItem * > &items)
Creates a new group from a list of layout items and adds the group to the layout.
QList< QgsLayoutItem * > addItemsFromXml(const QDomElement &parentElement, const QDomDocument &document, const QgsReadWriteContext &context, QPointF *position=nullptr, bool pasteInPlace=false)
Add items from an XML representation to the layout.
bool lowerItem(QgsLayoutItem *item, bool deferUpdate=false)
Lowers an item down the z-order.
QgsLayoutMeasurement convertFromLayoutUnits(double length, Qgis::LayoutUnit unit) const
Converts a length measurement from the layout's native units to a specified target unit.
bool raiseItem(QgsLayoutItem *item, bool deferUpdate=false)
Raises an item up the z-order.
QList< QgsLayoutItem * > selectedLayoutItems(bool includeLockedItems=true)
Returns list of selected layout items.
void selectedItemChanged(QgsLayoutItem *selected)
Emitted whenever the selected item changes.
void deselectAll()
Clears any selected items in the layout.
void setSelectedItem(QgsLayoutItem *item)
Clears any selected items and sets item as the current selection.
void removeLayoutItem(QgsLayoutItem *item)
Removes an item from the layout.
void updateZValues(bool addUndoCommands=true)
Resets the z-values of items based on their position in the internal z order list.
@ ZSmartGuide
Z-value for smart (item bounds based) guides.
@ ZSnapIndicator
Z-value for snapping indicator.
QgsProject * project() const
The project associated with the layout.
QgsLayoutUndoStack * undoStack()
Returns a pointer to the layout's undo stack, which manages undo/redo states for the layout and it's ...
A graphics effect which can be applied to a widget to simulate various printing and color blindness m...
void setDirty(bool b=true)
Flag the project as dirty (modified).
A container for the context for various read/write operations on objects.
A utility class for dynamic handling of changes to screen properties.
static const QgsSettingsEntryDouble * settingsZoomFactor
Settings entry zoom factor.
static const QgsSettingsEntryBool * settingsReverseWheelZoom
Settings entry reverse wheel zoom.
void selectNextByZOrder(QgsLayout *layout, bool above)