![]() |
酷酷的馒头 · 使用 Mock 撰寫測試(jest.fn, ...· 3 天前 · |
![]() |
腹黑的领带 · Avoid Nesting when ...· 3 天前 · |
![]() |
忐忑的领带 · 依赖注入 | Vue.js· 3 天前 · |
![]() |
可爱的香瓜 · 組合式函數 | Vue.js· 3 天前 · |
![]() |
叛逆的长颈鹿 · Local Blob as a ...· 2 天前 · |
![]() |
睡不着的山楂 · 志田未来为《蜡笔小新》剧场版配音 饰演小新的 ...· 3 周前 · |
![]() |
慷慨的柿子 · 总书记划重点一年后 ...· 3 月前 · |
![]() |
不羁的勺子 · Python ...· 4 月前 · |
![]() |
英勇无比的日记本 · android中通过一个字符分割字符串 - ...· 6 月前 · |
![]() |
魁梧的卤蛋 · flex布局,子元素父元素同高度,子内文字垂 ...· 7 月前 · |
The QGraphicsScene class provides a surface for managing a large number of 2D graphical items. More...
Header: #include <QGraphicsScene> CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)The class serves as a container for QGraphicsItems. It is used together with QGraphicsView for visualizing graphical items, such as lines, rectangles, text, or even custom items, on a 2D surface. QGraphicsScene is part of the Graphics View Framework .
QGraphicsScene also provides functionality that lets you efficiently determine both the location of items, and for determining what items are visible within an arbitrary area on the scene. With the QGraphicsView widget, you can either visualize the whole scene, or zoom in and view only parts of the scene.
Example:
QGraphicsScene scene; scene.addText("Hello, world!"); QGraphicsView view(&scene); view.show();
Note that QGraphicsScene has no visual appearance of its own; it only manages the items. You need to create a QGraphicsView widget to visualize the scene.
To add items to a scene, you start off by constructing a QGraphicsScene object. Then, you have two options: either add your existing QGraphicsItem objects by calling addItem (), or you can call one of the convenience functions addEllipse (), addLine (), addPath (), addPixmap (), addPolygon (), addRect (), or addText (), which all return a pointer to the newly added item. The dimensions of the items added with these functions are relative to the item's coordinate system, and the items position is initialized to (0, 0) in the scene.
You can then visualize the scene using QGraphicsView . When the scene changes, (e.g., when an item moves or is transformed) QGraphicsScene emits the changed () signal. To remove an item, call removeItem ().
QGraphicsScene uses an indexing algorithm to manage the location of items efficiently. By default, a BSP (Binary Space Partitioning) tree is used; an algorithm suitable for large scenes where most items remain static (i.e., do not move around). You can choose to disable this index by calling setItemIndexMethod (). For more information about the available indexing algorithms, see the itemIndexMethod property.
The scene's bounding rect is set by calling setSceneRect (). Items can be placed at any position on the scene, and the size of the scene is by default unlimited. The scene rect is used only for internal bookkeeping, maintaining the scene's item index. If the scene rect is unset, QGraphicsScene will use the bounding area of all items, as returned by itemsBoundingRect (), as the scene rect. However, itemsBoundingRect () is a relatively time consuming function, as it operates by collecting positional information for every item on the scene. Because of this, you should always set the scene rect when operating on large scenes.
One of QGraphicsScene's greatest strengths is its ability to efficiently determine the location of items. Even with millions of items on the scene, the items () functions can determine the location of an item within a few milliseconds. There are several overloads to items (): one that finds items at a certain position, one that finds items inside or intersecting with a polygon or a rectangle, and more. The list of returned items is sorted by stacking order, with the topmost item being the first item in the list. For convenience, there is also an itemAt () function that returns the topmost item at a given position.
QGraphicsScene maintains selection information for the scene. To select items, call setSelectionArea (), and to clear the current selection, call clearSelection (). Call selectedItems () to get the list of all selected items.
Another responsibility that QGraphicsScene has, is to propagate events from QGraphicsView . To send an event to a scene, you construct an event that inherits QEvent , and then send it using, for example, QCoreApplication::sendEvent (). event () is responsible for dispatching the event to the individual items. Some common events are handled by convenience event handlers. For example, key press events are handled by keyPressEvent (), and mouse press events are handled by mousePressEvent ().
Key events are delivered to the focus item . To set the focus item, you can either call setFocusItem (), passing an item that accepts focus, or the item itself can call QGraphicsItem::setFocus (). Call focusItem () to get the current focus item. For compatibility with widgets, the scene also maintains its own focus information. By default, the scene does not have focus, and all key events are discarded. If setFocus () is called, or if an item on the scene gains focus, the scene automatically gains focus. If the scene has focus, hasFocus () will return true, and key events will be forwarded to the focus item, if any. If the scene loses focus, (i.e., someone calls clearFocus ()) while an item has focus, the scene will maintain its item focus information, and once the scene regains focus, it will make sure the last focus item regains focus.
For mouse-over effects, QGraphicsScene dispatches hover events . If an item accepts hover events (see QGraphicsItem::acceptHoverEvents ()), it will receive a GraphicsSceneHoverEnter event when the mouse enters its area. As the mouse continues moving inside the item's area, QGraphicsScene will send it GraphicsSceneHoverMove events. When the mouse leaves the item's area, the item will receive a GraphicsSceneHoverLeave event.
All mouse events are delivered to the current mouse grabber item. An item becomes the scene's mouse grabber if it accepts mouse events (see QGraphicsItem::acceptedMouseButtons ()) and it receives a mouse press. It stays the mouse grabber until it receives a mouse release when no other mouse buttons are pressed. You can call mouseGrabberItem () to determine what item is currently grabbing the mouse.
See also QGraphicsItem and QGraphicsView .
This enum describes the indexing algorithms QGraphicsScene provides for managing positional information about items on the scene.
See also setItemIndexMethod () and bspTreeDepth .
This enum describes the rendering layers in a QGraphicsScene . When QGraphicsScene draws the scene contents, it renders each of these layers separately, in order.
Each layer represents a flag that can be OR'ed together when calling functions such as invalidate () or QGraphicsView::invalidateScene ().
Constant | Value | Description |
---|---|---|
QGraphicsScene::BspTreeIndex
|
0
|
A Binary Space Partitioning tree is applied. All QGraphicsScene 's item location algorithms are of an order close to logarithmic complexity, by making use of binary search. Adding, moving and removing items is logarithmic. This approach is best for static scenes (i.e., scenes where most items do not move). |
QGraphicsScene::NoIndex
|
-1
|
No index is applied. Item location is of linear complexity, as all items on the scene are searched. Adding, moving and removing items, however, is done in constant time. This approach is ideal for dynamic scenes, where many items are added, moved or removed continuously. |
The SceneLayers type is a typedef for QFlags <SceneLayer>. It stores an OR combination of SceneLayer values.
See also invalidate () and QGraphicsView::invalidateScene ().
This property holds the background brush of the scene.
Set this property to changes the scene's background to a different color, gradient or texture. The default background brush is Qt::NoBrush . The background is drawn before (behind) the items.
Example:
QGraphicsScene scene; QGraphicsView view(&scene); view.show(); // a blue background scene.setBackgroundBrush(Qt::blue); // a gradient background QRadialGradient gradient(0, 0, 10); gradient.setSpread(QGradient::RepeatSpread); scene.setBackgroundBrush(gradient);
QGraphicsScene::render () calls drawBackground () to draw the scene background. For more detailed control over how the background is drawn, you can reimplement drawBackground () in a subclass of QGraphicsScene .
Access functions:
This property holds the depth of QGraphicsScene 's BSP index tree
This property has no effect when NoIndex is used.
This value determines the depth of QGraphicsScene 's BSP tree. The depth directly affects QGraphicsScene 's performance and memory usage; the latter growing exponentially with the depth of the tree. With an optimal tree depth, QGraphicsScene can instantly determine the locality of items, even for scenes with thousands or millions of items. This also greatly improves rendering performance.
By default, the value is 0, in which case Qt will guess a reasonable default depth based on the size, location and number of items in the scene. If these parameters change frequently, however, you may experience slowdowns as QGraphicsScene retunes the depth internally. You can avoid potential slowdowns by fixating the tree depth through setting this property.
The depth of the tree and the size of the scene rectangle decide the granularity of the scene's partitioning. The size of each scene segment is determined by the following algorithm:
QSizeF segmentSize = sceneRect().size() / pow(2, depth - 1);
The BSP tree has an optimal size when each segment contains between 0 and 10 items.
Access functions:
See also itemIndexMethod .
This property holds whether items gain focus when receiving a touch begin event.
By default, QGraphicsScene also transfers focus when you touch on a trackpad or similar. If the operating system is configured to not generate a synthetic mouse click on tapping the trackpad, this is surprising. If the operating system does generate synthetic mouse clicks on tapping the trackpad, the focus transfer on starting a touch gesture is unnecessary.
With focusOnTouch switched off, QGraphicsScene behaves as one would expect on macOS.
The default value is
true
, ensuring that the default behavior is just as in Qt versions prior to 5.12. Set to
false
to prevent touch events from triggering focus changes.
Access functions:
This property holds the scene's default font
This property provides the scene's font. The scene font defaults to, and resolves all its entries from, QApplication::font .
If the scene's font changes, either directly through setFont() or indirectly when the application font changes, QGraphicsScene first sends itself a FontChange event, and it then sends FontChange events to all top-level widget items in the scene. These items respond by resolving their own fonts to the scene, and they then notify their children, who again notify their children, and so on, until all widget items have updated their fonts.
Changing the scene font, (directly or indirectly through QApplication::setFont (),) automatically schedules a redraw the entire scene.
Access functions:
See also QWidget::font , QApplication::setFont (), palette , and style ().
This property holds the foreground brush of the scene.
Change this property to set the scene's foreground to a different color, gradient or texture.
The foreground is drawn after (on top of) the items. The default foreground brush is Qt::NoBrush ( i.e. the foreground is not drawn).
Example:
QGraphicsScene scene; QGraphicsView view(&scene); view.show(); // a white semi-transparent foreground scene.setForegroundBrush(QColor(255, 255, 255, 127)); // a grid foreground scene.setForegroundBrush(QBrush(Qt::lightGray, Qt::CrossPattern));
QGraphicsScene::render () calls drawForeground () to draw the scene foreground. For more detailed control over how the foreground is drawn, you can reimplement the drawForeground () function in a QGraphicsScene subclass.
Access functions:
This property holds the item indexing method.
QGraphicsScene applies an indexing algorithm to the scene, to speed up item discovery functions like items () and itemAt (). Indexing is most efficient for static scenes (i.e., where items don't move around). For dynamic scenes, or scenes with many animated items, the index bookkeeping can outweigh the fast lookup speeds.
For the common case, the default index method
BspTreeIndex
works fine. If your scene uses many animations and you are experiencing slowness, you can disable indexing by calling
setItemIndexMethod(NoIndex)
.
Access functions:
See also bspTreeDepth .
This property holds the minimal view-transformed size an item must have to be drawn
Note: Items that are not drawn as a result of being too small, are still returned by methods such as items () and itemAt (), and participate in collision detection and interactions. It is recommended that you set minimumRenderSize() to a value less than or equal to 1 in order to avoid large unrendered items that are interactive.
Access functions:
See also QStyleOptionGraphicsItem::levelOfDetailFromTransform ().
This property holds the scene's default palette
This property provides the scene's palette. The scene palette defaults to, and resolves all its entries from, QApplication::palette .
If the scene's palette changes, either directly through setPalette() or indirectly when the application palette changes, QGraphicsScene first sends itself a PaletteChange event, and it then sends PaletteChange events to all top-level widget items in the scene. These items respond by resolving their own palettes to the scene, and they then notify their children, who again notify their children, and so on, until all widget items have updated their palettes.
Changing the scene palette, (directly or indirectly through QApplication::setPalette (),) automatically schedules a redraw the entire scene.
Access functions:
See also QWidget::palette , QApplication::setPalette (), font , and style ().
This property holds the scene rectangle; the bounding rectangle of the scene
The scene rectangle defines the extent of the scene. It is primarily used by QGraphicsView to determine the view's default scrollable area, and by QGraphicsScene to manage item indexing.
If unset, or if set to a null QRectF , sceneRect() will return the largest bounding rect of all items on the scene since the scene was created (i.e., a rectangle that grows when items are added to or moved in the scene, but never shrinks).
Access functions:
See also width (), height (), and QGraphicsView::sceneRect .
This property holds whether clicking into the scene background will clear focus
In a QGraphicsScene with stickyFocus set to true, focus will remain unchanged when the user clicks into the scene background or on an item that does not accept focus. Otherwise, focus will be cleared.
By default, this property is
false
.
Focus changes in response to a mouse press. You can reimplement mousePressEvent () in a subclass of QGraphicsScene to toggle this property based on where the user has clicked.
Access functions:
See also clearFocus () and setFocusItem ().
Constructs a QGraphicsScene object. The parent parameter is passed to QObject 's constructor.
Constructs a QGraphicsScene object, using sceneRect for its scene rectangle. The parent parameter is passed to QObject 's constructor.
See also sceneRect .
Constructs a QGraphicsScene object, using the rectangle specified by ( x , y ), and the given width and height for its scene rectangle. The parent parameter is passed to QObject 's constructor.
See also sceneRect .
[virtual noexcept]
QGraphicsScene::
~QGraphicsScene
()
Returns the current active panel, or
nullptr
if no panel is currently active.
See also QGraphicsScene::setActivePanel ().
Returns the current active window, or
nullptr
if no window is currently active.
See also QGraphicsScene::setActiveWindow ().
If the item is visible (i.e.,
QGraphicsItem::isVisible
() returns
true
),
QGraphicsScene
will emit
changed
() once control goes back to the event loop.
See also addLine (), addPath (), addPixmap (), addRect (), addText (), addItem (), and addWidget ().
This convenience function is equivalent to calling addEllipse( QRectF ( x , y , w , h ), pen , brush ).
Adds or moves the item and all its children to this scene. This scene takes ownership of the item .
If the item is visible (i.e., QGraphicsItem::isVisible () returns true), QGraphicsScene will emit changed () once control goes back to the event loop.
If the item is already in a different scene, it will first be removed from its old scene, and then added to this scene as a top-level.
QGraphicsScene will send ItemSceneChange notifications to item while it is added to the scene. If item does not currently belong to a scene, only one notification is sent. If it does belong to scene already (i.e., it is moved to this scene), QGraphicsScene will send an addition notification as the item is removed from its previous scene.
If the item is a panel, the scene is active, and there is no active panel in the scene, then the item will be activated.
See also removeItem (), addEllipse (), addLine (), addPath (), addPixmap (), addRect (), addText (), addWidget (), and Sorting .
If the item is visible (i.e.,
QGraphicsItem::isVisible
() returns
true
),
QGraphicsScene
will emit
changed
() once control goes back to the event loop.
See also addEllipse (), addPath (), addPixmap (), addRect (), addText (), addItem (), and addWidget ().
This convenience function is equivalent to calling addLine( QLineF ( x1 , y1 , x2 , y2 ), pen ).
If the item is visible (i.e.,
QGraphicsItem::isVisible
() returns
true
),
QGraphicsScene
will emit
changed
() once control goes back to the event loop.
See also addEllipse (), addLine (), addPixmap (), addRect (), addText (), addItem (), and addWidget ().
If the item is visible (i.e.,
QGraphicsItem::isVisible
() returns
true
),
QGraphicsScene
will emit
changed
() once control goes back to the event loop.
See also addEllipse (), addLine (), addPath (), addRect (), addText (), addItem (), and addWidget ().
If the item is visible (i.e.,
QGraphicsItem::isVisible
() returns
true
),
QGraphicsScene
will emit
changed
() once control goes back to the event loop.
See also addEllipse (), addLine (), addPath (), addRect (), addText (), addItem (), and addWidget ().
Note that the item's geometry is provided in item coordinates, and its position is initialized to (0, 0). For example, if a QRect (50, 50, 100, 100) is added, its top-left corner will be at (50, 50) relative to the origin in the item's coordinate system.
If the item is visible (i.e.,
QGraphicsItem::isVisible
() returns
true
),
QGraphicsScene
will emit
changed
() once control goes back to the event loop.
See also addEllipse (), addLine (), addPixmap (), addPixmap (), addText (), addItem (), and addWidget ().
This convenience function is equivalent to calling addRect( QRectF ( x , y , w , h ), pen , brush ).
Creates and adds a QGraphicsSimpleTextItem to the scene, and returns the item pointer. The text string is initialized to text , and its font is initialized to font .
The item's position is initialized to (0, 0).
If the item is visible (i.e.,
QGraphicsItem::isVisible
() returns
true
),
QGraphicsScene
will emit
changed
() once control goes back to the event loop.
See also addEllipse (), addLine (), addPixmap (), addPixmap (), addRect (), addItem (), and addWidget ().
The item's position is initialized to (0, 0).
If the item is visible (i.e.,
QGraphicsItem::isVisible
() returns
true
),
QGraphicsScene
will emit
changed
() once control goes back to the event loop.
See also addEllipse (), addLine (), addPixmap (), addPixmap (), addRect (), addItem (), and addWidget ().
Creates a new QGraphicsProxyWidget for widget , adds it to the scene, and returns a pointer to the proxy. wFlags set the default window flags for the embedding proxy widget.
The item's position is initialized to (0, 0).
If the item is visible (i.e.,
QGraphicsItem::isVisible
() returns
true
),
QGraphicsScene
will emit
changed
() once control goes back to the event loop.
Note that widgets with the Qt::WA_PaintOnScreen widget attribute set and widgets that wrap an external application or controller are not supported. Examples are QOpenGLWidget and QAxWidget.
See also addEllipse (), addLine (), addPixmap (), addPixmap (), addRect (), addText (), addSimpleText (), and addItem ().
[slot]
void
QGraphicsScene::
advance
()
This slot advances the scene by one step, by calling QGraphicsItem::advance () for all items on the scene. This is done in two phases: in the first phase, all items are notified that the scene is about to change, and in the second phase all items are notified that they can move. In the first phase, QGraphicsItem::advance () is called passing a value of 0 as an argument, and 1 is passed in the second phase.
Note that you can also use the Animation Framework for animations.
See also QGraphicsItem::advance () and QTimeLine .
[signal]
void
QGraphicsScene::
changed
(const
QList
<
QRectF
> &
region
)
This signal is emitted by QGraphicsScene when control reaches the event loop, if the scene content changes. The region parameter contains a list of scene rectangles that indicate the area that has been changed.
See also QGraphicsView::updateScene ().
[slot]
void
QGraphicsScene::
clear
()
Removes and deletes all items from the scene, but otherwise leaves the state of the scene unchanged.
A scene that does not have focus ignores key events.
See also hasFocus (), setFocus (), and setFocusItem ().
[slot]
void
QGraphicsScene::
clearSelection
()
See also setSelectionArea () and selectedItems ().
Returns a list of all items that collide with item . Collisions are determined by calling QGraphicsItem::collidesWithItem (); the collision detection is determined by mode . By default, all items whose shape intersects item or is contained inside item 's shape are returned.
The items are returned in descending stacking order (i.e., the first item in the list is the uppermost item, and the last item is the lowermost item).
See also items (), itemAt (), QGraphicsItem::collidesWithItem (), and Sorting .
[virtual protected]
void
QGraphicsScene::
contextMenuEvent
(
QGraphicsSceneContextMenuEvent
*
contextMenuEvent
)
Note: See items () for a definition of which items are considered visible by this function.
See also QGraphicsItem::contextMenuEvent ().
Groups all items in items into a new QGraphicsItemGroup , and returns a pointer to the group. The group is created with the common ancestor of items as its parent, and with position (0, 0). The items are all reparented to the group, and their positions and transformations are mapped to the group. If items is empty, this function will return an empty top-level QGraphicsItemGroup .
QGraphicsScene has ownership of the group item; you do not need to delete it. To dismantle (ungroup) a group, call destroyItemGroup ().
See also destroyItemGroup () and QGraphicsItemGroup::addToGroup ().
See also createItemGroup () and QGraphicsItemGroup::removeFromGroup ().
[virtual protected]
void
QGraphicsScene::
dragEnterEvent
(
QGraphicsSceneDragDropEvent
*
event
)
The default implementation accepts the event and prepares the scene to accept drag move events.
See also QGraphicsItem::dragEnterEvent (), dragMoveEvent (), dragLeaveEvent (), and dropEvent ().
[virtual protected]
void
QGraphicsScene::
dragLeaveEvent
(
QGraphicsSceneDragDropEvent
*
event
)
See also QGraphicsItem::dragLeaveEvent (), dragEnterEvent (), dragMoveEvent (), and dropEvent ().
[virtual protected]
void
QGraphicsScene::
dragMoveEvent
(
QGraphicsSceneDragDropEvent
*
event
)
Note: See items () for a definition of which items are considered visible by this function.
See also QGraphicsItem::dragMoveEvent (), dragEnterEvent (), dragLeaveEvent (), and dropEvent ().
[virtual protected]
void
QGraphicsScene::
drawBackground
(
QPainter
*
painter
, const
QRectF
&
rect
)
All painting is done in scene coordinates. The rect parameter is the exposed rectangle.
If all you want is to define a color, texture, or gradient for the background, you can call setBackgroundBrush () instead.
See also drawForeground () and drawItems ().
[virtual protected]
void
QGraphicsScene::
drawForeground
(
QPainter
*
painter
, const
QRectF
&
rect
)
All painting is done in scene coordinates. The rect parameter is the exposed rectangle.
If all you want is to define a color, texture or gradient for the foreground, you can call setForegroundBrush () instead.
See also drawBackground () and drawItems ().
[virtual protected]
void
QGraphicsScene::
dropEvent
(
QGraphicsSceneDragDropEvent
*
event
)
See also QGraphicsItem::dropEvent (), dragEnterEvent (), dragMoveEvent (), and dragLeaveEvent ().
[override virtual protected]
bool
QGraphicsScene::
event
(
QEvent
*
event
)
Reimplements: QObject::event (QEvent *e).
Processes the event event , and dispatches it to the respective event handlers.
In addition to calling the convenience event handlers, this function is responsible for converting mouse move events to hover events for when there is no mouse grabber item. Hover events are delivered directly to items; there is no convenience function for them.
Unlike QWidget , QGraphicsScene does not have the convenience functions enterEvent () and leaveEvent (). Use this function to obtain those events instead.
Returns
true
if
event
has been recognized and processed; otherwise, returns
false
.
See also contextMenuEvent (), keyPressEvent (), keyReleaseEvent (), mousePressEvent (), mouseMoveEvent (), mouseReleaseEvent (), mouseDoubleClickEvent (), focusInEvent (), and focusOutEvent ().
[override virtual protected]
bool
QGraphicsScene::
eventFilter
(
QObject
*
watched
,
QEvent
*
event
)
Reimplements: QObject::eventFilter (QObject *watched, QEvent *event).
QGraphicsScene filters QApplication 's events to detect palette and font changes.
[virtual protected]
void
QGraphicsScene::
focusInEvent
(
QFocusEvent
*
focusEvent
)
The default implementation sets focus on the scene, and then on the last focus item.
See also QGraphicsItem::focusOutEvent ().
The focus item receives keyboard input when the scene receives a key event.
See also setFocusItem (), QGraphicsItem::hasFocus (), and isActive ().
[signal]
void
QGraphicsScene::
focusItemChanged
(
QGraphicsItem
*
newFocusItem
,
QGraphicsItem
*
oldFocusItem
,
Qt::FocusReason
reason
)
This signal is emitted by QGraphicsScene whenever focus changes in the scene (i.e., when an item gains or loses input focus, or when focus passes from one item to another). You can connect to this signal if you need to keep track of when other items gain input focus. It is particularly useful for implementing virtual keyboards, input methods, and cursor items.
oldFocusItem
is a pointer to the item that previously had focus, or 0 if no item had focus before the signal was emitted.
newFocusItem
is a pointer to the item that gained input focus, or
nullptr
if focus was lost.
reason
is the reason for the focus change (e.g., if the scene was deactivated while an input field had focus,
oldFocusItem
would point to the input field item,
newFocusItem
would be
nullptr
, and
reason
would be
Qt::ActiveWindowFocusReason
.
[virtual protected slot]
bool
QGraphicsScene::
focusNextPrevChild
(
bool
next
)
You can reimplement this function in a subclass of QGraphicsScene to provide fine-grained control over how tab focus passes inside your scene. The default implementation is based on the tab focus chain defined by QGraphicsWidget::setTabOrder ().
[virtual protected]
void
QGraphicsScene::
focusOutEvent
(
QFocusEvent
*
focusEvent
)
The default implementation removes focus from any focus item, then removes focus from the scene.
See also QGraphicsItem::focusInEvent ().
Returns
true
if the scene has focus; otherwise returns
false
. If the scene has focus, it will forward key events from
QKeyEvent
to any item that has focus.
See also setFocus () and setFocusItem ().
This convenience function is equivalent to calling
sceneRect().height()
.
[virtual protected]
void
QGraphicsScene::
helpEvent
(
QGraphicsSceneHelpEvent
*
helpEvent
)
This event handler, for event helpEvent , can be reimplemented in a subclass to receive help events. The events are of type QEvent::ToolTip , which are created when a tooltip is requested.
The default implementation shows the tooltip of the topmost visible item, i.e., the item with the highest z-value, at the mouse cursor position. If no item has a tooltip set, this function does nothing.
Note: See items () for a definition of which items are considered visible by this function.
See also QGraphicsItem::toolTip () and QGraphicsSceneHelpEvent .
[virtual protected]
void
QGraphicsScene::
inputMethodEvent
(
QInputMethodEvent
*
event
)
The default implementation forwards the event to the focusItem (). If no item currently has focus or the current focus item does not accept input methods, this function does nothing.
See also QGraphicsItem::inputMethodEvent ().
[virtual]
QVariant
QGraphicsScene::
inputMethodQuery
(
Qt::InputMethodQuery
query
) const
The query parameter specifies which property is queried.
See also QWidget::inputMethodQuery ().
[slot]
void
QGraphicsScene::
invalidate
(const
QRectF
&
rect
= QRectF(),
QGraphicsScene::SceneLayers
layers
= AllLayers)
You can use this function overload to notify QGraphicsScene of changes to the background or the foreground of the scene. This function is commonly used for scenes with tile-based backgrounds to notify changes when QGraphicsView has enabled CacheBackground .
Example:
QRectF TileScene::rectForTile(int x, int y) const // Return the rectangle for the tile at position (x, y). return QRectF(x * tileWidth, y * tileHeight, tileWidth, tileHeight); void TileScene::setTile(int x, int y, const QPixmap &pixmap) // Sets or replaces the tile at position (x, y) with pixmap. if (x >= 0 && x < numTilesH && y >= 0 && y < numTilesV) { tiles[y][x] = pixmap; invalidate(rectForTile(x, y), BackgroundLayer); void TileScene::drawBackground(QPainter *painter, const QRectF &exposed) // Draws all tiles that intersect the exposed area. for (int y = 0; y < numTilesV; ++y) { for (int x = 0; x < numTilesH; ++x) { QRectF rect = rectForTile(x, y); if (exposed.intersects(rect)) painter->drawPixmap(rect.topLeft(), tiles[y][x]);Note that QGraphicsView currently supports background caching only (see QGraphicsView::CacheBackground). This function is equivalent to calling update() if any layer but BackgroundLayer is passed.
See also QGraphicsView::resetCachedContent().
void QGraphicsScene::invalidate(qreal x, qreal y, qreal w, qreal h, QGraphicsScene::SceneLayers layers = AllLayers)
This is an overloaded function.
This convenience function is equivalent to calling invalidate(QRectF(x, y, w, h), layers);
bool QGraphicsScene::isActive() const
Returns
true
if the scene is active (e.g., it's viewed by at least one QGraphicsView that is active); otherwise returnsfalse
.See also QGraphicsItem::isActive() and QWidget::isActiveWindow().
QGraphicsItem *QGraphicsScene::itemAt(const QPointF &position, const QTransform &deviceTransform) const
Note: See items() for a definition of which items are considered visible by this function.
See also items(), collidingItems(), and Sorting.
QGraphicsItem *QGraphicsScene::itemAt(qreal x, qreal y, const QTransform &deviceTransform) const
This is an overloaded function.
This convenience function is equivalent to calling
itemAt(QPointF(x, y), deviceTransform)
.Note: See items() for a definition of which items are considered visible by this function.
QList<QGraphicsItem *> QGraphicsScene::items(Qt::SortOrder order = Qt::DescendingOrder) const
Returns an ordered list of all items on the scene. order decides the stacking order.
See also addItem(), removeItem(), and Sorting.
QList<QGraphicsItem *> QGraphicsScene::items(const QPointF &pos, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const
The default value for mode is Qt::IntersectsItemShape; all items whose exact shape intersects with pos are returned.
deviceTransform is the transformation that applies to the view, and needs to be provided if the scene contains items that ignore transformations.
See also itemAt() and Sorting.
QList<QGraphicsItem *> QGraphicsScene::items(const QRectF &rect, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const
This is an overloaded function.
The default value for mode is Qt::IntersectsItemShape; all items whose exact shape intersects with or is contained by rect are returned.
deviceTransform is the transformation that applies to the view, and needs to be provided if the scene contains items that ignore transformations.
See also itemAt() and Sorting.
QList<QGraphicsItem *> QGraphicsScene::items(const QPolygonF &polygon, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const
This is an overloaded function.
The default value for mode is Qt::IntersectsItemShape; all items whose exact shape intersects with or is contained by polygon are returned.
deviceTransform is the transformation that applies to the view, and needs to be provided if the scene contains items that ignore transformations.
See also itemAt() and Sorting.
QList<QGraphicsItem *> QGraphicsScene::items(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const
This is an overloaded function.
The default value for mode is Qt::IntersectsItemShape; all items whose exact shape intersects with or is contained by path are returned.
deviceTransform is the transformation that applies to the view, and needs to be provided if the scene contains items that ignore transformations.
See also itemAt() and Sorting.
QList<QGraphicsItem *> QGraphicsScene::items(qreal x, qreal y, qreal w, qreal h, Qt::ItemSelectionMode mode, Qt::SortOrder order, const QTransform &deviceTransform = QTransform()) const
This is an overloaded function.
QRectF QGraphicsScene::itemsBoundingRect() const
[virtual protected]
void QGraphicsScene::keyPressEvent(QKeyEvent *keyEvent)See also QGraphicsItem::keyPressEvent() and focusItem().
[virtual protected]
void QGraphicsScene::keyReleaseEvent(QKeyEvent *keyEvent)See also QGraphicsItem::keyReleaseEvent() and focusItem().
[virtual protected]
void QGraphicsScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *mouseEvent)The default implementation is similar to mousePressEvent().
Note: See items() for a definition of which items are considered visible by this function.
See also QGraphicsItem::mousePressEvent(), QGraphicsItem::mouseMoveEvent(), QGraphicsItem::mouseReleaseEvent(), and QGraphicsItem::setAcceptedMouseButtons().
QGraphicsItem *QGraphicsScene::mouseGrabberItem() const
item->setVisible(false)
), or if it becomes disabled (i.e., someone calls item->setEnabled(false)
), it loses the mouse grab.[virtual protected]
void QGraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)See also QGraphicsItem::mousePressEvent(), QGraphicsItem::mouseReleaseEvent(), QGraphicsItem::mouseDoubleClickEvent(), and QGraphicsItem::setAcceptedMouseButtons().
[virtual protected]
void QGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)Note: See items() for a definition of which items are considered visible by this function.
See also QGraphicsItem::mousePressEvent() and QGraphicsItem::setAcceptedMouseButtons().
[virtual protected]
void QGraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)See also QGraphicsItem::mousePressEvent(), QGraphicsItem::mouseMoveEvent(), QGraphicsItem::mouseDoubleClickEvent(), and QGraphicsItem::setAcceptedMouseButtons().
Removes the item item and all its children from the scene. The ownership of item is passed on to the caller (i.e., QGraphicsScene will no longer delete item when destroyed).
See also addItem().
Renders the source rect from scene into target, using painter. This function is useful for capturing the contents of the scene onto a paint device, such as a QImage (e.g., to take a screenshot), or for printing with QPrinter. For example:
QGraphicsScene scene; scene.addItem(... ... QPrinter printer(QPrinter::HighResolution); printer.setPaperSize(QPrinter::A4); QPainter painter(&printer); scene.render(&painter);
If source is a null rect, this function will use sceneRect() to determine what to render. If target is a null rect, the dimensions of painter's paint device will be used.
The source rect contents will be transformed according to aspectRatioMode to fit into the target rect. By default, the aspect ratio is kept, and source is scaled to fit in target.
See also QGraphicsView::render().
[signal]
void QGraphicsScene::sceneRectChanged(const QRectF &rect)This signal is emitted by QGraphicsScene whenever the scene rect changes. The rect parameter is the new scene rectangle.
See also QGraphicsView::updateSceneRect().
Returns a list of all currently selected items. The items are returned in no particular order.
Returns the selection area that was previously set with setSelectionArea(), or an empty QPainterPath if no selection area has been set.
See also setSelectionArea().
[signal]
void QGraphicsScene::selectionChanged()This signal is emitted by QGraphicsScene whenever the selection changes. You can call selectedItems() to get the new list of selected items.
The selection changes whenever an item is selected or unselected, a selection area is set, cleared or otherwise changed, if a preselected item is added to the scene, or if a selected item is removed from the scene.
QGraphicsScene emits this signal only once for group selection operations. For example, if you set a selection area, select or unselect a QGraphicsItemGroup, or if you add or remove from the scene a parent item that contains several selected items, selectionChanged() is emitted only once after the operation has completed (instead of once for each item).
See also setSelectionArea(), selectedItems(), and QGraphicsItem::setSelected().
Sends event event to item item through possible event filters.
The event is sent only if the item is enabled.
See also QGraphicsItem::sceneEvent() and QGraphicsItem::sceneEventFilter().
Activates item, which must be an item in this scene. You can also pass 0 for item, in which case QGraphicsScene will deactivate any currently active panel.
If the scene is currently inactive, item remains inactive until the scene becomes active (or, ir item is nullptr
, no item will be activated).
See also activePanel(), isActive(), and QGraphicsItem::isActive().
Activates widget, which must be a widget in this scene. You can also pass 0 for widget, in which case QGraphicsScene will deactivate any currently active window.
See also activeWindow() and QGraphicsWidget::isActiveWindow().
Sets focus on the scene by sending a QFocusEvent to the scene, passing focusReason as the reason. If the scene regains focus after having previously lost it while an item had focus, the last focus item will receive focus with focusReason as the reason.
If the scene already has focus, this function does nothing.
See also hasFocus(), clearFocus(), and setFocusItem().
If item is nullptr
, or if it either does not accept focus (i.e., it does not have the QGraphicsItem::ItemIsFocusable flag enabled), or is not visible or not enabled, this function only removes focus from any previous focusitem.
If item is not nullptr
, and the scene does not currently have focus (i.e., hasFocus() returns false
), this function will call setFocus() automatically.
See also focusItem(), hasFocus(), and setFocus().
Sets the selection area to path. All items within this area are immediately selected, and all items outside are unselected. You can get the list of all selected items by calling selectedItems().
deviceTransform is the transformation that applies to the view, and needs to be provided if the scene contains items that ignore transformations.
For an item to be selected, it must be marked as selectable (QGraphicsItem::ItemIsSelectable).
See also clearSelection() and selectionArea().
This is an overloaded function.
Sets the selection area to path using mode to determine if items are included in the selection area.
selectionOperation determines what to do with the currently selected items.
See also clearSelection() and selectionArea().
Sets or replaces the style of the scene to style, and reparents the style to this scene. Any previously assigned style is deleted. The scene's style defaults to QApplication::style(), and serves as the default for all QGraphicsWidget items in the scene.
Changing the style, either directly by calling this function, or indirectly by calling QApplication::setStyle(), will automatically update the style for all widgets in the scene that do not have a style explicitly assigned to them.
If style is nullptr
, QGraphicsScene will revert to QApplication::style().
See also style().
Returns the scene's style, or the same as QApplication::style() if the scene has not been explicitly assigned a style.
See also setStyle().
[slot]
void QGraphicsScene::update(const QRectF &rect = QRectF())Schedules a redraw of the area rect on the scene.
See also sceneRect() and changed().
This is an overloaded function.
This function is equivalent to calling update(QRectF(x, y, w, h));
Returns a list of all the views that display this scene.
See also QGraphicsView::scene().
[virtual protected]
void QGraphicsScene::wheelEvent(QGraphicsSceneWheelEvent *wheelEvent)Note: See items() for a definition of which items are considered visible by this function.
See also QGraphicsItem::wheelEvent().
This convenience function is equivalent to calling sceneRect().width().
See also height().
© 2024 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.Constant | Value | Description |
---|---|---|
QGraphicsScene::ItemLayer
|
0x1
|
The item layer. QGraphicsScene renders all items are in this layer by calling the virtual function drawItems(). The item layer is drawn after the background layer, but before the foreground layer. |
QGraphicsScene::BackgroundLayer
|
0x2
|
The background layer. QGraphicsScene renders the scene's background in this layer by calling the virtual function drawBackground (). The background layer is drawn first of all layers. |
QGraphicsScene::ForegroundLayer
|
0x4
|
The foreground layer. QGraphicsScene renders the scene's foreground in this layer by calling the virtual function drawForeground (). The foreground layer is drawn last of all layers. |
QGraphicsScene::AllLayers
|
0xffff
|
All layers; this value represents a combination of all three layers. |
QBrush | backgroundBrush () const | |
void | setBackgroundBrush (const QBrush & brush ) | |
int | bspTreeDepth () const | |
void | setBspTreeDepth (int depth ) | |
bool | focusOnTouch () const | |
void | setFocusOnTouch (bool enabled ) | |
QFont | font () const | |
void | setFont (const QFont & font ) | |
QBrush | foregroundBrush () const | |
void | setForegroundBrush (const QBrush & brush ) | |
QGraphicsScene::ItemIndexMethod | itemIndexMethod () const | |
void | setItemIndexMethod (QGraphicsScene::ItemIndexMethod method ) | |
qreal | minimumRenderSize () const | |
void | setMinimumRenderSize (qreal minSize ) | |
QPalette | palette () const | |
void | setPalette (const QPalette & palette ) | |
QRectF | sceneRect () const | |
void | setSceneRect (const QRectF & rect ) | |
void | setSceneRect (qreal x , qreal y , qreal w , qreal h ) | |
bool | stickyFocus () const | |
void | setStickyFocus (bool enabled ) |
![]() |
忐忑的领带 · 依赖注入 | Vue.js 3 天前 |
![]() |
可爱的香瓜 · 組合式函數 | Vue.js 3 天前 |
![]() |
叛逆的长颈鹿 · Local Blob as a Placeholder + Redraw Wave after Loading · katspaugh/wavesurfer.js · Discussion #3975 2 天前 |
![]() |
慷慨的柿子 · 总书记划重点一年后 粤港澳大湾区官宣GDP破14万亿元 3 月前 |