QGraphicsScene Class
La clase QGraphicsScene proporciona una superficie para gestionar un gran número de elementos gráficos 2D. Más...
| Cabecera: | #include <QGraphicsScene> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets)target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Hereda: | QObject |
Tipos públicos
| enum | ItemIndexMethod { BspTreeIndex, NoIndex } |
| enum | SceneLayer { ItemLayer, BackgroundLayer, ForegroundLayer, AllLayers } |
| flags | SceneLayers |
Propiedades
|
|
Funciones públicas
| QGraphicsScene(QObject *parent = nullptr) | |
| QGraphicsScene(const QRectF &sceneRect, QObject *parent = nullptr) | |
| QGraphicsScene(qreal x, qreal y, qreal width, qreal height, QObject *parent = nullptr) | |
| virtual | ~QGraphicsScene() |
| QGraphicsItem * | activePanel() const |
| QGraphicsWidget * | activeWindow() const |
| QGraphicsEllipseItem * | addEllipse(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush = QBrush()) |
| QGraphicsEllipseItem * | addEllipse(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush()) |
| void | addItem(QGraphicsItem *item) |
| QGraphicsLineItem * | addLine(const QLineF &line, const QPen &pen = QPen()) |
| QGraphicsLineItem * | addLine(qreal x1, qreal y1, qreal x2, qreal y2, const QPen &pen = QPen()) |
| QGraphicsPathItem * | addPath(const QPainterPath &path, const QPen &pen = QPen(), const QBrush &brush = QBrush()) |
| QGraphicsPixmapItem * | addPixmap(const QPixmap &pixmap) |
| QGraphicsPolygonItem * | addPolygon(const QPolygonF &polygon, const QPen &pen = QPen(), const QBrush &brush = QBrush()) |
| QGraphicsRectItem * | addRect(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush = QBrush()) |
| QGraphicsRectItem * | addRect(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush()) |
| QGraphicsSimpleTextItem * | addSimpleText(const QString &text, const QFont &font = QFont()) |
| QGraphicsTextItem * | addText(const QString &text, const QFont &font = QFont()) |
| QGraphicsProxyWidget * | addWidget(QWidget *widget, Qt::WindowFlags wFlags = Qt::WindowFlags()) |
| QBrush | backgroundBrush() const |
| int | bspTreeDepth() const |
| void | clearFocus() |
| QList<QGraphicsItem *> | collidingItems(const QGraphicsItem *item, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const |
| QGraphicsItemGroup * | createItemGroup(const QList<QGraphicsItem *> &items) |
| void | destroyItemGroup(QGraphicsItemGroup *group) |
| QGraphicsItem * | focusItem() const |
| bool | focusOnTouch() const |
| QFont | font() const |
| QBrush | foregroundBrush() const |
| bool | hasFocus() const |
| qreal | height() const |
| virtual QVariant | inputMethodQuery(Qt::InputMethodQuery query) const |
| void | invalidate(qreal x, qreal y, qreal w, qreal h, QGraphicsScene::SceneLayers layers = AllLayers) |
| bool | isActive() const |
| QGraphicsItem * | itemAt(const QPointF &position, const QTransform &deviceTransform) const |
| QGraphicsItem * | itemAt(qreal x, qreal y, const QTransform &deviceTransform) const |
| QGraphicsScene::ItemIndexMethod | itemIndexMethod() const |
| QList<QGraphicsItem *> | items(Qt::SortOrder order = Qt::DescendingOrder) const |
| QList<QGraphicsItem *> | items(const QPointF &pos, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const |
| QList<QGraphicsItem *> | items(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const |
| QList<QGraphicsItem *> | items(const QPolygonF &polygon, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const |
| QList<QGraphicsItem *> | items(const QRectF &rect, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const |
| QList<QGraphicsItem *> | items(qreal x, qreal y, qreal w, qreal h, Qt::ItemSelectionMode mode, Qt::SortOrder order, const QTransform &deviceTransform = QTransform()) const |
| QRectF | itemsBoundingRect() const |
| qreal | minimumRenderSize() const |
| QGraphicsItem * | mouseGrabberItem() const |
| QPalette | palette() const |
| void | removeItem(QGraphicsItem *item) |
| void | render(QPainter *painter, const QRectF &target = QRectF(), const QRectF &source = QRectF(), Qt::AspectRatioMode aspectRatioMode = Qt::KeepAspectRatio) |
| QRectF | sceneRect() const |
| QList<QGraphicsItem *> | selectedItems() const |
| QPainterPath | selectionArea() const |
| bool | sendEvent(QGraphicsItem *item, QEvent *event) |
| void | setActivePanel(QGraphicsItem *item) |
| void | setActiveWindow(QGraphicsWidget *widget) |
| void | setBackgroundBrush(const QBrush &brush) |
| void | setBspTreeDepth(int depth) |
| void | setFocus(Qt::FocusReason focusReason = Qt::OtherFocusReason) |
| void | setFocusItem(QGraphicsItem *item, Qt::FocusReason focusReason = Qt::OtherFocusReason) |
| void | setFocusOnTouch(bool enabled) |
| void | setFont(const QFont &font) |
| void | setForegroundBrush(const QBrush &brush) |
| void | setItemIndexMethod(QGraphicsScene::ItemIndexMethod method) |
| void | setMinimumRenderSize(qreal minSize) |
| void | setPalette(const QPalette &palette) |
| void | setSceneRect(const QRectF &rect) |
| void | setSceneRect(qreal x, qreal y, qreal w, qreal h) |
| void | setSelectionArea(const QPainterPath &path, const QTransform &deviceTransform) |
| void | setSelectionArea(const QPainterPath &path, Qt::ItemSelectionOperation selectionOperation = Qt::ReplaceSelection, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, const QTransform &deviceTransform = QTransform()) |
| void | setStickyFocus(bool enabled) |
| void | setStyle(QStyle *style) |
| bool | stickyFocus() const |
| QStyle * | style() const |
| void | update(qreal x, qreal y, qreal w, qreal h) |
| QList<QGraphicsView *> | views() const |
| qreal | width() const |
Ranuras públicas
| void | advance() |
| void | clear() |
| void | clearSelection() |
| void | invalidate(const QRectF &rect = QRectF(), QGraphicsScene::SceneLayers layers = AllLayers) |
| void | update(const QRectF &rect = QRectF()) |
Señales
| void | changed(const QList<QRectF> ®ion) |
| void | focusItemChanged(QGraphicsItem *newFocusItem, QGraphicsItem *oldFocusItem, Qt::FocusReason reason) |
| void | sceneRectChanged(const QRectF &rect) |
| void | selectionChanged() |
Funciones protegidas
| virtual void | contextMenuEvent(QGraphicsSceneContextMenuEvent *contextMenuEvent) |
| virtual void | dragEnterEvent(QGraphicsSceneDragDropEvent *event) |
| virtual void | dragLeaveEvent(QGraphicsSceneDragDropEvent *event) |
| virtual void | dragMoveEvent(QGraphicsSceneDragDropEvent *event) |
| virtual void | drawBackground(QPainter *painter, const QRectF &rect) |
| virtual void | drawForeground(QPainter *painter, const QRectF &rect) |
| virtual void | dropEvent(QGraphicsSceneDragDropEvent *event) |
| virtual void | focusInEvent(QFocusEvent *focusEvent) |
| virtual void | focusOutEvent(QFocusEvent *focusEvent) |
| virtual void | helpEvent(QGraphicsSceneHelpEvent *helpEvent) |
| virtual void | inputMethodEvent(QInputMethodEvent *event) |
| virtual void | keyPressEvent(QKeyEvent *keyEvent) |
| virtual void | keyReleaseEvent(QKeyEvent *keyEvent) |
| virtual void | mouseDoubleClickEvent(QGraphicsSceneMouseEvent *mouseEvent) |
| virtual void | mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent) |
| virtual void | mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) |
| virtual void | mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent) |
| virtual void | wheelEvent(QGraphicsSceneWheelEvent *wheelEvent) |
Funciones protegidas reimplementadas
| virtual bool | event(QEvent *event) override |
| virtual bool | eventFilter(QObject *watched, QEvent *event) override |
Ranuras protegidas
| virtual bool | focusNextPrevChild(bool next) |
Descripción Detallada
Esta clase sirve como contenedor para QGraphicsItems. Se utiliza junto con QGraphicsView para visualizar elementos gráficos, como líneas, rectángulos, texto, o incluso elementos personalizados, en una superficie 2D. QGraphicsScene forma parte del Graphics View Framework.
QGraphicsScene también proporciona funcionalidades que permiten determinar eficientemente tanto la localización de elementos, como determinar qué elementos son visibles dentro de un área arbitraria de la escena. Con el widget QGraphicsView, puedes visualizar toda la escena, o acercarte y ver sólo partes de la escena.
Ejemplo:
QGraphicsScene scene; scene.addText("Hello, world!"); QGraphicsView view(&scene); view.show();
Ten en cuenta que QGraphicsScene no tiene apariencia visual propia; sólo gestiona los elementos. Necesitas crear un widget QGraphicsView para visualizar la escena.
Para añadir elementos a una escena, empieza por construir un objeto QGraphicsScene. A continuación, tienes dos opciones: o bien añadir los objetos QGraphicsItem existentes llamando a addItem(), o puedes llamar a una de las funciones de conveniencia addEllipse(), addLine(), addPath(), addPixmap(), addPolygon(), addRect(), o addText(), que devuelven un puntero al nuevo elemento añadido. Las dimensiones de los elementos añadidos con estas funciones son relativas al sistema de coordenadas del elemento, y la posición del elemento se inicializa a (0, 0) en la escena.
A continuación, puede visualizar la escena utilizando QGraphicsView. Cuando la escena cambia, (por ejemplo, cuando un elemento se mueve o se transforma) QGraphicsScene emite la señal changed(). Para eliminar un elemento, llama a removeItem().
QGraphicsScene utiliza un algoritmo de indexación para gestionar la ubicación de los elementos de manera eficiente. Por defecto, se utiliza un árbol BSP (Binary Space Partitioning); un algoritmo adecuado para escenas grandes donde la mayoría de los elementos permanecen estáticos (es decir, no se mueven). Puede desactivar este índice llamando a setItemIndexMethod(). Para más información sobre los algoritmos de indexación disponibles, consulte la propiedad itemIndexMethod.
El rectángulo delimitador de la escena se establece llamando a setSceneRect(). Los elementos se pueden colocar en cualquier posición de la escena, y el tamaño de la escena es ilimitado por defecto. El rectángulo de la escena sólo se utiliza para la contabilidad interna, manteniendo el índice de elementos de la escena. Si el rectángulo de la escena no está establecido, QGraphicsScene utilizará el área de delimitación de todos los elementos, devuelta por itemsBoundingRect(), como rectángulo de la escena. Sin embargo, itemsBoundingRect() es una función relativamente lenta, ya que recopila información de posición de cada elemento de la escena. Por este motivo, siempre debes establecer el rectángulo de escena cuando trabajes con escenas grandes.
Uno de los puntos fuertes de QGraphicsScene es su capacidad para determinar eficientemente la ubicación de los elementos. Incluso con millones de elementos en la escena, las funciones items() pueden determinar la ubicación de un elemento en unos pocos milisegundos. Hay varias sobrecargas para items(): una que encuentra elementos en una posición determinada, otra que encuentra elementos dentro de un polígono o un rectángulo o que se cruzan con ellos, y más. La lista de elementos devueltos se ordena por orden de apilamiento, siendo el elemento superior el primero de la lista. Para mayor comodidad, también hay una función itemAt() que devuelve el elemento superior en una posición dada.
QGraphicsScene mantiene información de selección para la escena. Para seleccionar elementos, llame a setSelectionArea(), y para borrar la selección actual, llame a clearSelection(). Llame a selectedItems() para obtener la lista de todos los elementos seleccionados.
Manejo y Propagación de Eventos
Otra responsabilidad que tiene QGraphicsScene, es propagar eventos desde QGraphicsView. Para enviar un evento a una escena, construyes un evento que hereda QEvent, y luego lo envías usando, por ejemplo, QCoreApplication::sendEvent(). event() se encarga de enviar el evento a los elementos individuales. Algunos eventos comunes son manejados por manejadores de eventos de conveniencia. Por ejemplo, los eventos de pulsación de teclas son gestionados por keyPressEvent(), y los eventos de pulsación de ratón son gestionados por mousePressEvent().
Los eventos de teclas se envían al elemento de foco. Para establecer el elemento de enfoque, puedes llamar a setFocusItem(), pasando un elemento que acepte el enfoque, o el propio elemento puede llamar a QGraphicsItem::setFocus(). Llama a focusItem() para obtener el elemento de foco actual. Por compatibilidad con los widgets, la escena también mantiene su propia información de foco. Por defecto, la escena no tiene foco, y todos los eventos clave son descartados. Si se llama a setFocus(), o si un elemento de la escena obtiene el foco, la escena obtiene el foco automáticamente. Si la escena tiene foco, hasFocus() devolverá true, y los eventos de teclado serán reenviados al elemento de foco, si lo hay. Si la escena pierde el foco, (es decir, alguien llama a clearFocus()) mientras un elemento tiene el foco, la escena mantendrá su información de foco del elemento, y una vez que la escena recupere el foco, se asegurará de que el último elemento enfocado recupere el foco.
Para los efectos mouse-over, QGraphicsScene envía eventos hover. Si un elemento acepta eventos hover (ver QGraphicsItem::acceptHoverEvents()), recibirá un evento GraphicsSceneHoverEnter cuando el ratón entre en su área. A medida que el ratón continúe moviéndose dentro del área del ítem, QGraphicsScene le enviará eventos GraphicsSceneHoverMove. Cuando el ratón abandone el área del ítem, éste recibirá un evento GraphicsSceneHoverLeave.
Todos los eventos de ratón se envían al ítem actual que captura el ratón. Un ítem se convierte en el "mouse grabber" de la escena si acepta eventos de ratón (ver QGraphicsItem::acceptedMouseButtons()) y recibe una pulsación de ratón. Sigue siendo el "mouse grabber" hasta que recibe un "mouse release" y no se pulsa ningún otro botón del ratón. Puedes llamar a mouseGrabberItem() para determinar qué elemento está actualmente agarrando el ratón.
Véase también QGraphicsItem y QGraphicsView.
Documentación de tipos de miembros
enum QGraphicsScene::ItemIndexMethod
Este enum describe los algoritmos de indexación que proporciona QGraphicsScene para gestionar la información posicional sobre los elementos de la escena.
| Constante | Valor | Descripción |
|---|---|---|
QGraphicsScene::BspTreeIndex | 0 | Se aplica un árbol de partición de espacio binario. Todos los algoritmos de localización de elementos de QGraphicsScene son de un orden cercano a la complejidad logarítmica, al hacer uso de la búsqueda binaria. Añadir, mover y eliminar elementos es logarítmico. Este enfoque es el mejor para escenas estáticas (es decir, escenas en las que la mayoría de los elementos no se mueven). |
QGraphicsScene::NoIndex | -1 | No se aplica ningún índice. La localización de elementos es de complejidad lineal, ya que se buscan todos los elementos de la escena. Sin embargo, añadir, mover y eliminar elementos se hace en tiempo constante. Este enfoque es ideal para escenas dinámicas, en las que se añaden, mueven o eliminan muchos elementos continuamente. |
Véase también setItemIndexMethod() y bspTreeDepth.
enum QGraphicsScene::SceneLayer
flags QGraphicsScene::SceneLayers
Este enum describe las capas de renderizado en un QGraphicsScene. Cuando QGraphicsScene dibuja el contenido de la escena, renderiza cada una de estas capas por separado, en orden.
Cada capa representa una bandera que puede ser OR'ed junto al llamar a funciones como invalidate() o QGraphicsView::invalidateScene().
| Constante | Valor | Descripción |
|---|---|---|
QGraphicsScene::ItemLayer | 0x1 | La capa de ítems. QGraphicsScene renderiza todos los ítems que se encuentran en esta capa llamando a la función virtual drawItems(). La capa de elementos se dibuja después de la capa de fondo, pero antes de la capa de primer plano. |
QGraphicsScene::BackgroundLayer | 0x2 | La capa de fondo. QGraphicsScene renderiza el fondo de la escena en esta capa llamando a la función virtual drawBackground(). La capa de fondo se dibuja en primer lugar. |
QGraphicsScene::ForegroundLayer | 0x4 | La capa de primer plano. QGraphicsScene representa el primer plano de la escena en esta capa llamando a la función virtual drawForeground(). La capa de primer plano se dibuja la última de todas las capas. |
QGraphicsScene::AllLayers | 0xffff | Todas las capas; este valor representa una combinación de las tres capas. |
El tipo SceneLayers es un typedef para QFlags<SceneLayer>. Almacena una combinación OR de valores SceneLayer.
Véase también invalidate() y QGraphicsView::invalidateScene().
Documentación de propiedades
backgroundBrush : QBrush
Esta propiedad contiene el pincel de fondo de la escena.
Establece esta propiedad para cambiar el fondo de la escena a un color, gradiente o textura diferente. El pincel de fondo por defecto es Qt::NoBrush. El fondo se dibuja antes (detrás) de los elementos.
Ejemplo:
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() llama a drawBackground() para dibujar el fondo de la escena. Para un control más detallado sobre cómo se dibuja el fondo, puedes reimplementar drawBackground() en una subclase de QGraphicsScene.
Funciones de acceso:
| QBrush | backgroundBrush() const |
| void | setBackgroundBrush(const QBrush &brush) |
bspTreeDepth : int
Esta propiedad contiene la profundidad del árbol de índices BSP de QGraphicsScene
Esta propiedad no tiene efecto cuando se utiliza NoIndex.
Este valor determina la profundidad del árbol BSP de QGraphicsScene. La profundidad afecta directamente al rendimiento de QGraphicsScene y al uso de memoria; este último crece exponencialmente con la profundidad del árbol. Con una profundidad de árbol óptima, QGraphicsScene puede determinar instantáneamente la localidad de los elementos, incluso para escenas con miles o millones de elementos. Esto también mejora enormemente el rendimiento del renderizado.
Por defecto, el valor es 0, en cuyo caso Qt adivinará una profundidad razonable por defecto basándose en el tamaño, localización y número de elementos de la escena. Sin embargo, si estos parámetros cambian con frecuencia, puede experimentar ralentizaciones ya que QGraphicsScene reajusta la profundidad internamente. Puedes evitar posibles ralentizaciones fijando la profundidad del árbol mediante esta propiedad.
La profundidad del árbol y el tamaño del rectángulo de la escena deciden la granularidad de la partición de la escena. El tamaño de cada segmento de escena se determina mediante el siguiente algoritmo:
QSizeF segmentSize = sceneRect().size() / pow(2, depth - 1);
El árbol BSP tiene un tamaño óptimo cuando cada segmento contiene entre 0 y 10 elementos.
Funciones de acceso:
| int | bspTreeDepth() const |
| void | setBspTreeDepth(int depth) |
Véase también itemIndexMethod.
focusOnTouch : bool
Esta propiedad establece si los elementos obtienen el foco cuando reciben un evento touch begin.
El comportamiento habitual es transferir el foco sólo cuando se hace clic en un elemento. A menudo un toque en un touchpad es interpretado como equivalente a un clic de ratón por el sistema operativo, generando un evento de clic sintetizado como respuesta. Sin embargo, al menos en macOS puedes configurar este comportamiento.
Por defecto, QGraphicsScene también transfiere el foco cuando se toca en un trackpad o similar. Si el sistema operativo está configurado para no generar un clic de ratón sintético al tocar el trackpad, esto es sorprendente. Si el sistema operativo genera clics de ratón sintéticos al tocar el trackpad, la transferencia de foco al iniciar un gesto táctil es innecesaria.
Con focusOnTouch desactivado, QGraphicsScene se comporta como cabría esperar en macOS.
El valor por defecto es true, asegurando que el comportamiento por defecto es igual que en las versiones de Qt anteriores a la 5.12. Establézcalo en false para evitar que los eventos táctiles provoquen cambios de enfoque.
Funciones de acceso:
| bool | focusOnTouch() const |
| void | setFocusOnTouch(bool enabled) |
font : QFont
Esta propiedad contiene la fuente por defecto de la escena
Esta propiedad proporciona la fuente de la escena. La fuente de la escena por defecto es, y resuelve todas sus entradas desde, QApplication::font.
Si la fuente de la escena cambia, ya sea directamente a través de setFont() o indirectamente cuando cambia la fuente de la aplicación, QGraphicsScene primero se envía a sí mismo un evento FontChange, y luego envía eventos FontChange a todos los elementos widget de nivel superior en la escena. Estos elementos responden resolviendo sus propias fuentes a la escena, y luego notifican a sus hijos, que a su vez notifican a sus hijos, y así sucesivamente, hasta que todos los elementos widget han actualizado sus fuentes.
Al cambiar el tipo de letra de la escena (directa o indirectamente a través de QApplication::setFont()), se programa automáticamente un redibujado de toda la escena.
Funciones de acceso:
| QFont | font() const |
| void | setFont(const QFont &font) |
Véase también QWidget::font, QApplication::setFont(), palette, y style().
foregroundBrush : QBrush
Esta propiedad contiene el pincel de primer plano de la escena.
Cambie esta propiedad para establecer el primer plano de la escena a un color, gradiente o textura diferente.
El primer plano se dibuja después (encima) de los elementos. El pincel de primer plano por defecto es Qt::NoBrush ( es decir, el primer plano no se dibuja).
Ejemplo:
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() llama a drawForeground() para dibujar el primer plano de la escena. Para un control más detallado sobre cómo se dibuja el primer plano, puede reimplementar la función drawForeground() en una subclase de QGraphicsScene.
Funciones de acceso:
| QBrush | foregroundBrush() const |
| void | setForegroundBrush(const QBrush &brush) |
itemIndexMethod : ItemIndexMethod
Esta propiedad contiene el método de indexación de elementos.
QGraphicsScene aplica un algoritmo de indexación a la escena, para acelerar las funciones de descubrimiento de elementos como items() y itemAt(). La indexación es más eficiente para escenas estáticas (es decir, donde los elementos no se mueven). Para escenas dinámicas, o escenas con muchos elementos animados, la gestión del índice puede superar la velocidad de búsqueda.
Para el caso común, el método de índice por defecto BspTreeIndex funciona bien. Si su escena utiliza muchas animaciones y experimenta lentitud, puede desactivar la indexación llamando a setItemIndexMethod(NoIndex).
Funciones de acceso:
| QGraphicsScene::ItemIndexMethod | itemIndexMethod() const |
| void | setItemIndexMethod(QGraphicsScene::ItemIndexMethod method) |
Véase también bspTreeDepth.
minimumRenderSize : qreal
Esta propiedad contiene el tamaño mínimo transformado a la vista que debe tener un elemento para ser dibujado.
Cuando se renderiza la escena, cualquier elemento cuya anchura o altura, transformada a la vista de destino, sea menor que minimumRenderSize(), no será renderizado. Si un elemento no se renderiza y recorta a sus elementos hijos, éstos tampoco se renderizarán. Establezca este valor para acelerar el renderizado de escenas con muchos objetos renderizados en una vista ampliada.
El valor por defecto es 0. Si no se establece, o si se establece a 0 o a un valor negativo, todos los elementos serán siempre renderizados.
Por ejemplo, establecer esta propiedad puede ser especialmente útil si una escena se renderiza mediante múltiples vistas, una de las cuales sirve como vista general que siempre muestra todos los elementos. En escenas con muchos elementos, una vista de este tipo utilizará un factor de escala alto para poder mostrar todos los elementos. Debido al escalado, los elementos más pequeños sólo contribuirán de forma insignificante a la escena final renderizada. Para evitar dibujar estos elementos y reducir el tiempo necesario para renderizar la escena, puede llamar a setMinimumRenderSize() con un valor no negativo.
Nota: Los elementos que no se dibujan por ser demasiado pequeños, siguen siendo devueltos por métodos como items() y itemAt(), y participan en la detección de colisiones e interacciones. Se recomienda establecer en minimumRenderSize() un valor menor o igual a 1 para evitar que los elementos grandes sin renderizar sean interactivos.
Funciones de acceso:
| qreal | minimumRenderSize() const |
| void | setMinimumRenderSize(qreal minSize) |
Véase también QStyleOptionGraphicsItem::levelOfDetailFromTransform().
palette : QPalette
Esta propiedad contiene la paleta por defecto de la escena
Esta propiedad proporciona la paleta de la escena. La paleta de la escena por defecto y resuelve todas sus entradas desde QApplication::palette.
Si la paleta de la escena cambia, ya sea directamente a través de setPalette() o indirectamente cuando cambia la paleta de la aplicación, QGraphicsScene se envía primero a sí mismo un evento PaletteChange, y luego envía eventos PaletteChange a todos los elementos widget de nivel superior de la escena. Estos elementos responden resolviendo sus propias paletas a la escena, y luego notifican a sus hijos, que a su vez notifican a sus hijos, y así sucesivamente, hasta que todos los elementos widget han actualizado sus paletas.
El cambio de la paleta de la escena, (directa o indirectamente a través de QApplication::setPalette(),) programa automáticamente un redibujado de toda la escena.
Funciones de acceso:
| QPalette | palette() const |
| void | setPalette(const QPalette &palette) |
Véase también QWidget::palette, QApplication::setPalette(), font, y style().
sceneRect : QRectF
Esta propiedad contiene el rectángulo de la escena.
El rectángulo de escena define la extensión de la escena. Es utilizado principalmente por QGraphicsView para determinar el área de desplazamiento por defecto de la vista, y por QGraphicsScene para gestionar la indexación de elementos.
Si no se establece, o si se establece en un valor nulo QRectF, sceneRect() devolverá el mayor rectángulo delimitador de todos los elementos de la escena desde que ésta se creó (es decir, un rectángulo que crece cuando se añaden o mueven elementos en la escena, pero que nunca se encoge).
Funciones de acceso:
| QRectF | sceneRect() const |
| void | setSceneRect(const QRectF &rect) |
| void | setSceneRect(qreal x, qreal y, qreal w, qreal h) |
Véase también width(), height(), y QGraphicsView::sceneRect.
stickyFocus : bool
Esta propiedad indica si al hacer clic en el fondo de la escena se elimina el foco.
En un QGraphicsScene con stickyFocus establecido a true, el foco permanecerá sin cambios cuando el usuario haga clic en el fondo de la escena o en un elemento que no acepte foco. En caso contrario, el foco se borrará.
Por defecto, esta propiedad es false.
El foco cambia en respuesta a una pulsación del ratón. Puedes reimplementar mousePressEvent() en una subclase de QGraphicsScene para alternar esta propiedad en función de dónde haya hecho clic el usuario.
Funciones de acceso:
| bool | stickyFocus() const |
| void | setStickyFocus(bool enabled) |
Véase también clearFocus() y setFocusItem().
Documentación de las funciones miembro
QGraphicsScene::QGraphicsScene(QObject *parent = nullptr)
Construye un objeto QGraphicsScene. El parámetro parent se pasa al constructor de QObject.
QGraphicsScene::QGraphicsScene(const QRectF &sceneRect, QObject *parent = nullptr)
Construye un objeto QGraphicsScene, usando sceneRect para su rectángulo de escena. El parámetro parent se pasa al constructor de QObject.
Véase también sceneRect.
QGraphicsScene::QGraphicsScene(qreal x, qreal y, qreal width, qreal height, QObject *parent = nullptr)
Construye un objeto QGraphicsScene, usando el rectángulo especificado por (x, y), y los dados width y height para su rectángulo de escena. El parámetro parent se pasa al constructor de QObject.
Véase también sceneRect.
[virtual noexcept] QGraphicsScene::~QGraphicsScene()
Elimina y borra todos los elementos del objeto de escena antes de destruir el objeto de escena. El objeto de escena se elimina de la lista global de escenas de la aplicación, y se elimina de todas las vistas asociadas.
QGraphicsItem *QGraphicsScene::activePanel() const
Devuelve el panel activo actual, o nullptr si no hay ningún panel activo.
Véase también QGraphicsScene::setActivePanel().
QGraphicsWidget *QGraphicsScene::activeWindow() const
Devuelve la ventana activa en ese momento, o nullptr si no hay ninguna ventana activa.
Véase también QGraphicsScene::setActiveWindow().
QGraphicsEllipseItem *QGraphicsScene::addEllipse(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush = QBrush())
Crea y añade un elemento elipse a la escena, y devuelve el puntero del elemento. La geometría de la elipse se define en rect, y su pluma y pincel se inicializan en pen y brush.
Tenga en cuenta que la geometría del elemento se proporciona en coordenadas de elemento, y su posición se inicializa en (0, 0).
Si el elemento es visible (es decir, QGraphicsItem::isVisible() devuelve true), QGraphicsScene emitirá changed() una vez que el control vuelva al bucle de eventos.
Véase también addLine(), addPath(), addPixmap(), addRect(), addText(), addItem() y addWidget().
QGraphicsEllipseItem *QGraphicsScene::addEllipse(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush())
Esta función es equivalente a llamar a addEllipse(QRectF(x, y, w, h), pen, brush).
void QGraphicsScene::addItem(QGraphicsItem *item)
Añade o mueve el item y todos sus hijos a esta escena. Esta escena toma posesión del item.
Si el elemento es visible (es decir, QGraphicsItem::isVisible() devuelve true), QGraphicsScene emitirá changed() una vez que el control vuelva al bucle de eventos.
Si el elemento ya se encuentra en una escena diferente, primero se eliminará de su antigua escena, y luego se añadirá a esta escena como nivel superior.
QGraphicsScene enviará notificaciones ItemSceneChange a item mientras se añade a la escena. Si el elemento no pertenece actualmente a una escena, sólo se enviará una notificación. Si ya pertenece a una escena (es decir, se mueve a esta escena), QGraphicsScene enviará una notificación de adición cuando el elemento se elimine de su escena anterior.
Si el elemento es un panel, la escena está activa y no hay ningún panel activo en la escena, el elemento se activará.
Véase también removeItem(), addEllipse(), addLine(), addPath(), addPixmap(), addRect(), addText(), addWidget(), y Sorting.
QGraphicsLineItem *QGraphicsScene::addLine(const QLineF &line, const QPen &pen = QPen())
Crea y añade un elemento de línea a la escena, y devuelve el puntero del elemento. La geometría de la línea se define en line, y su pluma se inicializa en pen.
Ten en cuenta que la geometría del elemento se proporciona en coordenadas de elemento, y su posición se inicializa en (0, 0).
Si el elemento es visible (es decir, QGraphicsItem::isVisible() devuelve true), QGraphicsScene emitirá changed() una vez que el control vuelva al bucle de eventos.
Véase también addEllipse(), addPath(), addPixmap(), addRect(), addText(), addItem() y addWidget().
QGraphicsLineItem *QGraphicsScene::addLine(qreal x1, qreal y1, qreal x2, qreal y2, const QPen &pen = QPen())
Esta función es equivalente a llamar a addLine(QLineF(x1, y1, x2, y2), pen).
QGraphicsPathItem *QGraphicsScene::addPath(const QPainterPath &path, const QPen &pen = QPen(), const QBrush &brush = QBrush())
Crea y añade un elemento de ruta a la escena, y devuelve el puntero del elemento. La geometría de la ruta se define en path, y su pluma y pincel se inicializan en pen y brush.
Tenga en cuenta que la geometría del elemento se proporciona en coordenadas de elemento, y su posición se inicializa en (0, 0).
Si el elemento es visible (es decir, QGraphicsItem::isVisible() devuelve true), QGraphicsScene emitirá changed() una vez que el control vuelva al bucle de eventos.
Véase también addEllipse(), addLine(), addPixmap(), addRect(), addText(), addItem() y addWidget().
QGraphicsPixmapItem *QGraphicsScene::addPixmap(const QPixmap &pixmap)
Crea y añade un elemento pixmap a la escena, y devuelve el puntero del elemento. El mapa de píxeles se define en pixmap.
Ten en cuenta que la geometría del elemento se proporciona en coordenadas de elemento, y su posición se inicializa en (0, 0).
Si el elemento es visible (es decir, QGraphicsItem::isVisible() devuelve true), QGraphicsScene emitirá changed() una vez que el control vuelva al bucle de eventos.
Véase también addEllipse(), addLine(), addPath(), addRect(), addText(), addItem() y addWidget().
QGraphicsPolygonItem *QGraphicsScene::addPolygon(const QPolygonF &polygon, const QPen &pen = QPen(), const QBrush &brush = QBrush())
Crea y añade un elemento poligonal a la escena, y devuelve el puntero del elemento. El polígono se define en polygon, y su pluma y pincel se inicializan en pen y brush.
Ten en cuenta que la geometría del elemento se proporciona en coordenadas de elemento, y su posición se inicializa en (0, 0).
Si el elemento es visible (es decir, QGraphicsItem::isVisible() devuelve true), QGraphicsScene emitirá changed() una vez que el control vuelva al bucle de eventos.
Véase también addEllipse(), addLine(), addPath(), addRect(), addText(), addItem() y addWidget().
QGraphicsRectItem *QGraphicsScene::addRect(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush = QBrush())
Crea y añade un elemento rectángulo a la escena, y devuelve el puntero del elemento. La geometría del rectángulo se define en rect, y su pluma y pincel se inicializan en pen y brush.
Tenga en cuenta que la geometría del elemento se proporciona en coordenadas de elemento, y su posición se inicializa a (0, 0). Por ejemplo, si se añade un QRect(50, 50, 100, 100), su esquina superior izquierda estará en (50, 50) respecto al origen en el sistema de coordenadas del elemento.
Si el elemento es visible (es decir, QGraphicsItem::isVisible() devuelve true), QGraphicsScene emitirá changed() una vez que el control vuelva al bucle de eventos.
Véase también addEllipse(), addLine(), addPixmap(), addText(), addItem(), y addWidget().
QGraphicsRectItem *QGraphicsScene::addRect(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush())
Esta función es equivalente a llamar a addRect(QRectF(x, y, w, h), pen, brush).
QGraphicsSimpleTextItem *QGraphicsScene::addSimpleText(const QString &text, const QFont &font = QFont())
Crea y añade un QGraphicsSimpleTextItem a la escena, y devuelve el puntero del elemento. La cadena de texto se inicializa a text, y su fuente se inicializa a font.
La posición del elemento se inicializa a (0, 0).
Si el elemento es visible (es decir, QGraphicsItem::isVisible() devuelve true), QGraphicsScene emitirá changed() una vez que el control vuelva al bucle de eventos.
Véase también addEllipse(), addLine(), addPixmap(), addRect(), addItem() y addWidget().
QGraphicsTextItem *QGraphicsScene::addText(const QString &text, const QFont &font = QFont())
Crea y añade un elemento de texto a la escena, y devuelve el puntero del elemento. La cadena de texto se inicializa a text, y su fuente se inicializa a font.
La posición del elemento se inicializa a (0, 0).
Si el elemento es visible (es decir, QGraphicsItem::isVisible() devuelve true), QGraphicsScene emitirá changed() una vez que el control vuelva al bucle de eventos.
Véase también addEllipse(), addLine(), addPixmap(), addRect(), addItem() y addWidget().
QGraphicsProxyWidget *QGraphicsScene::addWidget(QWidget *widget, Qt::WindowFlags wFlags = Qt::WindowFlags())
Crea un nuevo QGraphicsProxyWidget para widget, lo añade a la escena y devuelve un puntero al proxy. wFlags establece los indicadores de ventana predeterminados para el widget proxy incrustado.
La posición del elemento se inicializa a (0, 0).
Si el elemento es visible (es decir, QGraphicsItem::isVisible() devuelve true), QGraphicsScene emitirá changed() una vez que el control vuelva al bucle de eventos.
Ten en cuenta que los widgets con el atributo widget Qt::WA_PaintOnScreen establecido y los widgets que envuelven una aplicación o controlador externo no son compatibles. Algunos ejemplos son QOpenGLWidget y QAxWidget.
Véase también addEllipse(), addLine(), addPixmap(), addRect(), addText(), addSimpleText() y addItem().
[slot] void QGraphicsScene::advance()
Esta ranura avanza la escena un paso, llamando a QGraphicsItem::advance() para todos los elementos de la escena. Esto se hace en dos fases: en la primera fase, se notifica a todos los elementos que la escena está a punto de cambiar, y en la segunda fase se notifica a todos los elementos que pueden moverse. En la primera fase, QGraphicsItem::advance() es llamado pasando un valor de 0 como argumento, y 1 es pasado en la segunda fase.
Ten en cuenta que también puedes utilizar el Animation Framework para las animaciones.
Véase también QGraphicsItem::advance() y QTimeLine.
[signal] void QGraphicsScene::changed(const QList<QRectF> ®ion)
Esta señal es emitida por QGraphicsScene cuando el control alcanza el bucle de eventos, si el contenido de la escena cambia. El parámetro region contiene una lista de rectángulos de escena que indican el área que ha sido modificada.
Véase también QGraphicsView::updateScene().
[slot] void QGraphicsScene::clear()
Elimina y borra todos los elementos de la escena, pero por lo demás deja el estado de la escena sin cambios.
Véase también addItem().
void QGraphicsScene::clearFocus()
Borra el foco de la escena. Si algún elemento tiene foco cuando se llama a esta función, perderá el foco, y lo recuperará de nuevo una vez que la escena recupere el foco.
Una escena que no tiene foco ignora los eventos clave.
Véase también hasFocus(), setFocus(), y setFocusItem().
[slot] void QGraphicsScene::clearSelection()
Borra la selección actual.
Véase también setSelectionArea() y selectedItems().
QList<QGraphicsItem *> QGraphicsScene::collidingItems(const QGraphicsItem *item, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const
Devuelve una lista de todos los elementos que colisionan con item. Las colisiones se determinan llamando a QGraphicsItem::collidesWithItem(); la detección de colisiones la determina mode. Por defecto, se devuelven todos los elementos cuya forma se cruza con item o está contenida dentro de la forma de item.
Los elementos se devuelven en orden de apilamiento descendente (es decir, el primer elemento de la lista es el superior y el último el inferior).
Véase también items(), itemAt(), QGraphicsItem::collidesWithItem() y Sorting.
[virtual protected] void QGraphicsScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *contextMenuEvent)
Este manejador de eventos, para el evento contextMenuEvent, puede ser reimplementado en una subclase para recibir eventos de menú contextual. La implementación por defecto reenvía el evento al elemento visible superior que acepta eventos de menú contextual en la posición del evento. Si ningún elemento acepta eventos de menú contextual en esta posición, el evento es ignorado.
Nota: Véase items() para una definición de los elementos que esta función considera visibles.
Véase también QGraphicsItem::contextMenuEvent().
QGraphicsItemGroup *QGraphicsScene::createItemGroup(const QList<QGraphicsItem *> &items)
Agrupa todos los elementos de items en un nuevo QGraphicsItemGroup, y devuelve un puntero al grupo. El grupo se crea con el ancestro común de items como padre y con la posición (0, 0). Todos los elementos se reasignan al grupo, y sus posiciones y transformaciones se asignan al grupo. Si items está vacío, esta función devolverá un nivel superior vacío QGraphicsItemGroup.
QGraphicsScene tiene la propiedad del elemento del grupo; no es necesario eliminarlo. Para desmontar (desagrupar) un grupo, llame a destroyItemGroup().
Véase también destroyItemGroup() y QGraphicsItemGroup::addToGroup().
void QGraphicsScene::destroyItemGroup(QGraphicsItemGroup *group)
Reenvía todos los elementos de group al elemento padre de group, luego elimina group de la escena y, por último, lo borra. Las posiciones y transformaciones de los ítems son mapeadas desde el grupo al padre del grupo.
Véase también createItemGroup() y QGraphicsItemGroup::removeFromGroup().
[virtual protected] void QGraphicsScene::dragEnterEvent(QGraphicsSceneDragDropEvent *event)
Este manejador de eventos, para el evento event, puede ser reimplementado en una subclase para recibir eventos drag enter para la escena.
La implementación por defecto acepta el evento y prepara la escena para aceptar eventos de movimiento de arrastre.
Ver también QGraphicsItem::dragEnterEvent(), dragMoveEvent(), dragLeaveEvent(), y dropEvent().
[virtual protected] void QGraphicsScene::dragLeaveEvent(QGraphicsSceneDragDropEvent *event)
Este manejador de eventos, para el evento event, puede ser reimplementado en una subclase para recibir eventos de arrastrar y dejar para la escena.
Ver también QGraphicsItem::dragLeaveEvent(), dragEnterEvent(), dragMoveEvent(), y dropEvent().
[virtual protected] void QGraphicsScene::dragMoveEvent(QGraphicsSceneDragDropEvent *event)
Este manejador de eventos, para el evento event, puede ser reimplementado en una subclase para recibir eventos de movimiento de arrastre para la escena.
Nota: Ver items() para una definición de qué elementos son considerados visibles por esta función.
Ver también QGraphicsItem::dragMoveEvent(), dragEnterEvent(), dragLeaveEvent(), y dropEvent().
[virtual protected] void QGraphicsScene::drawBackground(QPainter *painter, const QRectF &rect)
Dibuja el fondo de la escena utilizando painter, antes de dibujar cualquier elemento y el primer plano. Reimplemente esta función para proporcionar un fondo personalizado para la escena.
Todo el pintado se realiza en coordenadas de la escena. El parámetro rect es el rectángulo expuesto.
Si todo lo que desea es definir un color, textura o gradiente para el fondo, puede llamar a setBackgroundBrush() en su lugar.
Véase también drawForeground() y drawItems().
[virtual protected] void QGraphicsScene::drawForeground(QPainter *painter, const QRectF &rect)
Dibuja el primer plano de la escena utilizando painter, después de haber dibujado el fondo y todos los elementos. Reimplemente esta función para proporcionar un primer plano personalizado para la escena.
Todo el pintado se realiza en coordenadas de la escena. El parámetro rect es el rectángulo expuesto.
Si todo lo que desea es definir un color, textura o gradiente para el primer plano, puede llamar a setForegroundBrush() en su lugar.
Véase también drawBackground() y drawItems().
[virtual protected] void QGraphicsScene::dropEvent(QGraphicsSceneDragDropEvent *event)
Este manejador de eventos, para el evento event, puede ser reimplementado en una subclase para recibir eventos drop para la escena.
Ver también QGraphicsItem::dropEvent(), dragEnterEvent(), dragMoveEvent(), y dragLeaveEvent().
[override virtual protected] bool QGraphicsScene::event(QEvent *event)
Reimplementa: QObject::event(QEvent *e).
Procesa el evento event, y lo envía a los respectivos manejadores de eventos.
Además de llamar a los manejadores de eventos de conveniencia, esta función es responsable de convertir los eventos de movimiento del ratón en eventos hover para cuando no hay un ítem que agarre el ratón. Los eventos hover se envían directamente a los elementos; no existe una función de conveniencia para ellos.
A diferencia de QWidget, QGraphicsScene no tiene las funciones de conveniencia enterEvent() y leaveEvent(). Utilice esta función para obtener esos eventos en su lugar.
Devuelve true si event ha sido reconocido y procesado; en caso contrario, devuelve false.
Véase también contextMenuEvent(), keyPressEvent(), keyReleaseEvent(), mousePressEvent(), mouseMoveEvent(), mouseReleaseEvent(), mouseDoubleClickEvent(), focusInEvent() y focusOutEvent().
[override virtual protected] bool QGraphicsScene::eventFilter(QObject *watched, QEvent *event)
Reimplementa: QObject::eventFilter(QObject *watched, QEvent *event).
QGraphicsScene filtra los eventos de QApplication para detectar cambios de paleta y fuente.
[virtual protected] void QGraphicsScene::focusInEvent(QFocusEvent *focusEvent)
Este manejador de eventos, para el evento focusEvent, puede ser reimplementado en una subclase para recibir el foco en eventos.
La implementación por defecto establece el foco en la escena, y luego en el último elemento enfocado.
Ver también QGraphicsItem::focusOutEvent().
QGraphicsItem *QGraphicsScene::focusItem() const
Cuando la escena está activa, esta función devuelve el elemento de foco actual de la escena, o nullptr si ningún elemento tiene foco actualmente. Cuando la escena está inactiva, esta función devuelve el elemento que ganará el foco de entrada cuando la escena se active.
El elemento enfocado recibe entrada de teclado cuando la escena recibe un evento de tecla.
Véase también setFocusItem(), QGraphicsItem::hasFocus() y isActive().
[signal] void QGraphicsScene::focusItemChanged(QGraphicsItem *newFocusItem, QGraphicsItem *oldFocusItem, Qt::FocusReason reason)
Esta señal es emitida por QGraphicsScene cada vez que el foco cambia en la escena (es decir, cuando un elemento gana o pierde el foco de entrada, o cuando el foco pasa de un elemento a otro). Puedes conectarte a esta señal si necesitas saber cuándo otros elementos obtienen el foco de entrada. Es particularmente útil para implementar teclados virtuales, métodos de entrada y elementos de cursor.
oldFocusItem es un puntero al elemento que anteriormente tenía el foco, o 0 si ningún elemento tenía el foco antes de que se emitiera la señal. newFocusItem es un puntero al elemento que ganó el foco de entrada, o nullptr si se perdió el foco. reason es la razón del cambio de foco (por ejemplo, si la escena se desactivó mientras un campo de entrada tenía el foco, oldFocusItem apuntaría al elemento del campo de entrada, newFocusItem sería nullptr, y reason sería Qt::ActiveWindowFocusReason.
[virtual protected slot] bool QGraphicsScene::focusNextPrevChild(bool next)
Busca un nuevo widget al que dar el foco del teclado, según corresponda para Tab y Shift+Tab, y devuelve true si puede encontrar un nuevo widget, o false si no puede. Si next es verdadero, esta función busca hacia adelante; si next es falso, busca hacia atrás.
Puedes reimplementar esta función en una subclase de QGraphicsScene para proporcionar un control preciso sobre cómo pasa el foco de la pestaña dentro de tu escena. La implementación predeterminada se basa en la cadena de enfoque de pestañas definida por QGraphicsWidget::setTabOrder().
[virtual protected] void QGraphicsScene::focusOutEvent(QFocusEvent *focusEvent)
Este manejador de eventos, para el evento focusEvent, puede ser reimplementado en una subclase para recibir eventos de foco fuera.
La implementación por defecto elimina el foco de cualquier elemento de foco, y luego elimina el foco de la escena.
Ver también QGraphicsItem::focusInEvent().
bool QGraphicsScene::hasFocus() const
Devuelve true si la escena tiene foco; en caso contrario devuelve false. Si la escena tiene foco, reenviará los eventos clave de QKeyEvent a cualquier elemento que tenga foco.
Véase también setFocus() y setFocusItem().
qreal QGraphicsScene::height() const
Esta función es equivalente a llamar a sceneRect().height().
Véase también width().
[virtual protected] void QGraphicsScene::helpEvent(QGraphicsSceneHelpEvent *helpEvent)
Este manejador de eventos, para el evento helpEvent, puede ser reimplementado en una subclase para recibir eventos de ayuda. Los eventos son del tipo QEvent::ToolTip, que se crean cuando se solicita un tooltip.
La implementación predeterminada muestra la información sobre herramientas del elemento visible situado más arriba, es decir, el elemento con el valor z más alto, en la posición del cursor del ratón. Si ningún elemento tiene una descripción emergente, esta función no hace nada.
Nota: Véase items() para una definición de los elementos que esta función considera visibles.
Véase también QGraphicsItem::toolTip() y QGraphicsSceneHelpEvent.
[virtual protected] void QGraphicsScene::inputMethodEvent(QInputMethodEvent *event)
Este manejador de eventos, para el evento event, puede ser reimplementado en una subclase para recibir eventos de métodos de entrada para la escena.
La implementación por defecto reenvía el evento a focusItem(). Si ningún elemento tiene actualmente el foco o el elemento con el foco actual no acepta métodos de entrada, esta función no hace nada.
Véase también QGraphicsItem::inputMethodEvent().
[virtual] QVariant QGraphicsScene::inputMethodQuery(Qt::InputMethodQuery query) const
Este método es utilizado por los métodos de entrada para consultar un conjunto de propiedades de la escena para poder soportar operaciones complejas de métodos de entrada como el soporte para texto circundante y reconversiones.
El parámetro query especifica qué propiedad se consulta.
Véase también QWidget::inputMethodQuery().
[slot] void QGraphicsScene::invalidate(const QRectF &rect = QRectF(), QGraphicsScene::SceneLayers layers = AllLayers)
Invalida y programa un redibujado de layers en rect en la escena. Cualquier contenido almacenado en caché en layers es invalidado y redibujado incondicionalmente.
Puedes utilizar esta sobrecarga de la función para notificar a QGraphicsScene cambios en el fondo o en el primer plano de la escena. Esta función se utiliza habitualmente en escenas con fondos basados en mosaicos para notificar cambios cuando QGraphicsView ha habilitado CacheBackground.
Ejemplo:
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]); } } }
Tenga en cuenta que QGraphicsView sólo admite actualmente el almacenamiento en caché del fondo (consulte QGraphicsView::CacheBackground). Esta función es equivalente a llamar a update() si se pasa cualquier capa menos BackgroundLayer.
Nota: Esta ranura está sobrecargada. Para conectarse a esta ranura:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
graphicsScene, qOverload(&QGraphicsScene::invalidate));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
graphicsScene, [receiver = graphicsScene](const QRectF &rect, QGraphicsScene::SceneLayers layers) { receiver->invalidate(rect, layers); }); Véase también QGraphicsView::resetCachedContent().
void QGraphicsScene::invalidate(qreal x, qreal y, qreal w, qreal h, QGraphicsScene::SceneLayers layers = AllLayers)
Esta función es equivalente a llamar a invalidate(QRectF(x, y, w, h), layers);
Se trata de una función sobrecargada.
bool QGraphicsScene::isActive() const
Devuelve true si la escena está activa (por ejemplo, es vista por al menos un QGraphicsView que esté activo); en caso contrario devuelve false.
Véase también QGraphicsItem::isActive() y QWidget::isActiveWindow().
QGraphicsItem *QGraphicsScene::itemAt(const QPointF &position, const QTransform &deviceTransform) const
Devuelve el elemento visible más alto en la dirección position especificada, o nullptr si no hay elementos en esta posición.
deviceTransform es la transformación que se aplica a la vista, y debe proporcionarse si la escena contiene elementos que ignoran las transformaciones.
Nota: Ver items() para una definición de qué elementos son considerados visibles por esta función.
Ver también items(), collidingItems(), y Sorting.
QGraphicsItem *QGraphicsScene::itemAt(qreal x, qreal y, const QTransform &deviceTransform) const
Devuelve el elemento visible más alto en la posición especificada por (x, y), o nullptr si no hay elementos en esta posición.
deviceTransform es la transformación que se aplica a la vista, y debe proporcionarse si la escena contiene elementos que ignoran las transformaciones.
Esta función es equivalente a llamar a itemAt(QPointF(x, y), deviceTransform).
Nota: Ver items() para una definición de qué elementos son considerados visibles por esta función.
Se trata de una función sobrecargada.
QList<QGraphicsItem *> QGraphicsScene::items(Qt::SortOrder order = Qt::DescendingOrder) const
Devuelve una lista ordenada de todos los elementos de la escena. order decide el orden de apilamiento.
Véase también addItem(), removeItem(), y Sorting.
QList<QGraphicsItem *> QGraphicsScene::items(const QPointF &pos, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const
Devuelve todos los elementos visibles que, en función de mode, se encuentran en el pos especificado en una lista ordenada mediante order. En este caso, "visible" define los elementos para los que: isVisible() devuelve true, effectiveOpacity() devuelve un valor superior a 0,0 (que es totalmente transparente) y el elemento padre no lo recorta.
El valor por defecto para mode es Qt::IntersectsItemShape; se devuelven todos los elementos cuya forma exacta se cruza con pos.
deviceTransform es la transformación que se aplica a la vista, y debe proporcionarse si la escena contiene elementos que ignoran las transformaciones.
Véase también itemAt() y Sorting.
QList<QGraphicsItem *> QGraphicsScene::items(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const
Devuelve todos los elementos visibles que, dependiendo de mode, están dentro o se cruzan con el path especificado, en una lista ordenada utilizando order. En este caso, "visible" define los elementos para los que: isVisible() devuelve true, effectiveOpacity() devuelve un valor superior a 0,0 (que es totalmente transparente) y el elemento padre no lo recorta.
El valor por defecto para mode es Qt::IntersectsItemShape; se devuelven todos los elementos cuya forma exacta se cruza con o está contenida por path.
deviceTransform es la transformación que se aplica a la vista, y debe proporcionarse si la escena contiene elementos que ignoran las transformaciones.
Se trata de una función sobrecargada.
Véase también itemAt() y Sorting.
QList<QGraphicsItem *> QGraphicsScene::items(const QPolygonF &polygon, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const
Devuelve todos los elementos visibles que, dependiendo de mode, están dentro o se cruzan con el polygon especificado, en una lista ordenada utilizando order. En este caso, "visible" define los elementos para los que: isVisible() devuelve true, effectiveOpacity() devuelve un valor superior a 0,0 (que es totalmente transparente) y el elemento padre no lo recorta.
El valor por defecto para mode es Qt::IntersectsItemShape; se devuelven todos los elementos cuya forma exacta se cruza con o está contenida por polygon.
deviceTransform es la transformación que se aplica a la vista, y debe proporcionarse si la escena contiene elementos que ignoran las transformaciones.
Se trata de una función sobrecargada.
Véase también itemAt() y Sorting.
QList<QGraphicsItem *> QGraphicsScene::items(const QRectF &rect, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const
Devuelve todos los elementos visibles que, dependiendo de mode, están dentro o se cruzan con el rect especificado, en una lista ordenada utilizando order. En este caso, "visible" define los elementos para los que: isVisible() devuelve true, effectiveOpacity() devuelve un valor superior a 0,0 (que es totalmente transparente) y el elemento padre no lo recorta.
El valor por defecto para mode es Qt::IntersectsItemShape; se devuelven todos los elementos cuya forma exacta se cruza con o está contenida por rect.
deviceTransform es la transformación que se aplica a la vista, y debe proporcionarse si la escena contiene elementos que ignoran las transformaciones.
Se trata de una función sobrecargada.
Véase también itemAt() y Sorting.
QList<QGraphicsItem *> QGraphicsScene::items(qreal x, qreal y, qreal w, qreal h, Qt::ItemSelectionMode mode, Qt::SortOrder order, const QTransform &deviceTransform = QTransform()) const
Devuelve todos los elementos visibles que, en función de mode, están dentro del rectángulo definido por x, y, w y h o se cruzan con él, en una lista ordenada mediante order. En este caso, "visible" define los elementos para los que: isVisible() devuelve true, effectiveOpacity() devuelve un valor superior a 0,0 (que es totalmente transparente) y el elemento padre no lo recorta.
deviceTransform es la transformación que se aplica a la vista, y debe proporcionarse si la escena contiene elementos que ignoran las transformaciones.
Esta es una función sobrecargada.
QRectF QGraphicsScene::itemsBoundingRect() const
Calcula y devuelve el rectángulo delimitador de todos los elementos de la escena. Esta función trabaja iterando sobre todos los elementos, y debido a esto, puede ser lenta para escenas grandes.
Véase también sceneRect().
[virtual protected] void QGraphicsScene::keyPressEvent(QKeyEvent *keyEvent)
Este manejador de eventos, para el evento keyEvent, puede ser reimplementado en una subclase para recibir eventos de pulsación de teclas. La implementación por defecto reenvía el evento al elemento de foco actual.
Ver también QGraphicsItem::keyPressEvent() y focusItem().
[virtual protected] void QGraphicsScene::keyReleaseEvent(QKeyEvent *keyEvent)
Este manejador de eventos, para el evento keyEvent, puede ser reimplementado en una subclase para recibir eventos de liberación de teclas. La implementación por defecto reenvía el evento al elemento de foco actual.
Véase también QGraphicsItem::keyReleaseEvent() y focusItem().
[virtual protected] void QGraphicsScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *mouseEvent)
Este manejador de eventos, para el evento mouseEvent, puede ser reimplementado en una subclase para recibir eventos de doble clic del ratón para la escena.
Si alguien hace doble clic en la escena, la escena recibirá primero un evento de pulsación del ratón, seguido de un evento de liberación (es decir, un clic), luego un evento de doble clic, y finalmente un evento de liberación. Si el evento de doble clic se envía a un elemento diferente del que recibió la primera pulsación y liberación, se enviará como un evento de pulsación. Sin embargo, en este caso, los eventos de triple clic no se envían como eventos de doble clic.
La implementación por defecto es similar a mousePressEvent().
Nota: Véase items() para una definición de los elementos que esta función considera visibles.
Véase también QGraphicsItem::mousePressEvent(), QGraphicsItem::mouseMoveEvent(), QGraphicsItem::mouseReleaseEvent(), y QGraphicsItem::setAcceptedMouseButtons().
QGraphicsItem *QGraphicsScene::mouseGrabberItem() const
Devuelve el ítem actual que captura el ratón, o nullptr si no hay ningún ítem capturando el ratón. El elemento de captura del ratón es el elemento que recibe todos los eventos de ratón enviados a la escena.
Un elemento se convierte en capturador del ratón cuando recibe y acepta un evento de pulsación del ratón, y permanece como capturador del ratón hasta que ocurre cualquiera de los siguientes eventos:
- Si el elemento recibe un evento de liberación del ratón cuando no hay otros botones pulsados, pierde el agarre del ratón.
- Si el elemento se vuelve invisible (es decir, alguien llama a
item->setVisible(false)), o si se desactiva (es decir, alguien llama aitem->setEnabled(false)), pierde el agarre del ratón. - Si el elemento se elimina de la escena, pierde el agarre del ratón.
Si el elemento pierde el agarre del ratón, la escena ignorará todos los eventos de ratón hasta que un nuevo elemento agarre el ratón (es decir, hasta que un nuevo elemento reciba un evento de pulsación del ratón).
[virtual protected] void QGraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
Este manejador de eventos, para el evento mouseEvent, puede ser reimplementado en una subclase para recibir eventos de movimiento del ratón para la escena.
La implementación por defecto depende del estado del mouse grabber. Si hay un ítem mouse grabber, el evento es enviado al mouse grabber. Si hay algún elemento que acepte eventos hover en la posición actual, el evento se traduce en un evento hover y se acepta; en caso contrario, se ignora.
Véase también QGraphicsItem::mousePressEvent(), QGraphicsItem::mouseReleaseEvent(), QGraphicsItem::mouseDoubleClickEvent(), y QGraphicsItem::setAcceptedMouseButtons().
[virtual protected] void QGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
Este manejador de eventos, para el evento mouseEvent, puede ser reimplementado en una subclase para recibir eventos de pulsación del ratón para la escena.
La implementación por defecto depende del estado de la escena. Si hay un elemento de captura del ratón, entonces el evento se envía a la captura del ratón. En caso contrario, se reenvía al elemento visible más alto que acepte eventos de ratón en la posición de la escena del evento, y ese elemento se convierte inmediatamente en el elemento de captura del ratón.
Si no hay ningún elemento en la posición dada en la escena, el área de selección se reinicia, cualquier elemento enfocado pierde su foco de entrada, y el evento es ignorado.
Nota: Véase items() para una definición de qué elementos son considerados visibles por esta función.
Véase también QGraphicsItem::mousePressEvent() y QGraphicsItem::setAcceptedMouseButtons().
[virtual protected] void QGraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
Este manejador de eventos, para el evento mouseEvent, puede ser reimplementado en una subclase para recibir eventos de liberación del ratón para la escena.
La implementación por defecto depende del estado del mouse grabber. Si no hay mouse grabber, el evento es ignorado. De lo contrario, si hay un elemento de captura del ratón, el evento se envía al capturador del ratón. Si esta liberación del ratón representa el último botón pulsado del ratón, el elemento de agarre del ratón pierde entonces el agarre del ratón.
Véase también QGraphicsItem::mousePressEvent(), QGraphicsItem::mouseMoveEvent(), QGraphicsItem::mouseDoubleClickEvent(), y QGraphicsItem::setAcceptedMouseButtons().
void QGraphicsScene::removeItem(QGraphicsItem *item)
Elimina el elemento item y todos sus hijos de la escena. La propiedad de item se transfiere a la persona que llama (es decir, QGraphicsScene ya no borrará item cuando se destruya).
Véase también addItem().
void QGraphicsScene::render(QPainter *painter, const QRectF &target = QRectF(), const QRectF &source = QRectF(), Qt::AspectRatioMode aspectRatioMode = Qt::KeepAspectRatio)
Renderiza el source rect de la escena en target, usando painter. Esta función es útil para capturar el contenido de la escena en un dispositivo de pintura, como QImage (por ejemplo, para hacer una captura de pantalla), o para imprimir con QPrinter. Por ejemplo:
QGraphicsScene scene; scene.addItem(... ... QPrinter printer(QPrinter::HighResolution); printer.setPaperSize(QPrinter::A4); QPainter painter(&printer); scene.render(&painter);
Si source es un rect nulo, esta función usará sceneRect() para determinar qué renderizar. Si target es un rect nulo, se utilizarán las dimensiones del dispositivo de pintura de painter.
El contenido del rectángulo de origen se transformará de acuerdo con aspectRatioMode para encajar en el rectángulo de destino. Por defecto, la relación de aspecto se mantiene, y source se escala para encajar en target.
Véase también QGraphicsView::render().
[signal] void QGraphicsScene::sceneRectChanged(const QRectF &rect)
Esta señal es emitida por QGraphicsScene cada vez que cambia el rectángulo de la escena. El parámetro rect es el nuevo rectángulo de escena.
Véase también QGraphicsView::updateSceneRect().
QList<QGraphicsItem *> QGraphicsScene::selectedItems() const
Devuelve una lista de todos los elementos seleccionados actualmente. Los elementos se devuelven sin ningún orden en particular.
Véase también setSelectionArea().
QPainterPath QGraphicsScene::selectionArea() const
Devuelve el área de selección que se estableció previamente con setSelectionArea(), o un QPainterPath vacío si no se ha establecido ningún área de selección.
Véase también setSelectionArea().
[signal] void QGraphicsScene::selectionChanged()
Esta señal es emitida por QGraphicsScene cada vez que cambia la selección. Puede llamar a selectedItems() para obtener la nueva lista de elementos seleccionados.
La selección cambia siempre que se selecciona o deselecciona un elemento, se establece, borra o modifica de otro modo un área de selección, si se añade a la escena un elemento preseleccionado o si se elimina de la escena un elemento seleccionado.
QGraphicsScene emite esta señal sólo una vez para las operaciones de selección de grupo. Por ejemplo, si establece un área de selección, selecciona o deselecciona un QGraphicsItemGroup, o si añade o elimina de la escena un elemento padre que contiene varios elementos seleccionados, selectionChanged() se emite sólo una vez después de que la operación haya finalizado (en lugar de una vez por cada elemento).
Véase también setSelectionArea(), selectedItems() y QGraphicsItem::setSelected().
bool QGraphicsScene::sendEvent(QGraphicsItem *item, QEvent *event)
Envía el evento event al elemento item a través de los posibles filtros de eventos.
El evento se envía sólo si el elemento está habilitado.
Devuelve false si el evento fue filtrado o si el ítem está deshabilitado. En caso contrario devuelve el valor que fue devuelto por el manejador del evento.
Véase también QGraphicsItem::sceneEvent() y QGraphicsItem::sceneEventFilter().
void QGraphicsScene::setActivePanel(QGraphicsItem *item)
Activa item, que debe ser un elemento en esta escena. También puedes pasar 0 para item, en cuyo caso QGraphicsScene desactivará cualquier panel actualmente activo.
Si la escena está actualmente inactiva, item permanecerá inactivo hasta que la escena se active (o, ir item es nullptr, no se activará ningún elemento).
Véase también activePanel(), isActive() y QGraphicsItem::isActive().
void QGraphicsScene::setActiveWindow(QGraphicsWidget *widget)
Activa widget, que debe ser un widget en esta escena. También puedes pasar 0 para widget, en cuyo caso QGraphicsScene desactivará cualquier ventana actualmente activa.
Véase también activeWindow() y QGraphicsWidget::isActiveWindow().
void QGraphicsScene::setFocus(Qt::FocusReason focusReason = Qt::OtherFocusReason)
Fija el foco en la escena enviando un QFocusEvent a la escena, pasando focusReason como razón. Si la escena recupera el foco después de haberlo perdido previamente mientras un elemento tenía el foco, el último elemento enfocado recibirá el foco con focusReason como razón.
Si la escena ya tiene foco, esta función no hace nada.
Ver también hasFocus(), clearFocus(), y setFocusItem().
void QGraphicsScene::setFocusItem(QGraphicsItem *item, Qt::FocusReason focusReason = Qt::OtherFocusReason)
Establece el elemento de foco de la escena en item, con el motivo de foco focusReason, después de quitar el foco de cualquier elemento anterior que pudiera haberlo tenido.
Si item es nullptr, o si no acepta el foco (es decir, no tiene la bandera QGraphicsItem::ItemIsFocusable activada), o no es visible o no está activado, esta función sólo elimina el foco de cualquier focusitem anterior.
Si el elemento no es nullptr, y la escena no tiene actualmente el foco (es decir, hasFocus() devuelve false), esta función llamará automáticamente a setFocus().
Véase también focusItem(), hasFocus() y setFocus().
void QGraphicsScene::setSelectionArea(const QPainterPath &path, const QTransform &deviceTransform)
Establece el área de selección en path. Todos los elementos dentro de esta área se seleccionan inmediatamente, y todos los elementos fuera de ella se deseleccionan. Puedes obtener la lista de todos los elementos seleccionados llamando a selectedItems().
deviceTransform es la transformación que se aplica a la vista, y debe proporcionarse si la escena contiene elementos que ignoran las transformaciones.
Para que un elemento sea seleccionado, debe estar marcado como seleccionable (QGraphicsItem::ItemIsSelectable).
Véase también clearSelection() y selectionArea().
void QGraphicsScene::setSelectionArea(const QPainterPath &path, Qt::ItemSelectionOperation selectionOperation = Qt::ReplaceSelection, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, const QTransform &deviceTransform = QTransform())
Establece el área de selección en path utilizando mode para determinar si los elementos están incluidos en el área de selección.
deviceTransform es la transformación que se aplica a la vista, y debe proporcionarse si la escena contiene elementos que ignoran las transformaciones.
selectionOperation determina qué hacer con los elementos actualmente seleccionados.
Se trata de una función sobrecargada.
Véase también clearSelection() y selectionArea().
void QGraphicsScene::setStyle(QStyle *style)
Establece o reemplaza el estilo de la escena a style, y reparents el estilo a esta escena. Cualquier estilo asignado previamente se elimina. El estilo por defecto de la escena es QApplication::style(), y sirve como estilo por defecto para todos los elementos QGraphicsWidget de la escena.
Cambiar el estilo, ya sea directamente llamando a esta función, o indirectamente llamando a QApplication::setStyle(), actualizará automáticamente el estilo para todos los widgets de la escena que no tengan un estilo explícitamente asignado.
Si style es nullptr, QGraphicsScene volverá a QApplication::style().
Véase también style().
QStyle *QGraphicsScene::style() const
Devuelve el estilo de la escena, o lo mismo que QApplication::style() si no se ha asignado explícitamente un estilo a la escena.
Véase también setStyle().
[slot] void QGraphicsScene::update(const QRectF &rect = QRectF())
Programa un redibujado del área rect en la escena.
Nota: Esta ranura está sobrecargada. Para conectarse a esta ranura:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
graphicsScene, qOverload(&QGraphicsScene::update));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
graphicsScene, [receiver = graphicsScene](const QRectF &rect) { receiver->update(rect); }); Véase también sceneRect() y changed().
void QGraphicsScene::update(qreal x, qreal y, qreal w, qreal h)
Esta función equivale a llamar a update(QRectF(x, y, w, h));
Se trata de una función sobrecargada.
QList<QGraphicsView *> QGraphicsScene::views() const
Devuelve una lista de todas las vistas que muestran esta escena.
Véase también QGraphicsView::scene().
[virtual protected] void QGraphicsScene::wheelEvent(QGraphicsSceneWheelEvent *wheelEvent)
Este manejador de eventos, para el evento wheelEvent, puede ser reimplementado en una subclase para recibir eventos de rueda de ratón para la escena.
Por defecto, el evento se envía al elemento visible situado más arriba bajo el cursor. Si se ignora, el evento se propaga al elemento situado debajo, y de nuevo hasta que el evento es aceptado, o alcanza la escena. Si ningún elemento acepta el evento, éste se ignora.
Nota: Véase items() para una definición de los elementos que esta función considera visibles.
Véase también QGraphicsItem::wheelEvent().
qreal QGraphicsScene::width() const
Esta función es equivalente a llamar a sceneRect().width().
Véase también height().
© 2026 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.