Класс QGraphicsScene
Класс QGraphicsScene предоставляет поверхность для управления большим количеством 2D графических элементов. Подробнее...
| Заголовок: | #include <QGraphicsScene> |
| qmake: | QT += widgets |
| С тех пор: | Qt 4.2 |
| Наследуется от: | QObject |
Этот класс был представлен в Qt 4.2.
Типы публичного интерфейса
| перечисление | 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::ItemSelectionMode mode = Qt::IntersectsItemShape, const QTransform &deviceTransform = QTransform()) |
| void | setSelectionArea(const QPainterPath &path, Qt::ItemSelectionOperation selectionOperation, 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 для визуализации графических элементов, таких как линии, прямоугольники, текст или даже пользовательские элементы, на 2D-поверхности. QGraphicsScene входит в состав фреймворка Graphics View.
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 |
Все слои; это значение представляет собой комбинацию всех трёх слоёв. |
Это перечисление было введено или изменено в Qt 4.3.
Тип 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 элементов.
Это свойство было добавлено в Qt 4.3.
Функции доступа:
| int | bspTreeDepth() const |
| void | setBspTreeDepth(int depth) |
См. также itemIndexMethod.
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()) автоматически планирует перерисовку всей сцены.
Это свойство было добавлено в Qt 4.4.
Функции доступа:
| 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.
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()) автоматически планирует перерисовку всей сцены.
Это свойство было введено в Qt 4.4.
Функции доступа:
| QPalette | palette() const |
| void | setPalette(const QPalette &palette) |
См. также QWidget::palette, QApplication::setPalette(), шрифт и стиль.
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, чтобы переключить это свойство в зависимости от того, где пользователь нажал.
Это свойство было введено в Qt 4.6.
Функции доступа:
| 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()
Удаляет и удаляет все элементы из сцены, но в остальном состояние сцены остаётся неизменным.
Эта функция была введена в Qt 4.4.
См. также 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.
[protected slot] bool QGraphicsScene::focusNextPrevChild(bool next)
Ищет новый виджет для переключения фокуса клавиатуры, как это делается для клавиш Tab и Shift+Tab, и возвращает true если может найти новый виджет или false, если не может. Если next истинно, эта функция ищет вперёд; если next ложно, она ищет назад.
Вы можете переопределить эту функцию в подклассе QGraphicsScene, чтобы обеспечить точный контроль над тем, как фокус таба передаётся внутри вашей сцены. По умолчанию реализация основана на цепочке фокуса Tab, определённой QGraphicsWidget::setTabOrder().
Эта функция была введена в Qt 4.4.
[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() испускается только один раз после завершения операции (вместо одного раза для каждого элемента).
Эта функция была добавлена в Qt 4.3.
См. также setSelectionArea(), selectedItems() и QGraphicsItem::setSelected().
[slot] void QGraphicsScene::update(const QRectF &rect = QRectF())
Планирует перерисовку области rect на сцене.
См. также sceneRect() и changed().
[virtual] QGraphicsScene::~QGraphicsScene()
Удаляет и уничтожает все элементы из объекта сцены перед уничтожением объекта сцены. Объект сцены удаляется из глобального списка сцен приложения, и он удаляется из всех связанных представлений.
QGraphicsItem *QGraphicsScene::activePanel() const
Возвращает текущий активный панель, или nullptr если активный панель отсутствует.
Эта функция была добавлена в Qt 4.6.
См. также QGraphicsScene::setActivePanel().
QGraphicsWidget *QGraphicsScene::activeWindow() const
Возвращает текущее активное окно, или nullptr если активное окно отсутствует.
Эта функция была добавлена в Qt 4.4.
См. также 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).
Эта функция была добавлена в Qt 4.3.
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).
Эта функция была добавлена в Qt 4.3.
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).
Эта функция была введена в Qt 4.3.
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 и виджеты, которые оборачивают внешнее приложение или контроллер, не поддерживаются. Примеры: QGLWidget и 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() и Сортировка.
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 может быть переопределён в подклассе для получения событий focus in.
По умолчанию устанавливает фокус на сцену, а затем на последний элемент фокуса.
См. также QGraphicsItem::focusOutEvent().
QGraphicsItem *QGraphicsScene::focusItem() const
Когда сцена активна, эта функция возвращает текущий элемент фокуса сцены или nullptr если ни один элемент не имеет фокуса. Когда сцена неактивна, эта функция возвращает элемент, который получит фокус ввода, когда сцена станет активной.
Элемент фокуса получает ввод с клавиатуры, когда сцена получает событие нажатия клавиши.
См. также setFocusItem(), QGraphicsItem::hasFocus() и isActive().
[virtual protected] void QGraphicsScene::focusOutEvent(QFocusEvent *focusEvent)
Этот обработчик событий для события focusEvent может быть переопределён в подклассе для получения событий focus out.
По умолчанию снимает фокус с любого элемента фокуса, а затем снимает фокус со сцены.
См. также 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 может быть переопределён в подклассе для получения событий help. События типа QEvent::ToolTip, которые создаются при запросе всплывающей подсказки.
По умолчанию отображает всплывающую подсказку самого верхнего видимого элемента (т.е. элемента с наибольшим значением z) в позиции курсора мыши. Если ни у одного элемента нет заданной всплывающей подсказки, эта функция ничего не делает.
Примечание: См. items() для определения, какие элементы считаются видимыми этой функцией.
См. также QGraphicsItem::toolTip() и QGraphicsSceneHelpEvent.
[virtual protected] void QGraphicsScene::inputMethodEvent(QInputMethodEvent *event)
Этот обработчик событий для события event может быть переопределён в подклассе для получения событий ввода для сцены.
Реализация по умолчанию перенаправляет событие в метод focusItem(). Если в данный момент ни один элемент не имеет фокуса или текущий элемент фокуса не принимает методы ввода, эта функция ничего не делает.
См. также QGraphicsItem::inputMethodEvent().
[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);
Эта функция была представлена в Qt 4.3.
bool QGraphicsScene::isActive() const
Возвращает true если сцена активна (например, она отображается как минимум одним активным QGraphicsView); в противном случае возвращает false.
Эта функция была представлена в Qt 4.6.
См. также QGraphicsItem::isActive() и QWidget::isActiveWindow().
QGraphicsItem *QGraphicsScene::itemAt(const QPointF &position, const QTransform &deviceTransform) const
Возвращает самый верхний видимый элемент в указанной position, или nullptr если в этой позиции нет элементов.
deviceTransform — преобразование, применяемое к представлению, и его необходимо предоставить, если сцена содержит элементы, которые игнорируют преобразования.
Примечание: см. items() для определения, какие элементы считаются видимыми этой функцией.
Эта функция была представлена в Qt 4.6.
См. также items(), collidingItems() и Сортировка.
QGraphicsItem *QGraphicsScene::itemAt(qreal x, qreal y, const QTransform &deviceTransform) const
Это перегруженный метод.
Возвращает самый верхний видимый элемент в позиции, заданной (x, y), или nullptr если в этой позиции нет элементов.
deviceTransform — преобразование, применяемое к представлению, и его необходимо предоставить, если сцена содержит элементы, которые игнорируют преобразования.
Эта вспомогательная функция эквивалентна вызову itemAt(QPointF(x, y), deviceTransform).
Примечание: см. items() для определения, какие элементы считаются видимыми этой функцией.
Эта функция была представлена в Qt 4.6.
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 — преобразование, применяемое к представлению, и его необходимо предоставить, если сцена содержит элементы, которые игнорируют преобразования.
Эта функция была представлена в Qt 4.6.
См. также 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 — преобразование, применяемое к представлению, и его необходимо предоставить, если сцена содержит элементы, которые игнорируют преобразования.
Эта функция была представлена в Qt 4.6.
См. также 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 — преобразование, применяемое к представлению, и его необходимо предоставить, если сцена содержит элементы, которые игнорируют преобразования.
Эта функция была представлена в Qt 4.6.
См. также 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 — преобразование, применяемое к представлению, и его необходимо предоставить, если сцена содержит элементы, которые игнорируют преобразования.
Эта функция была представлена в Qt 4.6.
См. также itemAt() и Сортировка.
END_OF_DOCUMENT_MARKERQList<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 — это преобразование, применяемое к представлению, и его необходимо указать, если сцена содержит элементы, игнорирующие преобразования.
Этот метод был введён в Qt 4.6.
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 если событие было отфильтровано или если элемент отключён. В противном случае возвращает значение, возвращённое обработчиком события.
Эта функция была добавлена в Qt 4.6.
См. также QGraphicsItem::sceneEvent() и QGraphicsItem::sceneEventFilter().
void QGraphicsScene::setActivePanel(QGraphicsItem *item)
Активирует item, который должен быть элементом в этой сцене. Также можно передать 0 для item, в этом случае QGraphicsScene деактивирует любой активный в данный момент элемент.
Если сцена в настоящее время неактивна, item остаётся неактивным до тех пор, пока сцена не станет активной (или, если item равен nullptr, ни один элемент не будет активирован).
Эта функция была добавлена в Qt 4.6.
См. также activePanel(), isActive() и QGraphicsItem::isActive().
void QGraphicsScene::setActiveWindow(QGraphicsWidget *widget)
Активирует widget, который должен быть виджетом в этой сцене. Также можно передать 0 для widget, в этом случае QGraphicsScene деактивирует любой активный в данный момент элемент.
Эта функция была добавлена в Qt 4.4.
См. также 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).
Эта функция была добавлена в Qt 4.6.
См. также clearSelection() и selectionArea().
void QGraphicsScene::setSelectionArea(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, const QTransform &deviceTransform = QTransform())
Это перегруженная функция.
Устанавливает область выделения на path, используя mode для определения включения элементов в область выделения.
deviceTransform — преобразование, применяемое к представлению, и его необходимо предоставить, если сцена содержит элементы, которые игнорируют преобразования.
Эта функция была добавлена в Qt 4.6.
См. также clearSelection() и selectionArea().
void QGraphicsScene::setSelectionArea(const QPainterPath &path, Qt::ItemSelectionOperation selectionOperation, 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().
Эта функция была добавлена в Qt 4.4.
См. также style().
QStyle *QGraphicsScene::style() const
Возвращает стиль сцены или тот же, что и QApplication::style(), если сцене явно не был назначен стиль.
Эта функция была добавлена в Qt 4.4.
См. также setStyle().
void QGraphicsScene::update(qreal x, qreal y, qreal w, qreal h)
Это перегруженная функция.
Эта функция эквивалентна вызову update(QRectF(x, y, w, h));
Эта функция была добавлена в Qt 4.3.
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-5.14/qgraphicsscene.html