Класс QGraphicsScene
Класс QGraphicsScene предоставляет поверхность для управления большим количеством 2D графических элементов. Подробнее...
| Заголовок: | #include <QGraphicsScene> |
| CMake: | find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Наследует: | QObject |
Открытые типы
| Перечисление | ItemIndexMethod { BspTreeIndex, NoIndex } |
| Перечисление | SceneLayer { ItemLayer, BackgroundLayer, ForegroundLayer, AllLayers } |
| Флаги | SceneLayers |
Свойства
|
|
Открытые функции
| QGraphicsScene(qreal x, qreal y, qreal width, qreal height, QObject *parent = nullptr) | |
| QGraphicsScene(const QRectF &sceneRect, QObject *parent = nullptr) | |
| QGraphicsScene(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 QRectF &rect, 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 QPainterPath &path, 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 |
Public Slots
| void | advance() |
| void | clear() |
| void | clearSelection() |
| void | invalidate(const QRectF &rect = QRectF(), QGraphicsScene::SceneLayers layers = AllLayers) |
| void | update(const QRectF &rect = QRectF()) |
Signals
| void | changed(const QList<QRectF> ®ion) |
| void | focusItemChanged(QGraphicsItem *newFocusItem, QGraphicsItem *oldFocusItem, Qt::FocusReason reason) |
| void | sceneRectChanged(const QRectF &rect) |
| void | selectionChanged() |
Protected Functions
| виртуальный void | contextMenuEvent(QGraphicsSceneContextMenuEvent *contextMenuEvent) |
| виртуальный void | dragEnterEvent(QGraphicsSceneDragDropEvent *event) |
| виртуальный void | dragLeaveEvent(QGraphicsSceneDragDropEvent *event) |
| виртуальный void | dragMoveEvent(QGraphicsSceneDragDropEvent *event) |
| виртуальный void | drawBackground(QPainter *painter, const QRectF &rect) |
| виртуальный void | drawForeground(QPainter *painter, const QRectF &rect) |
| виртуальный void | dropEvent(QGraphicsSceneDragDropEvent *event) |
| виртуальный void | focusInEvent(QFocusEvent *focusEvent) |
| виртуальный void | focusOutEvent(QFocusEvent *focusEvent) |
| виртуальный void | helpEvent(QGraphicsSceneHelpEvent *helpEvent) |
| виртуальный void | inputMethodEvent(QInputMethodEvent *event) |
| виртуальный void | keyPressEvent(QKeyEvent *keyEvent) |
| виртуальный void | keyReleaseEvent(QKeyEvent *keyEvent) |
| виртуальный void | mouseDoubleClickEvent(QGraphicsSceneMouseEvent *mouseEvent) |
| виртуальный void | mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent) |
| виртуальный void | mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) |
| виртуальный void | mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent) |
| виртуальный void | wheelEvent(QGraphicsSceneWheelEvent *wheelEvent) |
Переопределённые защищённые функции
| виртуальный bool | event(QEvent *event) override |
| виртуальный bool | eventFilter(QObject *watched, QEvent *event) override |
Защищённые слоты
| виртуальный bool | focusNextPrevChild(bool next) |
Подробное описание
Класс служит контейнером для QGraphicsItems. Он используется вместе с QGraphicsView для визуализации графических элементов, таких как линии, прямоугольники, текст или даже пользовательские элементы, на двумерной поверхности. QGraphicsScene является частью фреймворка просмотра графики.
QGraphicsScene также предоставляет функциональность, которая позволяет эффективно определять как расположение элементов, так и элементы, видимые в произвольной области сцены. С помощью виджета QGraphicsView вы можете либо визуализировать всю сцену, либо приблизить и просмотреть только части сцены.
Пример:
QGraphicsScene scene;
scene.addText("Hello, world!");
QGraphicsView view(&scene);
view.show(); Обратите внимание, что у QGraphicsScene нет собственного визуального представления; он только управляет элементами. Вам необходимо создать виджет QGraphicsView, чтобы визуализировать сцену.
Для добавления элементов на сцену вы начинаете с создания объекта QGraphicsScene. Затем у вас есть два варианта: либо добавьте существующие объекты QGraphicsItem, вызвав addItem(), или вы можете вызвать одну из функций-утилит addEllipse(), addLine(), addPath(), addPixmap(), addPolygon(), addRect() или addText(), которые все возвращают указатель на только что добавленный элемент. Размеры элементов, добавленных с помощью этих функций, относительны к системе координат элемента, а положение элементов инициализируется в (0, 0) на сцене.
Затем вы можете визуализировать сцену с помощью QGraphicsView. При изменении сцены (например, при перемещении или преобразовании элемента) QGraphicsScene испускает сигнал changed(). Чтобы удалить элемент, вызовите removeItem().
QGraphicsScene использует алгоритм индексирования для эффективного управления расположением элементов. По умолчанию используется дерево BSP (Binary Space Partitioning); алгоритм, подходящий для больших сцен, где большинство элементов остаются статичными (т. е. не перемещаются).
Вы можете отключить этот индекс, вызвав setItemIndexMethod(). Более подробную информацию о доступных алгоритмах индексирования см. в свойстве itemIndexMethod.
Границы сцены устанавливаются с помощью вызова setSceneRect(). Элементы можно размещать в любом месте сцены, а размер сцены по умолчанию без ограничений. Границы сцены используются только для внутренней работы, поддерживая индекс элементов сцены. Если границы сцены не установлены, QGraphicsScene будет использовать граничную область всех элементов, как возвращается itemsBoundingRect(), в качестве границ сцены. Однако itemsBoundingRect() — относительно затратная функция, так как она работает, собирая информацию о позиции для каждого элемента на сцене. По этой причине вы всегда должны устанавливать границы сцены при работе с большими сценами.
Одним из самых больших преимуществ QGraphicsScene является его способность эффективно определять расположение элементов. Даже с миллионами элементов на сцене функции items() могут определить расположение элемента за несколько миллисекунд. Существует несколько перегрузок для items(): одна, которая находит элементы в определенной позиции, одна, которая находит элементы внутри или пересекающиеся с многоугольником или прямоугольником, и многое другое. Список возвращаемых элементов отсортирован по порядку стекирования, где верхний элемент — это первый элемент в списке. Для удобства также есть функция itemAt(), которая возвращает самый верхний элемент в заданной позиции.
QGraphicsScene поддерживает информацию о выделении для сцены. Для выбора элементов вызовите setSelectionArea(), а для очистки текущего выделения — clearSelection(). Вызовите selectedItems(), чтобы получить список всех выделенных элементов.
Обработка и распространение событий
Ещё одна обязанность QGraphicsScene — распространять события от QGraphicsView. Чтобы отправить событие на сцену, вы создаёте событие, наследующее от QEvent, и отправляете его, например, с помощью QCoreApplication::sendEvent(). event() отвечает за рассылку события отдельным элементам. Некоторые общие события обрабатываются удобными обработчиками событий. Например, события нажатия клавиш обрабатываются keyPressEvent(), а события нажатия мыши — mousePressEvent().
События клавиш доставляются элементу фокуса. Чтобы установить фокусируемый элемент, вы можете либо вызвать setFocusItem(), передавая элемент, который принимает фокус, либо сам элемент может вызвать QGraphicsItem::setFocus(). Вызовите focusItem(), чтобы получить текущий фокусируемый элемент. Для совместимости с виджетами сцена также сохраняет свою собственную информацию о фокусе. По умолчанию у сцены нет фокуса, и все события нажатия клавиш игнорируются. Если вызывается setFocus() или если какой-либо элемент на сцене получает фокус, сцена автоматически получает фокус. Если у сцены есть фокус, hasFocus() вернёт true, и события нажатия клавиш будут переданы элементу фокуса, если таковой имеется. Если сцена теряет фокус (например, кто-то вызвал clearFocus()) в то время, когда элемент имеет фокус, сцена сохранит информацию о фокусе элемента, и как только сцена вновь получит фокус, она позаботится о том, чтобы последний фокусируемый элемент вновь получил фокус.
Для эффектов наведения курсора QGraphicsScene отправляет события наведения. Если элемент принимает события наведения (см. QGraphicsItem::acceptHoverEvents()), он получит событие GraphicsSceneHoverEnter, когда курсор войдёт в его область. По мере продолжения перемещения курсора внутри области элемента QGraphicsScene будет отправлять ему события GraphicsSceneHoverMove. Когда курсор покинет область элемента, элемент получит событие GraphicsSceneHoverLeave.
Все события мыши передаются текущему элементу захвата мыши. Элемент становится захватчиком мыши сцены, если он принимает события мыши (см. QGraphicsItem::acceptedMouseButtons()), и получает нажатие мыши. Он остаётся захватчиком мыши до тех пор, пока не получит отпускание мыши, когда другие кнопки мыши не нажаты. Вы можете вызвать mouseGrabberItem(), чтобы определить, какой элемент в настоящее время захватывает мышь.
См. также QGraphicsItem и QGraphicsView.
Документация по типам членов
enum QGraphicsScene::ItemIndexMethod
Этот перечисление описывает алгоритмы индексирования, предоставляемые QGraphicsScene для управления позиционной информацией об элементах на сцене.
| Константа | Значение | Описание |
|---|---|---|
QGraphicsScene::BspTreeIndex |
0 |
Используется дерево двоичного разбиения пространства. Все алгоритмы определения расположения элементов QGraphicsScene имеют сложность, близкую к логарифмической, используя двоичный поиск. Добавление, перемещение и удаление элементов выполняется за логарифмическое время. Этот подход лучше всего подходит для статических сцен (т.е. сцен, где большинство элементов не перемещаются). |
QGraphicsScene::NoIndex |
-1 |
Индекс не применяется. Позиция элемента имеет линейную сложность, так как все элементы на сцене просматриваются. Однако добавление, перемещение и удаление элементов выполняется за константное время. Этот подход идеально подходит для динамических сцен, где многие элементы постоянно добавляются, перемещаются или удаляются. |
См. также setItemIndexMethod() и bspTreeDepth.
enum QGraphicsScene::SceneLayerflags QGraphicsScene::SceneLayers
Это перечисление описывает слои рендеринга в QGraphicsScene. Когда QGraphicsScene отрисовывает содержимое сцены, он рендерит каждый из этих слоёв по отдельности в определённом порядке.
Каждый слой представляет собой флаг, который можно объединять при помощи операции OR, когда вызываются функции, такие как invalidate() или QGraphicsView::invalidateScene().
| Константа | Значение | Описание |
|---|---|---|
QGraphicsScene::ItemLayer |
0x1 |
Слой элементов. QGraphicsScene рендерит все элементы на этом слое, вызывая виртуальную функцию drawItems(). Слой элементов отрисовывается после слоя фона, но перед слоем переднего плана. |
QGraphicsScene::BackgroundLayer |
0x2 |
Слой фона. QGraphicsScene рендерит фон сцены на этом слое, вызывая виртуальную функцию drawBackground(). Слой фона отрисовывается первым. |
QGraphicsScene::ForegroundLayer |
0x4 |
Слой переднего плана. QGraphicsScene рендерит переднюю часть сцены на этом слое, вызывая виртуальную функцию drawForeground(). Слой переднего плана отрисовывается последним. |
QGraphicsScene::AllLayers |
0xffff |
Все слои; это значение представляет собой комбинацию всех трёх слоёв. |
Тип SceneLayers — это псевдоним для QFlags<SceneLayer>. Он хранит объединение значений SceneLayer с помощью операции OR.
См. также invalidate() и QGraphicsView::invalidateScene().
Документация свойств
backgroundBrush : QBrush
Это свойство содержит кисть фона сцены.
Измените это свойство, чтобы изменить фон сцены на другой цвет, градиент или текстуру. По умолчанию кисть фона — Qt::NoBrush. Фон отрисовывается перед (за) элементами.
Пример:
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() вызывает drawBackground() для отрисовки фона сцены. Для более детального управления отрисовкой фона вы можете переопределить drawBackground() в подклассе QGraphicsScene.
Функции доступа:
| QBrush | backgroundBrush() const |
| void | setBackgroundBrush(const QBrush &brush) |
bspTreeDepth : int
Это свойство содержит глубину дерева индексов BSP QGraphicsScene.
Это свойство не оказывает никакого влияния, когда используется NoIndex.
Это значение определяет глубину дерева BSP QGraphicsScene. Глубина напрямую влияет на производительность и использование памяти QGraphicsScene; последнее растет экспоненциально с глубиной дерева. При оптимальной глубине дерева QGraphicsScene может мгновенно определить расположение элементов, даже для сцен с тысячами или миллионами элементов. Это также значительно улучшает производительность рендеринга.
По умолчанию значение равно 0, в этом случае Qt подберет разумную глубину по умолчанию, исходя из размера, положения и количества элементов в сцене. Однако, если эти параметры часто меняются, вы можете столкнуться с замедлением, так как QGraphicsScene внутренне перенастраивает глубину. Вы можете избежать потенциальных замедлений, зафиксировав глубину дерева, установив это свойство.
Глубина дерева и размер прямоугольника сцены определяют детализацию разбиения сцены. Размер каждого сегмента сцены определяется следующим алгоритмом:
QSizeF segmentSize = sceneRect().size() / pow(2, depth - 1);
Дерево BSP имеет оптимальный размер, когда каждый сегмент содержит от 0 до 10 элементов.
Функции доступа:
| int | bspTreeDepth() const |
| void | setBspTreeDepth(int depth) |
См. также itemIndexMethod.
[since 5.12] focusOnTouch : bool
Это свойство определяет, получают ли элементы фокус при получении события touch begin.
Обычное поведение заключается в передаче фокуса только при нажатии на элемент. Часто тап на трекпаде интерпретируется операционной системой как щелчок мышью, генерируя синтезированное событие щелчка в ответ. Однако, по крайней мере, на macOS вы можете настроить это поведение.
По умолчанию QGraphicsScene также передает фокус при касании трекпада или аналогичного устройства. Если операционная система настроена не генерировать синтетический щелчок мыши при касании трекпада, это неожиданно. Если операционная система генерирует синтетические щелчки мыши при касании трекпада, передача фокуса при старте жеста касания излишня.
Выключив focusOnTouch, QGraphicsScene ведет себя так, как ожидается на macOS.
Значение по умолчанию — true, гарантируя, что поведение по умолчанию соответствует версиям Qt до 5.12. Установите в false для предотвращения запуска изменений фокуса при событиях касания.
Это свойство было добавлено в Qt 5.12.
Функции доступа:
| bool | focusOnTouch() const |
| void | setFocusOnTouch(bool enabled) |
font : QFont
Это свойство содержит шрифт по умолчанию сцены.
Это свойство предоставляет шрифт сцены. Шрифт сцены по умолчанию — и разрешает все свои записи из QApplication::font.
Если шрифт сцены изменяется, либо напрямую через setFont(), либо косвенно при изменении шрифта приложения, QGraphicsScene сначала отправляет себе событие FontChange, а затем отправляет события FontChange всем элементам верхнего уровня виджета в сцене. Эти элементы реагируют, разрешая собственные шрифты к сцене, и затем уведомляют своих детей, которые, в свою очередь, уведомляют своих детей, и так далее, пока все элементы виджета не обновили свои шрифты.
Изменение шрифта сцены (прямо или косвенно через QApplication::setFont()) автоматически планирует перерисовку всей сцены.
Функции доступа:
| QFont | font() const |
| void | setFont(const QFont &font) |
См. также QWidget::font, QApplication::setFont(), palette и style().
foregroundBrush : QBrush
Это свойство содержит кисть переднего плана сцены.
Измените это свойство, чтобы установить передний план сцены в другой цвет, градиент или текстуру.
Передний план отрисовывается после (сверху) элементов. По умолчанию кисть переднего плана — Qt::NoBrush (т.е. передний план не отрисовывается).
Пример:
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() вызывает drawForeground() для отрисовки переднего плана сцены. Для более детального управления отрисовкой переднего плана вы можете переопределить функцию drawForeground() в подклассе QGraphicsScene.
Функции доступа:
| QBrush | foregroundBrush() const |
| void | setForegroundBrush(const QBrush &brush) |
itemIndexMethod : ItemIndexMethod
Это свойство содержит метод индексации элементов.
QGraphicsScene применяет алгоритм индексации к сцене, чтобы ускорить функции поиска элементов, такие как items() и itemAt(). Индексация наиболее эффективна для статических сцен (т.е. где элементы не перемещаются). Для динамических сцен или сцен с многими анимированными элементами ведение индексов может перевесить быстрые скорости поиска.
В общем случае, метод индексации по умолчанию BspTreeIndex работает хорошо. Если ваша сцена использует много анимаций и вы сталкиваетесь с замедлением, вы можете отключить индексацию, вызвав setItemIndexMethod(NoIndex).
Функции доступа:
| QGraphicsScene::ItemIndexMethod | itemIndexMethod() const |
| void | setItemIndexMethod(QGraphicsScene::ItemIndexMethod method) |
См. также bspTreeDepth.
[since 5.4] minimumRenderSize : qreal
Это свойство содержит минимальный размер, преобразованный в просмотр, который должен иметь элемент для отрисовки.
При рендеринге сцены любой элемент, чья ширина или высота, преобразованные в целевой просмотр, меньше minimumRenderSize(), не будет отрисовываться. Если элемент не отрисовывается, и он обрезает свои дочерние элементы, они также не будут отрисованы. Установите это значение для ускорения рендеринга сцен с множеством объектов, отрисованных в сильно уменьшенном просмотре.
Значение по умолчанию — 0. Если не установлено или установлено в 0 или отрицательное значение, все элементы всегда будут отрисованы.
Например, это свойство особенно полезно, если сцена рендерится несколькими просмотрами, один из которых служит обзором, который всегда отображает все элементы. В сценах с большим количеством элементов такой просмотр будет использовать большой коэффициент масштабирования, чтобы показать все элементы. Из-за масштабирования меньшие элементы будут вносить незначительный вклад в итоговую отрисованную сцену. Для избежания отрисовки этих элементов и сокращения времени, необходимого для отрисовки сцены, вы можете вызвать setMinimumRenderSize() с ненулевым значением.
Примечание: Элементы, которые не отображаются из-за слишком малого размера, все еще возвращаются методами, такими как items() и itemAt(), и участвуют в обнаружении столкновений и взаимодействиях. Рекомендуется установить minimumRenderSize() на значение, меньшее или равное 1, чтобы избежать больших неотрисованных элементов, которые участвуют во взаимодействиях.
Это свойство было добавлено в Qt 5.4.
Функции доступа:
| qreal | minimumRenderSize() const |
| void | setMinimumRenderSize(qreal minSize) |
См. также QStyleOptionGraphicsItem::levelOfDetailFromTransform().
palette : QPalette
Это свойство содержит стандартную палитру сцены.
Это свойство предоставляет палитру сцены. Палитра сцены по умолчанию и разрешает все свои записи из QApplication::palette.
Если палитра сцены изменяется, либо напрямую через setPalette(), либо косвенно при изменении палитры приложения, QGraphicsScene сначала отправляет себе событие PaletteChange, а затем отправляет события PaletteChange всем элементам виджетов верхнего уровня в сцене. Эти элементы реагируют, разрешая свои собственные палитры для сцены, и затем уведомляют своих потомков, которые снова уведомляют своих потомков и так далее, пока все элементы виджетов не обновили свои палитры.
Изменение палитры сцены (напрямую или косвенно через QApplication::setPalette()) автоматически запланирует перерисовку всей сцены.
Функции доступа:
| QPalette | palette() const |
| void | setPalette(const QPalette &palette) |
См. также QWidget::palette, QApplication::setPalette(), font и style.
sceneRect : QRectF
Это свойство хранит прямоугольник сцены; ограничительный прямоугольник сцены.
Прямоугольник сцены определяет пределы сцены. Он в первую очередь используется QGraphicsView для определения области прокрутки по умолчанию и QGraphicsScene для управления индексом элементов.
Если свойство не задано или если оно задано как пустой QRectF, sceneRect() вернёт наибольший ограничительный прямоугольник всех элементов на сцене с момента создания сцены (т.е. прямоугольник, который увеличивается при добавлении или перемещении элементов на сцене, но никогда не уменьшается).
Функции доступа:
| QRectF | sceneRect() const |
| void | setSceneRect(const QRectF &rect) |
| void | setSceneRect(qreal x, qreal y, qreal w, qreal h) |
См. также width(), height() и QGraphicsView::sceneRect.
stickyFocus : bool
Это свойство определяет, будет ли фокус очищаться при нажатии на фон сцены.
В QGraphicsScene со значением stickyFocus, установленным в true, фокус останется неизменным, когда пользователь нажимает на фон сцены или на элемент, который не принимает фокус. В противном случае фокус будет очищен.
По умолчанию это свойство равно false.
Изменения фокуса происходят в ответ на нажатие мыши. Вы можете переопределить mousePressEvent() в подклассе QGraphicsScene, чтобы переключать это свойство в зависимости от того, где пользователь нажал.
Функции доступа:
| bool | stickyFocus() const |
| void | setStickyFocus(bool enabled) |
См. также clearFocus() и setFocusItem().
Документация по членам-функциям
QGraphicsScene::QGraphicsScene(qreal x, qreal y, qreal width, qreal height, QObject *parent = nullptr)
Создаёт объект QGraphicsScene, используя прямоугольник, заданный координатами (x, y), и заданную width и height для прямоугольника сцены. Параметр parent передаётся конструктору QObject.
См. также sceneRect.
QGraphicsScene::QGraphicsScene(const QRectF &sceneRect, QObject *parent = nullptr)
Создаёт объект QGraphicsScene, используя sceneRect для прямоугольника сцены. Параметр parent передаётся конструктору QObject.
См. также sceneRect.
QGraphicsScene::QGraphicsScene(QObject *parent = nullptr)
Создаёт объект QGraphicsScene. Параметр parent передаётся конструктору QObject.
[slot] void QGraphicsScene::advance()
Этот слот переводит сцену на один шаг, вызывая QGraphicsItem::advance() для всех элементов на сцене. Это делается в двух фазах: в первой фазе все элементы уведомляются о том, что сцена собирается измениться, а во второй фазе все элементы уведомляются о возможности перемещения. В первой фазе QGraphicsItem::advance() вызывается, передавая значение 0 в качестве аргумента, а во второй фазе передаётся 1.
Обратите внимание, что вы также можете использовать фреймворк анимации для анимаций.
См. также QGraphicsItem::advance() и QTimeLine.
[signal] void QGraphicsScene::changed(const QList<QRectF> ®ion)
Это сигнал, который испускается QGraphicsScene, когда выполняется цикл обработки событий, если содержимое сцены изменяется. Параметр region содержит список прямоугольников сцены, которые указывают область, которая была изменена.
См. также QGraphicsView::updateScene().
[slot] void QGraphicsScene::clear()
Удаляет и удаляет все элементы из сцены, но в остальном оставляет состояние сцены неизменным.
См. также addItem().
[slot] void QGraphicsScene::clearSelection()
Очищает текущий выбор.
См. также setSelectionArea() и selectedItems().
[signal] void QGraphicsScene::focusItemChanged(QGraphicsItem *newFocusItem, QGraphicsItem *oldFocusItem, Qt::FocusReason reason)
Этот сигнал испускается QGraphicsScene всякий раз, когда фокус меняется в сцене (т.е. когда элемент получает или теряет фокус ввода, или когда фокус передаётся от одного элемента к другому). Вы можете подключиться к этому сигналу, если вам нужно отслеживать, когда другие элементы получают фокус ввода. Это особенно полезно для реализации виртуальных клавиатур, методов ввода и элементов курсора.
oldFocusItem — указатель на элемент, который ранее имел фокус, или 0, если ни один элемент не имел фокуса до отправки сигнала. newFocusItem — указатель на элемент, который получил фокус ввода, или nullptr если фокус был потерян. reason — причина изменения фокуса (например, если сцена была деактивирована, в то время как поле ввода имело фокус, oldFocusItem указывал бы на элемент поля ввода, newFocusItem был бы nullptr, а reason был бы Qt::ActiveWindowFocusReason.
[virtual protected slot] bool QGraphicsScene::focusNextPrevChild(bool next)
Ищет новый виджет, которому нужно присвоить фокус клавиатуры, как это делается для Tab и Shift+Tab, и возвращает true если он может найти новый виджет, или false, если не может. Если next истинно, эта функция выполняет поиск вперёд; если next ложно, она выполняет поиск назад.
Вы можете переопределить эту функцию в подклассе QGraphicsScene, чтобы обеспечить точный контроль над тем, как фокус таба передаётся внутри вашей сцены. Реализация по умолчанию основана на цепочке фокуса таба, определённой QGraphicsWidget::setTabOrder().
[slot] void QGraphicsScene::invalidate(const QRectF &rect = QRectF(), QGraphicsScene::SceneLayers layers = AllLayers)
Делает недействительным и планирует перерисовку слоёв layers в прямоугольнике rect на сцене. Любое кэшированное содержимое в layers безусловно делается недействительным и перерисовывается.
Вы можете использовать эту перегрузку функции, чтобы уведомить QGraphicsScene об изменениях фона или переднего плана сцены. Эта функция обычно используется для сцен с фонами на основе тайлов, чтобы уведомить об изменениях, когда QGraphicsView включил CacheBackground.
Пример:
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]);
}
}
} Обратите внимание, что QGraphicsView в настоящее время поддерживает кэширование фона только (см. QGraphicsView::CacheBackground). Эта функция эквивалентна вызову update() в случае любого слоя, кроме BackgroundLayer.
См. также QGraphicsView::resetCachedContent().
[signal] void QGraphicsScene::sceneRectChanged(const QRectF &rect)
Этот сигнал испускается QGraphicsScene всякий раз, когда изменяется прямоугольник сцены. Параметр rect — это новый прямоугольник сцены.
См. также QGraphicsView::updateSceneRect().
[signal] void QGraphicsScene::selectionChanged()
Этот сигнал испускается QGraphicsScene всякий раз, когда изменяется выделение. Вы можете вызвать selectedItems(), чтобы получить новый список выделенных элементов.
Изменение выделения происходит всякий раз, когда элемент выбирается или отменяется выбор, область выделения устанавливается, очищается или иным образом изменяется, если предварительно выбранный элемент добавляется в сцену или если выбранный элемент удаляется из сцены.
QGraphicsScene испускает этот сигнал только один раз для операций группового выделения. Например, если вы установили область выделения, выбрали или отменили выбор QGraphicsItemGroup, или если вы добавили или удалили из сцены родительский элемент, содержащий несколько выбранных элементов, selectionChanged() испускается только один раз после завершения операции (а не один раз для каждого элемента).
См. также setSelectionArea(), selectedItems() и QGraphicsItem::setSelected().
[slot] void QGraphicsScene::update(const QRectF &rect = QRectF())
Планирует перерисовку области rect на сцене.
См. также sceneRect() и changed().
[virtual] QGraphicsScene::~QGraphicsScene()
Удаляет и удаляет все элементы из объекта сцены перед уничтожением объекта сцены. Объект сцены удаляется из глобального списка сцен приложения, и он удаляется из всех связанных представлений.
QGraphicsItem *QGraphicsScene::activePanel() const
Возвращает текущий активный панель или nullptr если в данный момент нет активной панели.
См. также QGraphicsScene::setActivePanel().
QGraphicsWidget *QGraphicsScene::activeWindow() const
Возвращает текущее активное окно или nullptr если в данный момент нет активного окна.
См. также QGraphicsScene::setActiveWindow().
QGraphicsEllipseItem *QGraphicsScene::addEllipse(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush = QBrush())
Создает и добавляет элемент эллипса на сцену и возвращает указатель на элемент. Геометрия эллипса определяется параметром rect, а его линия и заливка инициализируются параметрами pen и brush.
Обратите внимание, что геометрия элемента задается в координатах элемента, а его положение инициализируется в (0, 0).
Если элемент видимый (т.е., QGraphicsItem::isVisible() возвращает true), QGraphicsScene выведет changed() после возвращения управления в цикл событий.
См. также addLine(), addPath(), addPixmap(), addRect(), addText(), addItem() и addWidget().
QGraphicsEllipseItem *QGraphicsScene::addEllipse(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush())
Эта вспомогательная функция эквивалентна вызову addEllipse(QRectF(x, y, w, h), pen, brush).
void QGraphicsScene::addItem(QGraphicsItem *item)
Добавляет или перемещает item и все его дочерние элементы в эту сцену. Эта сцена принимает владение над item.
Если элемент видимый (т.е., QGraphicsItem::isVisible() возвращает true), QGraphicsScene выведет changed() после возвращения управления в цикл событий.
Если элемент уже находится в другой сцене, он сначала будет удален из старой сцены, а затем добавлен в эту сцену как элемент верхнего уровня.
QGraphicsScene будет отправлять уведомления ItemSceneChange элементу item во время добавления его в сцену. Если элемент в данный момент не принадлежит ни одной сцене, отправляется только одно уведомление. Если он уже принадлежит сцене (т.е., он перемещен в эту сцену), QGraphicsScene отправит уведомление об добавлении, как элемент будет удален из предыдущей сцены.
Если элемент является панелью, сцена активна, и в сцене нет активной панели, то элемент будет активирован.
См. также removeItem(), addEllipse(), addLine(), addPath(), addPixmap(), addRect(), addText(), addWidget() и Сортировка.
QGraphicsLineItem *QGraphicsScene::addLine(const QLineF &line, const QPen &pen = QPen())
Создает и добавляет элемент линии на сцену и возвращает указатель на элемент. Геометрия линии определяется параметром line, а его линия инициализируется параметром pen.
Обратите внимание, что геометрия элемента задается в координатах элемента, а его положение инициализируется в (0, 0).
Если элемент видимый (т.е., QGraphicsItem::isVisible() возвращает true), QGraphicsScene выведет changed() после возвращения управления в цикл событий.
См. также addEllipse(), addPath(), addPixmap(), addRect(), addText(), addItem() и addWidget().
QGraphicsLineItem *QGraphicsScene::addLine(qreal x1, qreal y1, qreal x2, qreal y2, const QPen &pen = QPen())
Эта вспомогательная функция эквивалентна вызову addLine(QLineF(x1, y1, x2, y2), pen).
QGraphicsPathItem *QGraphicsScene::addPath(const QPainterPath &path, const QPen &pen = QPen(), const QBrush &brush = QBrush())
Создает и добавляет элемент пути на сцену и возвращает указатель на элемент. Геометрия пути определяется параметром path, а его линия и заливка инициализируются параметрами pen и brush.
Обратите внимание, что геометрия элемента задается в координатах элемента, а его положение инициализируется в (0, 0).
Если элемент видимый (т.е., QGraphicsItem::isVisible() возвращает true), QGraphicsScene выведет changed() после возвращения управления в цикл событий.
См. также addEllipse(), addLine(), addPixmap(), addRect(), addText(), addItem() и addWidget().
QGraphicsPixmapItem *QGraphicsScene::addPixmap(const QPixmap &pixmap)
Создает и добавляет элемент пиксельной карты на сцену и возвращает указатель на элемент. Пиксельная карта задается параметром pixmap.
Обратите внимание, что геометрия элемента задается в координатах элемента, а его положение инициализируется в (0, 0).
Если элемент видимый (т.е., QGraphicsItem::isVisible() возвращает true), QGraphicsScene выведет changed() после возвращения управления в цикл событий.
См. также addEllipse(), addLine(), addPath(), addRect(), addText(), addItem() и addWidget().
QGraphicsPolygonItem *QGraphicsScene::addPolygon(const QPolygonF &polygon, const QPen &pen = QPen(), const QBrush &brush = QBrush())
Создает и добавляет элемент многоугольника на сцену и возвращает указатель на элемент. Многоугольник определяется параметром polygon, а его контур и заливка инициализируются значениями pen и brush соответственно.
Обратите внимание, что геометрия элемента задается в координатах элемента, а его положение инициализируется значением (0, 0).
Если элемент видим (т. е., QGraphicsItem::isVisible() возвращает true), QGraphicsScene отправит сигнал changed() после возвращения управления в цикл обработки событий.
См. также addEllipse(), addLine(), addPath(), addRect(), addText(), addItem() и addWidget().
QGraphicsRectItem *QGraphicsScene::addRect(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush = QBrush())
Создает и добавляет элемент прямоугольника на сцену и возвращает указатель на элемент. Геометрия прямоугольника определяется параметром rect, а его контур и заливка инициализируются значениями pen и brush соответственно.
Обратите внимание, что геометрия элемента задается в координатах элемента, а его положение инициализируется значением (0, 0). Например, если добавляется QRect(50, 50, 100, 100), его верхний левый угол будет расположен в точке (50, 50) относительно начала координат в системе координат элемента.
Если элемент видим (т. е., QGraphicsItem::isVisible() возвращает true), QGraphicsScene отправит сигнал changed() после возвращения управления в цикл обработки событий.
См. также addEllipse(), addLine(), addPixmap(), addPixmap(), addText(), addItem() и addWidget().
QGraphicsRectItem *QGraphicsScene::addRect(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush())
Эта вспомогательная функция эквивалентна вызову addRect(QRectF(x, y, w, h), pen, brush).
QGraphicsSimpleTextItem *QGraphicsScene::addSimpleText(const QString &text, const QFont &font = QFont())
Создает и добавляет элемент QGraphicsSimpleTextItem на сцену и возвращает указатель на элемент. Строка текста инициализируется значением text, а шрифт — значением font.
Положение элемента инициализируется значением (0, 0).
Если элемент видим (т. е., QGraphicsItem::isVisible() возвращает true), QGraphicsScene отправит сигнал changed() после возвращения управления в цикл обработки событий.
См. также addEllipse(), addLine(), addPixmap(), addPixmap(), addRect(), addItem() и addWidget().
QGraphicsTextItem *QGraphicsScene::addText(const QString &text, const QFont &font = QFont())
Создает и добавляет текстовый элемент на сцену и возвращает указатель на элемент. Строка текста инициализируется значением text, а шрифт — значением font.
Положение элемента инициализируется значением (0, 0).
Если элемент видим (т. е., QGraphicsItem::isVisible() возвращает true), QGraphicsScene отправит сигнал changed() после возвращения управления в цикл обработки событий.
См. также addEllipse(), addLine(), addPixmap(), addPixmap(), addRect(), addItem() и addWidget().
QGraphicsProxyWidget *QGraphicsScene::addWidget(QWidget *widget, Qt::WindowFlags wFlags = Qt::WindowFlags())
Создает новый QGraphicsProxyWidget для widget, добавляет его на сцену и возвращает указатель на прокси-объект. wFlags задают флаги окна по умолчанию для встроенного прокси-виджета.
Положение элемента инициализируется значением (0, 0).
Обратите внимание, что виджеты с установленным атрибутом виджета Qt::WA_PaintOnScreen и виджеты, которые оборачивают внешнее приложение или контроллер, не поддерживаются. Примерами являются QOpenGLWidget и QAxWidget.
См. также addEllipse(), addLine(), addPixmap(), addPixmap(), addRect(), addText(), addSimpleText() и addItem().
void QGraphicsScene::clearFocus()
Удаляет фокус со сцены. Если какой-либо элемент имеет фокус в момент вызова этой функции, он потеряет фокус и вернет его, как только сцена получит фокус.
Сцена, у которой нет фокуса, игнорирует события нажатия клавиш.
См. также hasFocus(), setFocus() и setFocusItem().
QList<QGraphicsItem *> QGraphicsScene::collidingItems(const QGraphicsItem *item, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const
Возвращает список всех элементов, которые сталкиваются с элементом item. Столкновения определяются вызовом QGraphicsItem::collidesWithItem(); обнаружение столкновения определяется параметром mode. По умолчанию возвращаются все элементы, чья форма пересекается с формой item или находится внутри формы item.
Элементы возвращаются в порядке убывания стека (т. е., первый элемент в списке — самый верхний элемент, а последний — самый нижний).
См. также items(), itemAt(), QGraphicsItem::collidesWithItem() и Сортировка.
[virtual protected] void QGraphicsScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *contextMenuEvent)
Этот обработчик событий, для события contextMenuEvent, может быть переопределен в подклассе для получения событий контекстного меню. Стандартная реализация передает событие самому верхнему видимому элементу, который принимает события контекстного меню в позиции события. Если ни один элемент не принимает события контекстного меню в этой позиции, событие игнорируется.
Примечание: см. items() для определения, какие элементы считаются видимыми этой функцией.
См. также QGraphicsItem::contextMenuEvent().
QGraphicsItemGroup *QGraphicsScene::createItemGroup(const QList<QGraphicsItem *> &items)
Группирует все элементы в items в новый QGraphicsItemGroup и возвращает указатель на группу. Группа создается с общим родителем элементов items в качестве родителя и с позицией (0, 0). Все элементы переназначаются в группу, и их позиции и преобразования отображаются в группе. Если items пуста, эта функция вернёт пустую верхнеуровневую QGraphicsItemGroup.
QGraphicsScene владеет элементом группы; вам не нужно его удалять. Чтобы разобрать (разобщить) группу, вызовите destroyItemGroup().
См. также destroyItemGroup() и QGraphicsItemGroup::addToGroup().
void QGraphicsScene::destroyItemGroup(QGraphicsItemGroup *group)
Переродирует все элементы в group в родительский элемент group, затем удаляет group из сцены и, наконец, удаляет его. Положения и преобразования элементов отображаются из группы в родительский элемент группы.
См. также createItemGroup() и QGraphicsItemGroup::removeFromGroup().
[virtual protected] void QGraphicsScene::dragEnterEvent(QGraphicsSceneDragDropEvent *event)
Этот обработчик событий, для события event, может быть переопределён в подклассе для получения событий drag enter для сцены.
Стандартная реализация принимает событие и подготавливает сцену для принятия событий drag move.
См. также QGraphicsItem::dragEnterEvent(), dragMoveEvent(), dragLeaveEvent() и dropEvent().
[virtual protected] void QGraphicsScene::dragLeaveEvent(QGraphicsSceneDragDropEvent *event)
Этот обработчик событий, для события event, может быть переопределён в подклассе для получения событий drag leave для сцены.
См. также QGraphicsItem::dragLeaveEvent(), dragEnterEvent(), dragMoveEvent() и dropEvent().
[virtual protected] void QGraphicsScene::dragMoveEvent(QGraphicsSceneDragDropEvent *event)
Этот обработчик событий, для события event, может быть переопределён в подклассе для получения событий drag move для сцены.
Примечание: См. items() для определения, какие элементы считаются видимыми этой функцией.
См. также QGraphicsItem::dragMoveEvent(), dragEnterEvent(), dragLeaveEvent() и dropEvent().
[virtual protected] void QGraphicsScene::drawBackground(QPainter *painter, const QRectF &rect)
Отображает фон сцены с помощью painter перед отображением элементов и переднего плана. Переопределите эту функцию, чтобы обеспечить пользовательский фон для сцены.
Все рисование выполняется в координатах сцены. Параметр rect — это видимая прямоугольная область.
Если всё, что вам нужно, это определить цвет, текстуру или градиент для фона, вы можете вызвать setBackgroundBrush() вместо этого.
См. также drawForeground() и drawItems().
[virtual protected] void QGraphicsScene::drawForeground(QPainter *painter, const QRectF &rect)
Рисует переднее отображение сцены с помощью painter после отрисовки фона и всех элементов. Переопределите эту функцию, чтобы обеспечить пользовательский передний план для сцены.
Все рисование выполняется в координатах сцены. Параметр rect — это видимая прямоугольная область.
Если всё, что вам нужно, это определить цвет, текстуру или градиент для переднего плана, вы можете вызвать setForegroundBrush() вместо этого.
См. также drawBackground() и drawItems().
[virtual protected] void QGraphicsScene::dropEvent(QGraphicsSceneDragDropEvent *event)
Этот обработчик событий, для события event, может быть переопределён в подклассе для получения событий drop для сцены.
См. также QGraphicsItem::dropEvent(), dragEnterEvent(), dragMoveEvent() и dragLeaveEvent().
[override virtual protected] bool QGraphicsScene::event(QEvent *event)
Переопределяет: QObject::event(QEvent *e).
Обрабатывает событие event и направляет его соответствующим обработчикам событий.
Помимо вызова удобных обработчиков событий, эта функция отвечает за преобразование событий перемещения мыши в события наведения, когда нет элемента захвата мыши. События наведения передаются непосредственно элементам; нет удобной функции для них.
В отличие от QWidget, QGraphicsScene не имеет удобных функций enterEvent() и leaveEvent(). Используйте эту функцию для получения этих событий вместо этого.
Возвращает true если событие event было распознано и обработано; в противном случае возвращает false.
См. также contextMenuEvent(), keyPressEvent(), keyReleaseEvent(), mousePressEvent(), mouseMoveEvent(), mouseReleaseEvent(), mouseDoubleClickEvent(), focusInEvent() и focusOutEvent().
[override virtual protected] bool QGraphicsScene::eventFilter(QObject *watched, QEvent *event)
Переопределяет: QObject::eventFilter(QObject *watched, QEvent *event).
QGraphicsScene фильтрует события QApplication для обнаружения изменений палитры и шрифта.
[virtual protected] void QGraphicsScene::focusInEvent(QFocusEvent *focusEvent)
Этот обработчик событий, для события focusEvent, может быть переопределён в подклассе для получения событий получения фокуса.
Стандартная реализация устанавливает фокус на сцене, а затем на последнем элементе с фокусом.
См. также QGraphicsItem::focusOutEvent().
QGraphicsItem *QGraphicsScene::focusItem() const
Когда сцена активна, эта функция возвращает текущий элемент с фокусом сцены или nullptr если ни один элемент не имеет фокуса. Когда сцена неактивна, эта функция возвращает элемент, который получит фокус ввода, когда сцена станет активной.
Элемент с фокусом получает ввод с клавиатуры, когда сцена получает событие клавиатуры.
См. также setFocusItem(), QGraphicsItem::hasFocus() и isActive().
[virtual protected] void QGraphicsScene::focusOutEvent(QFocusEvent *focusEvent)
Этот обработчик событий, для события focusEvent, может быть переопределён в подклассе для получения событий потери фокуса.
Стандартная реализация удаляет фокус из любого элемента с фокусом, а затем удаляет фокус со сцены.
См. также QGraphicsItem::focusInEvent().
bool QGraphicsScene::hasFocus() const
Возвращает true если сцена имеет фокус; в противном случае возвращает false. Если сцена имеет фокус, она будет перенаправлять события клавиатуры от QKeyEvent любому элементу, который имеет фокус.
См. также setFocus() и setFocusItem().
qreal QGraphicsScene::height() const
Эта удобная функция эквивалентна вызову sceneRect().height().
См. также width().
[virtual protected] void QGraphicsScene::helpEvent(QGraphicsSceneHelpEvent *helpEvent)
Этот обработчик событий, для события helpEvent, может быть переопределён в подклассе для получения событий справки. События имеют тип QEvent::ToolTip, которые создаются при запросе всплывающей подсказки.
Стандартная реализация отображает всплывающую подсказку самого верхнего видимого элемента (т.е., элемента с наибольшим значением z) в позиции курсора мыши. Если ни один элемент не имеет установленной всплывающей подсказки, эта функция ничего не делает.
Примечание: См. items() для определения, какие элементы считаются видимыми этой функцией.
См. также QGraphicsItem::toolTip() и QGraphicsSceneHelpEvent.
[virtual protected] void QGraphicsScene::inputMethodEvent(QInputMethodEvent *event)
Этот обработчик событий, для события event, может быть переопределён в подклассе для получения событий ввода методов для сцены.
Стандартная реализация пересылает событие элементу focusItem(). Если ни один элемент в данный момент не имеет фокуса или текущий элемент с фокусом не принимает методы ввода, эта функция ничего не делает.
См. также QGraphicsItem::inputMethodEvent().
END_OF_DOCUMENT_MARKER
[virtual] QVariant QGraphicsScene::inputMethodQuery(Qt::InputMethodQuery query) const
Этот метод используется методами ввода для запроса набора свойств сцены, чтобы иметь возможность поддерживать сложные операции методов ввода, такие как поддержка окружающего текста и повторные преобразования.
Параметр query указывает, какое свойство запрашивается.
См. также QWidget::inputMethodQuery().
void QGraphicsScene::invalidate(qreal x, qreal y, qreal w, qreal h, QGraphicsScene::SceneLayers layers = AllLayers)
Это перегруженный метод.
Эта вспомогательная функция эквивалентна вызову invalidate(QRectF(x, y, w, h), layers);
bool QGraphicsScene::isActive() const
Возвращает true, если сцена активна (например, она отображается хотя бы одним активным QGraphicsView); в противном случае возвращает false.
См. также QGraphicsItem::isActive() и QWidget::isActiveWindow().
QGraphicsItem *QGraphicsScene::itemAt(const QPointF &position, const QTransform &deviceTransform) const
Возвращает самый верхний видимый элемент в указанной position, или nullptr , если элементов в этой позиции нет.
deviceTransform — преобразование, применяемое к представлению, и его необходимо предоставить, если сцена содержит элементы, которые игнорируют преобразования.
Примечание: см. items() для определения, какие элементы считаются видимыми этой функцией.
См. также items(), collidingItems(), и Сортировка.
QGraphicsItem *QGraphicsScene::itemAt(qreal x, qreal y, const QTransform &deviceTransform) const
Это перегруженный метод.
Возвращает самый верхний видимый элемент в позиции, заданной координатами (x, y), или nullptr , если элементов в этой позиции нет.
deviceTransform — преобразование, применяемое к представлению, и его необходимо предоставить, если сцена содержит элементы, которые игнорируют преобразования.
Эта вспомогательная функция эквивалентна вызову itemAt(QPointF(x, y), deviceTransform).
Примечание: см. items() для определения, какие элементы считаются видимыми этой функцией.
QList<QGraphicsItem *> QGraphicsScene::items(Qt::SortOrder order = Qt::DescendingOrder) const
Возвращает упорядоченный список всех элементов на сцене. order определяет порядок стекирования.
См. также addItem(), removeItem(), и Сортировка.
QList<QGraphicsItem *> QGraphicsScene::items(const QPointF &pos, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const
Возвращает все видимые элементы, которые, в зависимости от mode, находятся в указанной pos в списке, отсортированном по order. В этом случае «видимый» определяет элементы, для которых: isVisible() возвращает true, effectiveOpacity() возвращает значение больше 0.0 (полностью прозрачный), и родительский элемент не обрезает его.
Значение по умолчанию для mode — Qt::IntersectsItemShape; возвращаются все элементы, чья точная форма пересекается с pos.
deviceTransform — преобразование, применяемое к представлению, и его необходимо предоставить, если сцена содержит элементы, которые игнорируют преобразования.
См. также itemAt() и Сортировка.
QList<QGraphicsItem *> QGraphicsScene::items(const QRectF &rect, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const
Это перегруженный метод.
Возвращает все видимые элементы, которые, в зависимости от mode, находятся внутри или пересекаются с заданным rect в списке, отсортированном по order. В этом случае «видимый» определяет элементы, для которых: isVisible() возвращает true, effectiveOpacity() возвращает значение больше 0.0 (полностью прозрачный), и родительский элемент не обрезает его.
Значение по умолчанию для mode — Qt::IntersectsItemShape; возвращаются все элементы, чья точная форма пересекается или содержится внутри rect.
deviceTransform — преобразование, применяемое к представлению, и его необходимо предоставить, если сцена содержит элементы, которые игнорируют преобразования.
См. также itemAt() и Сортировка.
QList<QGraphicsItem *> QGraphicsScene::items(const QPolygonF &polygon, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const
Это перегруженный метод.
Возвращает все видимые элементы, которые, в зависимости от mode, находятся внутри или пересекаются с заданной polygon в списке, отсортированном по order. В этом случае «видимый» определяет элементы, для которых: isVisible() возвращает true, effectiveOpacity() возвращает значение больше 0.0 (полностью прозрачный), и родительский элемент не обрезает его.
Значение по умолчанию для mode — Qt::IntersectsItemShape; возвращаются все элементы, чья точная форма пересекается или содержится внутри polygon.
deviceTransform — преобразование, применяемое к представлению, и его необходимо предоставить, если сцена содержит элементы, которые игнорируют преобразования.
См. также itemAt() и Сортировка.
QList<QGraphicsItem *> QGraphicsScene::items(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const
Это перегруженный метод.
Возвращает все видимые элементы, которые, в зависимости от mode, находятся внутри или пересекаются с заданной path в списке, отсортированном по order. В этом случае «видимый» определяет элементы, для которых: isVisible() возвращает true, effectiveOpacity() возвращает значение больше 0.0 (полностью прозрачный), и родительский элемент не обрезает его.
Значение по умолчанию для mode — Qt::IntersectsItemShape; возвращаются все элементы, чья точная форма пересекается или содержится внутри path.
deviceTransform — преобразование, применяемое к представлению, и его необходимо предоставить, если сцена содержит элементы, которые игнорируют преобразования.
См. также itemAt() и Сортировка.
QList<QGraphicsItem *> QGraphicsScene::items(qreal x, qreal y, qreal w, qreal h, Qt::ItemSelectionMode mode, Qt::SortOrder order, const QTransform &deviceTransform = QTransform()) const
Это перегруженный метод.
Возвращает все видимые элементы, которые, в зависимости от mode, находятся внутри или пересекаются с прямоугольником, определяемым x, y, w и h, в списке, отсортированном по order. В этом случае «видимый» определяет элементы, для которых: isVisible() возвращает true, effectiveOpacity() возвращает значение больше 0.0 (полностью прозрачный), и родительский элемент не обрезает его.
deviceTransform — преобразование, применяемое к представлению, и его необходимо предоставить, если сцена содержит элементы, которые игнорируют преобразования.
QRectF QGraphicsScene::itemsBoundingRect() const
Вычисляет и возвращает ограничивающую прямоугольник всех элементов на сцене. Эта функция работает путем итерации по всем элементам, и из-за этого она может быть медленной для больших сцен.
См. также sceneRect().
[virtual protected] void QGraphicsScene::keyPressEvent(QKeyEvent *keyEvent)
Этот обработчик событий, для события keyEvent, может быть переопределен в подклассе для получения событий нажатия клавиш. По умолчанию реализация передает событие текущему элементу с фокусом.
См. также QGraphicsItem::keyPressEvent() и focusItem().
[virtual protected] void QGraphicsScene::keyReleaseEvent(QKeyEvent *keyEvent)
Этот обработчик событий, для события keyEvent, может быть переопределен в подклассе для получения событий отпускания клавиш. По умолчанию реализация передает событие текущему элементу с фокусом.
См. также QGraphicsItem::keyReleaseEvent() и focusItem().
[virtual protected] void QGraphicsScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *mouseEvent)
Этот обработчик событий, для события mouseEvent, может быть переопределен в подклассе для получения событий двойного щелчка мыши для сцены.
Если кто-то дважды щелкнет по сцене, сцена сначала получит событие нажатия мыши, за которым последует событие отпускания (т. е., щелчок), затем событие двойного щелчка и, наконец, событие отпускания. Если событие двойного щелчка передается другому элементу, чем тот, который получил первое нажатие и отпускание, оно будет передано как событие нажатия. Однако события тройного щелчка не передаются как события двойного щелчка в этом случае.
По умолчанию реализация похожа на mousePressEvent().
Примечание: См. items() для определения, какие элементы считаются видимыми этой функцией.
См. также QGraphicsItem::mousePressEvent(), QGraphicsItem::mouseMoveEvent(), QGraphicsItem::mouseReleaseEvent() и QGraphicsItem::setAcceptedMouseButtons().
QGraphicsItem *QGraphicsScene::mouseGrabberItem() const
Возвращает текущий элемент захвата мыши или nullptr , если в данный момент ни один элемент не захватывает мышь. Элемент захвата мыши — это элемент, который получает все события мыши, отправленные на сцену.
Элемент становится элементом захвата мыши, когда он получает и принимает событие нажатия мыши, и он остается элементом захвата мыши до тех пор, пока не произойдут одно из следующих событий:
- Если элемент получает событие отпускания мыши, когда другие кнопки не нажаты, он теряет захват мыши.
- Если элемент становится невидимым (т. е., кто-то вызывает
item->setVisible(false)), или если он становится неактивным (т. е., кто-то вызываетitem->setEnabled(false)), он теряет захват мыши. - Если элемент удален со сцены, он теряет захват мыши.
Если элемент теряет захват мыши, сцена будет игнорировать все события мыши до тех пор, пока новый элемент не захватит мышь (т. е. до тех пор, пока новый элемент не получит событие нажатия мыши).
[virtual protected] void QGraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
Этот обработчик событий, для события mouseEvent, может быть переопределен в подклассе для получения событий перемещения мыши для сцены.
Реализация по умолчанию зависит от состояния захвата мыши. Если существует элемент захвата мыши, событие отправляется элементу захвата. Если есть какие-либо элементы, которые принимают события наведения на текущей позиции, событие преобразуется в событие наведения и принимается; в противном случае оно игнорируется.
См. также QGraphicsItem::mousePressEvent(), QGraphicsItem::mouseReleaseEvent(), QGraphicsItem::mouseDoubleClickEvent() и QGraphicsItem::setAcceptedMouseButtons().
[virtual protected] void QGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
Этот обработчик событий, для события mouseEvent, может быть переопределен в подклассе для получения событий нажатия мыши для сцены.
Реализация по умолчанию зависит от состояния сцены. Если существует элемент захвата мыши, то событие отправляется элементу захвата. В противном случае оно передается наиболее верхнему видимому элементу, который принимает события мыши в позиции сцены из события, и этот элемент сразу же становится элементом захвата мыши.
Если на сцене нет элемента в данной позиции, область выделения сбрасывается, любой элемент с фокусом теряет фокус ввода, и событие игнорируется.
Примечание: См. items() для определения, какие элементы считаются видимыми этой функцией.
См. также QGraphicsItem::mousePressEvent() и QGraphicsItem::setAcceptedMouseButtons().
[virtual protected] void QGraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
Этот обработчик событий, для события mouseEvent, может быть переопределен в подклассе для получения событий отпускания мыши для сцены.
Реализация по умолчанию зависит от состояния захвата мыши. Если элемента захвата мыши нет, событие игнорируется. В противном случае, если есть элемент захвата мыши, событие отправляется элементу захвата. Если это событие отпускания представляет собой последнюю нажатую кнопку мыши, элемент захвата мыши затем теряет захват мыши.
См. также QGraphicsItem::mousePressEvent(), QGraphicsItem::mouseMoveEvent(), QGraphicsItem::mouseDoubleClickEvent() и QGraphicsItem::setAcceptedMouseButtons().
void QGraphicsScene::removeItem(QGraphicsItem *item)
Удаляет элемент item и всех его дочерних элементов со сцены. Владение item передается вызывающей стороне (т. е. QGraphicsScene больше не будет удалять item при уничтожении).
См. также addItem().
void QGraphicsScene::render(QPainter *painter, const QRectF &target = QRectF(), const QRectF &source = QRectF(), Qt::AspectRatioMode aspectRatioMode = Qt::KeepAspectRatio)
Отображает прямоугольник source со сцены в target с помощью painter. Эта функция полезна для захвата содержимого сцены на устройстве рисования, например, QImage (например, для создания скриншота) или для печати с помощью QPrinter. Например:
QGraphicsScene scene; scene.addItem(... ... QPrinter printer(QPrinter::HighResolution); printer.setPaperSize(QPrinter::A4); QPainter painter(&printer); scene.render(&painter);
Если source — пустой прямоугольник, эта функция будет использовать sceneRect() для определения, что отображать. Если target — пустой прямоугольник, будут использоваться размеры устройства рисования painter.
Содержимое прямоугольника source будет преобразовано в соответствии с aspectRatioMode для соответствия прямоугольнику target. По умолчанию сохраняется соотношение сторон, и source масштабируется для соответствия target.
См. также QGraphicsView::render().
QList<QGraphicsItem *> QGraphicsScene::selectedItems() const
Возвращает список всех выделенных элементов. Элементы возвращаются в произвольном порядке.
См. также setSelectionArea().
QPainterPath QGraphicsScene::selectionArea() const
Возвращает область выделения, которая была установлена ранее с помощью setSelectionArea(), или пустой QPainterPath, если область выделения не была установлена.
См. также setSelectionArea().
bool QGraphicsScene::sendEvent(QGraphicsItem *item, QEvent *event)
Отправляет событие event элементу item через возможные фильтры событий.
Событие отправляется только в том случае, если элемент включен.
Возвращает false , если событие было отфильтровано или если элемент отключен. В противном случае возвращает значение, которое было возвращено обработчиком событий.
См. также QGraphicsItem::sceneEvent() и QGraphicsItem::sceneEventFilter().
void QGraphicsScene::setActivePanel(QGraphicsItem *item)
Активирует item, который должен быть элементом на этой сцене. Вы также можете передать 0 для item, в этом случае QGraphicsScene деактивирует любой активный в настоящее время элемент.
Если сцена в настоящее время неактивна, item остается неактивным до тех пор, пока сцена не станет активной (или, если item — nullptr, никакой элемент не будет активирован).
См. также activePanel(), isActive() и QGraphicsItem::isActive().
void QGraphicsScene::setActiveWindow(QGraphicsWidget *widget)
Активирует виджет, который должен быть виджетом в этой сцене. Также можно передать 0 для виджета, в этом случае QGraphicsScene деактивирует любое активное окно.
См. также activeWindow() и QGraphicsWidget::isActiveWindow().
void QGraphicsScene::setFocus(Qt::FocusReason focusReason = Qt::OtherFocusReason)
Устанавливает фокус на сцену, отправив QFocusEvent в сцену, передав focusReason в качестве причины. Если сцена получает фокус после его потери, когда некоторый элемент имел фокус, последний элемент фокуса получит фокус с focusReason в качестве причины.
Если сцена уже имеет фокус, эта функция ничего не делает.
См. также hasFocus(), clearFocus() и setFocusItem().
void QGraphicsScene::setFocusItem(QGraphicsItem *item, Qt::FocusReason focusReason = Qt::OtherFocusReason)
Устанавливает элемент фокуса сцены на item с причиной фокуса focusReason, удалив фокус с любого предыдущего элемента, который мог иметь фокус.
Если item равен nullptr, или если он не принимает фокус (т.е., у него не включён флаг QGraphicsItem::ItemIsFocusable), или он не виден или не активен, эта функция только удаляет фокус с любого предыдущего элемента фокуса.
Если item не равен nullptr, и сцена в данный момент не имеет фокуса (т.е., hasFocus() возвращает false), эта функция автоматически вызовет setFocus().
См. также focusItem(), hasFocus() и setFocus().
void QGraphicsScene::setSelectionArea(const QPainterPath &path, const QTransform &deviceTransform)
Устанавливает область выделения на path. Все элементы в этой области сразу же выбираются, а все элементы за пределами области — нет. Список всех выбранных элементов можно получить, вызвав selectedItems().
deviceTransform — преобразование, применяемое к представлению, и его необходимо указать, если сцена содержит элементы, которые игнорируют преобразования.
Чтобы элемент был выбран, он должен быть помечен как выбираемый (QGraphicsItem::ItemIsSelectable).
См. также clearSelection() и selectionArea().
[since 5.5] void QGraphicsScene::setSelectionArea(const QPainterPath &path, Qt::ItemSelectionOperation selectionOperation = Qt::ReplaceSelection, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, const QTransform &deviceTransform = QTransform())
Это перегруженная функция.
Устанавливает область выделения на path, используя mode для определения, включаются ли элементы в область выделения.
deviceTransform — преобразование, применяемое к представлению, и его необходимо указать, если сцена содержит элементы, которые игнорируют преобразования.
selectionOperation определяет, что делать с текущими выбранными элементами.
Эта функция была добавлена в Qt 5.5.
См. также clearSelection() и selectionArea().
void QGraphicsScene::setStyle(QStyle *style)
Устанавливает или заменяет стиль сцены на style и переродирует стиль в эту сцену. Любой ранее назначенный стиль удаляется. Стиль сцены по умолчанию — QApplication::style(), и он является стилем по умолчанию для всех элементов QGraphicsWidget в сцене.
Изменение стиля, как напрямую, вызывая эту функцию, так и косвенно, вызывая QApplication::setStyle(), автоматически обновит стиль для всех виджетов в сцене, у которых нет явно назначенного стиля.
Если style равен nullptr, QGraphicsScene вернётся к QApplication::style().
См. также style().
QStyle *QGraphicsScene::style() const
Возвращает стиль сцены или тот же, что и QApplication::style(), если сцене явно не был назначен стиль.
См. также setStyle().
void QGraphicsScene::update(qreal x, qreal y, qreal w, qreal h)
Это перегруженная функция.
Эта функция эквивалентна вызову update(QRectF(x, y, w, h));
QList<QGraphicsView *> QGraphicsScene::views() const
Возвращает список всех представлений, которые отображают эту сцену.
См. также QGraphicsView::scene().
[virtual protected] void QGraphicsScene::wheelEvent(QGraphicsSceneWheelEvent *wheelEvent)
Этот обработчик событий для события wheelEvent может быть переопределён в подклассе для получения событий колёсика мыши для сцены.
По умолчанию событие передаётся самому верхнему видимому элементу под курсором. Если событие проигнорировано, оно передаётся элементу под ним и так далее, пока событие не будет принято или не достигнет сцены. Если ни один элемент не примет событие, оно будет проигнорировано.
Примечание: см. items() для определения того, какие элементы считаются видимыми этой функцией.
См. также QGraphicsItem::wheelEvent().
qreal QGraphicsScene::width() const
Эта вспомогательная функция эквивалентна вызову sceneRect().width().
См. также height().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qgraphicsscene.html