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