Класс 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 для визуализации графических элементов, таких как линии, прямоугольники, текст или даже пользовательские элементы, на двумерной поверхности. 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, а затем отправьте его, например, с помощью QApplication::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 отрисовывает содержимое сцены, он отрисовывает каждый из этих слоёв по отдельности в порядке их задания.
Каждый слой представляет собой флаг, который можно объединить с помощью операции ИЛИ при вызове функций, таких как 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 с помощью операции ИЛИ.
См. также invalidate() и QGraphicsView::invalidateScene().
END_OF_DOCUMENT_MARKERДокументация свойств
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 также передает фокус при касании трекпада или аналогичного. Если операционная система настроена так, чтобы не генерировать синтезированный щелчок мыши при нажатии на трекпад, это неожиданно. Если операционная система генерирует синтезированные щелчки мыши при нажатии на трекпад, передача фокуса при начале жеста касания не нужна.
Выключив фокусOnTouch, 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(), font и style.
sceneRect : QRectF
Это свойство содержит прямоугольник сцены; ограничивающий прямоугольник сцены.
Прямоугольник сцены определяет пределы сцены. Он используется главным образом QGraphicsView для определения области прокрутки по умолчанию и QGraphicsScene для управления индексацией элементов.
Если не задано или если задано значение null 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, чтобы обеспечить точный контроль над тем, как фокус таба передаётся внутри сцены. По умолчанию реализация основана на цепочке фокуса таба, определённой в 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 в сцену и возвращает указатель на элемент. 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, может быть переопределён в подклассе для получения событий входа перетаскивания для сцены.
По умолчанию обработчик принимает событие и подготавливает сцену для принятия событий перемещения перетаскивания.
См. также QGraphicsItem::dragEnterEvent(), dragMoveEvent(), dragLeaveEvent() и dropEvent().
[virtual protected] void QGraphicsScene::dragLeaveEvent(QGraphicsSceneDragDropEvent *event)
Этот обработчик событий, для события event, может быть переопределён в подклассе для получения событий выхода перетаскивания для сцены.
См. также QGraphicsItem::dragLeaveEvent(), dragEnterEvent(), dragMoveEvent() и dropEvent().
[virtual protected] void QGraphicsScene::dragMoveEvent(QGraphicsSceneDragDropEvent *event)
Этот обработчик событий, для события event, может быть переопределён в подклассе для получения событий перемещения перетаскивания для сцены.
Примечание: см. 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, может быть переопределён в подклассе для получения событий опускания для сцены.
См. также 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() для определения, какие элементы считаются видимыми этой функцией.
END_OF_DOCUMENT_MARKERСм. также 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 — это преобразование, применяемое к представлению, и его необходимо предоставить, если сцена содержит элементы, которые игнорируют преобразования.
См. также 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() и Сортировка.
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.13/qgraphicsscene.html