Класс QGraphicsScene
Класс QGraphicsScene предоставляет поверхность для управления большим количеством 2D графических элементов. Подробнее...
| Заголовок: | #include <QGraphicsScene> |
| qmake: | QT += widgets |
| С момента: | Qt 4.2 |
| Наследуется от: | QObject |
Общедоступные типы
| Перечисление | ItemIndexMethod { BspTreeIndex, NoIndex } |
| Перечисление | SceneLayer { ItemLayer, BackgroundLayer, ForegroundLayer, AllLayers } |
| Флаги | SceneLayers |
Свойства
|
|
- 1 свойство унаследовано от QObject
Общедоступные функции
| QGraphicsScene(QObject *parent = Q_NULLPTR) | |
| QGraphicsScene(const QRectF &sceneRect, QObject *parent = Q_NULLPTR) | |
| QGraphicsScene(qreal x, qreal y, qreal width, qreal height, QObject *parent = Q_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 |
| 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, 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 |
| 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 | setFont(const QFont &font) |
| void | setForegroundBrush(const QBrush &brush) |
| void | setItemIndexMethod(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 |
- 32 public functions inherited from QObject
Public Slots
| void | advance() |
| void | clear() |
| void | clearSelection() |
| void | invalidate(const QRectF &rect = QRectF(), SceneLayers layers = AllLayers) |
| void | update(const QRectF &rect = QRectF()) |
- 1 public slot inherited from QObject
Signals
| void | changed(const QList<QRectF> ®ion) |
| void | focusItemChanged(QGraphicsItem *newFocusItem, QGraphicsItem *oldFocusItem, Qt::FocusReason reason) |
| void | sceneRectChanged(const QRectF &rect) |
| void | selectionChanged() |
- 2 signals inherited from QObject
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) |
| виртуальный bool | eventFilter(QObject *watched, QEvent *event) |
- 9 защищённых функций, унаследованных от QObject
Защищённые слоты
| виртуальный bool | focusNextPrevChild(bool next) |
Дополнительные унаследованные члены
- 11 статических публичных членов, унаследованных от QObject
Подробное описание
Класс QGraphicsScene предоставляет поверхность для управления большим количеством 2D графических элементов.
Класс служит контейнером для QGraphicsItems. Он используется вместе с QGraphicsView для визуализации графических элементов, таких как линии, прямоугольники, текст или даже пользовательские элементы, на 2D поверхности. 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.
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).
Функции доступа:
| ItemIndexMethod | itemIndexMethod() const |
| void | setItemIndexMethod(ItemIndexMethod method) |
См. также bspTreeDepth.
minimumRenderSize : qreal
Это свойство содержит минимальный размер, преобразованный по отношению к представлению, который элемент должен иметь для отрисовки.
При отрисовке сцены любой элемент, ширина или высота которого, преобразованные в целевое представление, меньше minimumRenderSize(), не будет отрисован. Если элемент не отрисован, и он обрезает свои дочерние элементы, они также не будут отрисованы. Установите это значение, чтобы ускорить отрисовку сцен с многими объектами, отрисованными в сильно увеличенном представлении.
Значение по умолчанию — 0. Если не задано или установлено в 0 или отрицательное значение, все элементы всегда будут отрисованы.
Например, установка этого свойства особенно полезна, если сцена отрисовывается несколькими представлениями, одно из которых служит обзором, который всегда отображает все элементы. В сценах с большим количеством элементов такое представление будет использовать большой коэффициент масштабирования, чтобы все элементы можно было отобразить. Из-за масштабирования более мелкие элементы будут незначительно влиять на окончательную отрисованную сцену. Чтобы избежать отрисовки этих элементов и сократить время, необходимое для отрисовки сцены, вы можете вызвать setMinimumRenderSize() с ненулевым значением.
Примечание: Элементы, которые не отрисовываются из-за того, что слишком малы, всё ещё возвращаются методами, такими как items() и itemAt(), и участвуют в обнаружении столкновений и взаимодействиях. Рекомендуется установить minimumRenderSize() на значение, меньшее или равное 1, чтобы избежать больших неотрисованных элементов, которые являются интерактивными.
Это свойство было введено в Qt 5.4.
Функции доступа:
| qreal | minimumRenderSize() const |
| void | setMinimumRenderSize(qreal minSize) |
См. также QStyleOptionGraphicsItem::levelOfDetailFromTransform().
palette : QPalette
Это свойство содержит палитру по умолчанию сцены.
Это свойство предоставляет палитру сцены. Палитра сцены по умолчанию — и разрешает все свои записи из QApplication::palette.
Если палитра сцены изменяется, либо напрямую через setPalette(), либо косвенно при изменении палитры приложения, QGraphicsScene сначала отправляет себе событие PaletteChange, а затем отправляет события PaletteChange всем элементам виджетов верхнего уровня в сцене. Эти элементы реагируют, разрешая свои собственные палитры к сцене, и затем уведомляют своих потомков, которые снова уведомляют своих потомков и так далее, пока все элементы виджетов не обновят свои палитры.
Изменение палитры сцены (напрямую или косвенно через QApplication::setPalette() вызывает автоматическое перерисовывание всей сцены.
Это свойство было введено в Qt 4.4.
Функции доступа:
| QPalette | palette() const |
| void | setPalette(const QPalette &palette) |
См. также QWidget::palette, QApplication::setPalette(), шрифт, и стиль().
sceneRect : QRectF
Это свойство содержит прямоугольник сцены; ограничивающий прямоугольник сцены
Прямоугольник сцены определяет область сцены. Он в основном используется QGraphicsView для определения области прокрутки по умолчанию, и QGraphicsScene для управления индексацией элементов.
Если не задано или если задано в виде нулевого QRectF, sceneRect() вернёт самый большой ограничивающий прямоугольник всех элементов на сцене с момента создания сцены (т. е. прямоугольник, который растёт, когда элементы добавляются или перемещаются на сцене, но никогда не уменьшается).
Функции доступа:
| QRectF | sceneRect() const |
| void | setSceneRect(const QRectF &rect) |
| void | setSceneRect(qreal x, qreal y, qreal w, qreal h) |
См. также ширина(), высота(), и QGraphicsView::sceneRect.
stickyFocus : bool
Это свойство определяет, будет ли фокус очищаться при щелчке в область фона сцены
В QGraphicsScene со свойством stickyFocus, установленным в значение true, фокус не изменится, когда пользователь щелкнет в область фона сцены или на элемент, не принимающий фокус. В противном случае фокус будет очищен.
По умолчанию это свойство false.
Изменение фокуса происходит в ответ на нажатие мыши. Вы можете переопределить mousePressEvent() в подклассе QGraphicsScene, чтобы переключать это свойство в зависимости от того, где пользователь щелкнул.
Это свойство было введено в Qt 4.6.
Функции доступа:
| bool | stickyFocus() const |
| void | setStickyFocus(bool enabled) |
См. также clearFocus() и setFocusItem().
Документация по членам-функциям
QGraphicsScene::QGraphicsScene(QObject *parent = Q_NULLPTR)
Создаёт объект QGraphicsScene. Параметр parent передаётся конструктору QObject.
QGraphicsScene::QGraphicsScene(const QRectF &sceneRect, QObject *parent = Q_NULLPTR)
Создаёт объект QGraphicsScene, используя sceneRect для прямоугольника сцены. Параметр parent передаётся конструктору QObject.
См. также sceneRect.
QGraphicsScene::QGraphicsScene(qreal x, qreal y, qreal width, qreal height, QObject *parent = Q_NULLPTR)
Создаёт объект QGraphicsScene, используя прямоугольник, заданный координатами (x, y), и заданными width и height для прямоугольника сцены. Параметр parent передаётся конструктору QObject.
См. также sceneRect.
[virtual] QGraphicsScene::~QGraphicsScene()
Удаляет и уничтожает все элементы со сцены перед уничтожением объекта сцены. Объект сцены удаляется из глобального списка сцен приложения, и он удаляется из всех связанных представлений.
QGraphicsItem *QGraphicsScene::activePanel() const
Возвращает текущую активную панель или 0, если в настоящее время нет активной панели.
Эта функция была введена в Qt 4.6.
См. также QGraphicsScene::setActivePanel().
QGraphicsWidget *QGraphicsScene::activeWindow() const
Возвращает текущее активное окно или 0, если в настоящее время нет активного окна.
Эта функция была введена в Qt 4.4.
См. также QGraphicsScene::setActiveWindow().
QGraphicsEllipseItem *QGraphicsScene::addEllipse(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush = QBrush())
Создаёт и добавляет элемент эллипса на сцену и возвращает указатель на элемент. Геометрия эллипса определяется rect, а его пером и кистью — pen и brush.
Обратите внимание, что геометрия элемента задаётся в координатах элемента, а его положение инициализируется (0, 0).
Если элемент видимый (т. е., QGraphicsItem::isVisible() возвращает true), QGraphicsScene отправит changed() после возвращения управления циклу событий.
См. также addLine(), addPath(), addPixmap(), addRect(), addText(), addItem() и addWidget().
QGraphicsEllipseItem *QGraphicsScene::addEllipse(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush())
Эта вспомогательная функция эквивалентна вызову addEllipse(QRectF(x, y, w, h), pen, brush).
Эта функция была введена в Qt 4.3.
void QGraphicsScene::addItem(QGraphicsItem *item)
Добавляет или перемещает item и все его потомков на эту сцену. Эта сцена принимает владение item.
Если элемент видимый (т. е., QGraphicsItem::isVisible() возвращает true), QGraphicsScene отправит changed() после возвращения управления циклу событий.
Если элемент уже находится на другой сцене, он сначала удалится со своей старой сцены, а затем добавится на эту сцену как верхний уровень.
QGraphicsScene отправит уведомления ItemSceneChange элементу item, пока он добавляется на сцену. Если элемент ещё не принадлежит какой-либо сцене, отправляется только одно уведомление. Если он уже принадлежит сцене (т. е., он перемещается на эту сцену), QGraphicsScene отправит уведомление об добавлении, когда элемент будет удалён со своей предыдущей сцены.
Если элемент является панелью, сцена активна, и на сцене нет активной панели, то элемент будет активирован.
См. также removeItem(), addEllipse(), addLine(), addPath(), addPixmap(), addRect(), addText(), addWidget() и Сортировка.
QGraphicsLineItem *QGraphicsScene::addLine(const QLineF &line, const QPen &pen = QPen())
Создаёт и добавляет элемент линии на сцену и возвращает указатель на элемент. Геометрия линии определяется line, а его пером — pen.
Обратите внимание, что геометрия элемента задаётся в координатах элемента, а его положение инициализируется (0, 0).
Если элемент видимый (т. е., QGraphicsItem::isVisible() возвращает true), QGraphicsScene отправит changed() после возвращения управления циклу событий.
См. также addEllipse(), addPath(), addPixmap(), addRect(), addText(), addItem() и addWidget().
QGraphicsLineItem *QGraphicsScene::addLine(qreal x1, qreal y1, qreal x2, qreal y2, const QPen &pen = QPen())
Эта вспомогательная функция эквивалентна вызову addLine(QLineF(x1, y1, x2, y2), pen).
Эта функция была введена в Qt 4.3.
QGraphicsPathItem *QGraphicsScene::addPath(const QPainterPath &path, const QPen &pen = QPen(), const QBrush &brush = QBrush())
Создаёт и добавляет элемент пути в сцену и возвращает указатель на элемент. Геометрия пути определяется параметром path, а его контур и заливка инициализируются значениями pen и brush соответственно.
Обратите внимание, что геометрия элемента задаётся в координатах элемента, а его положение инициализируется в (0, 0).
Если элемент виден (т.е., QGraphicsItem::isVisible() возвращает true), QGraphicsScene отправит сигнал changed() после возврата управления в цикл обработки событий.
См. также addEllipse(), addLine(), addPixmap(), addRect(), addText(), addItem() и addWidget().
QGraphicsPixmapItem *QGraphicsScene::addPixmap(const QPixmap &pixmap)
Создаёт и добавляет элемент пиктограммы в сцену, и возвращает указатель на элемент. Пиктограмма определяется параметром pixmap.
Обратите внимание, что геометрия элемента задаётся в координатах элемента, а его положение инициализируется в (0, 0).
Если элемент виден (т.е., QGraphicsItem::isVisible() возвращает true), QGraphicsScene отправит сигнал changed() после возврата управления в цикл обработки событий.
См. также addEllipse(), addLine(), addPath(), addRect(), addText(), addItem() и addWidget().
QGraphicsPolygonItem *QGraphicsScene::addPolygon(const QPolygonF &polygon, const QPen &pen = QPen(), const QBrush &brush = QBrush())
Создаёт и добавляет элемент многоугольника в сцену и возвращает указатель на элемент. Многоугольник определяется параметром polygon, а его контур и заливка инициализируются значениями pen и brush соответственно.
Обратите внимание, что геометрия элемента задаётся в координатах элемента, а его положение инициализируется в (0, 0).
Если элемент виден (т.е., QGraphicsItem::isVisible() возвращает true), QGraphicsScene отправит сигнал changed() после возврата управления в цикл обработки событий.
См. также addEllipse(), addLine(), addPath(), addRect(), addText(), addItem() и addWidget().
QGraphicsRectItem *QGraphicsScene::addRect(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush = QBrush())
Создаёт и добавляет элемент прямоугольника в сцену, и возвращает указатель на элемент. Геометрия прямоугольника определяется параметром rect, а его контур и заливка инициализируются значениями pen и brush соответственно.
Обратите внимание, что геометрия элемента задаётся в координатах элемента, а его положение инициализируется в (0, 0). Например, если добавлен QRect(50, 50, 100, 100), его верхний левый угол будет расположен в координатах (50, 50) относительно начала отсчёта в системе координат элементов.
Если элемент виден (т.е., QGraphicsItem::isVisible() возвращает true), QGraphicsScene отправит сигнал changed() после возврата управления в цикл обработки событий.
См. также addEllipse(), addLine(), addPixmap(), addPixmap(), addText(), addItem() и addWidget().
QGraphicsRectItem *QGraphicsScene::addRect(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush())
Эта вспомогательная функция эквивалентна вызову addRect(QRectF(x, y, w, h), pen, brush).
Эта функция была введена в Qt 4.3.
QGraphicsSimpleTextItem *QGraphicsScene::addSimpleText(const QString &text, const QFont &font = QFont())
Создаёт и добавляет элемент QGraphicsSimpleTextItem в сцену и возвращает указатель на элемент. Строка текста инициализируется значением text, а шрифт – значением font.
Положение элемента инициализируется в (0, 0).
Если элемент виден (т.е., QGraphicsItem::isVisible() возвращает true), QGraphicsScene отправит сигнал changed() после возврата управления в цикл обработки событий.
См. также addEllipse(), addLine(), addPixmap(), addPixmap(), addRect(), addItem() и addWidget().
QGraphicsTextItem *QGraphicsScene::addText(const QString &text, const QFont &font = QFont())
Создаёт и добавляет элемент текста в сцену, и возвращает указатель на элемент. Строка текста инициализируется значением text, а шрифт – значением font.
Положение элемента инициализируется в (0, 0).
Если элемент виден (т.е., QGraphicsItem::isVisible() возвращает true), QGraphicsScene отправит сигнал changed() после возврата управления в цикл обработки событий.
См. также addEllipse(), addLine(), addPixmap(), addPixmap(), addRect(), addItem() и addWidget().
QGraphicsProxyWidget *QGraphicsScene::addWidget(QWidget *widget, Qt::WindowFlags wFlags = Qt::WindowFlags())
Создаёт новый QGraphicsProxyWidget для widget, добавляет его в сцену и возвращает указатель на прокси. wFlags устанавливает флаги окна по умолчанию для прокси-виджета встраивания.
Положение элемента инициализируется в (0, 0).
Обратите внимание, что виджеты с установленным атрибутом виджета Qt::WA_PaintOnScreen и виджеты, которые оборачивают внешнее приложение или контроллер, не поддерживаются. Примерами являются QGLWidget и QAxWidget.
См. также addEllipse(), addLine(), addPixmap(), addPixmap(), addRect(), addText(), addSimpleText() и addItem().
[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().
void QGraphicsScene::clearFocus()
Снимает фокус со сцены. Если какой-либо элемент имеет фокус, когда вызывается эта функция, он потеряет фокус, и снова получит фокус, как только сцена снова получит фокус.
Сцена, не имеющая фокуса, игнорирует события нажатия клавиш.
См. также hasFocus(), setFocus() и setFocusItem().
[slot] void QGraphicsScene::clearSelection()
Очищает текущий выбор.
См. также setSelectionArea() и selectedItems().
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().
[virtual protected] bool QGraphicsScene::event(QEvent *event)
Переопределено из QObject::event().
Обрабатывает событие event и пересылает его соответствующим обработчикам событий.
В дополнение к вызову удобных обработчиков событий, эта функция отвечает за преобразование событий перемещения мыши в события наведения при отсутствии элемента захвата мыши. События наведения напрямую передаются элементам; удобная функция для них отсутствует.
В отличие от QWidget, QGraphicsScene не имеет удобных функций enterEvent() и leaveEvent(). Используйте эту функцию, чтобы получить эти события вместо этого.
См. также contextMenuEvent(), keyPressEvent(), keyReleaseEvent(), mousePressEvent(), mouseMoveEvent(), mouseReleaseEvent(), mouseDoubleClickEvent(), focusInEvent() и focusOutEvent().
END_OF_DOCUMENT_MARKER
[virtual protected] bool QGraphicsScene::eventFilter(QObject *watched, QEvent *event)
Переопределено из QObject::eventFilter().
QGraphicsScene фильтрует события QApplication для обнаружения изменений палитры и шрифта.
[virtual protected] void QGraphicsScene::focusInEvent(QFocusEvent *focusEvent)
Этот обработчик событий, для события focusEvent, может быть переопределён в подклассе для получения событий входа фокуса.
По умолчанию устанавливает фокус на сцену, а затем на последний фокусируемый элемент.
См. также QGraphicsItem::focusOutEvent().
QGraphicsItem *QGraphicsScene::focusItem() const
Когда сцена активна, эта функция возвращает текущий фокусируемый элемент сцены или 0, если ни один элемент не имеет фокуса. Когда сцена неактивна, эта функция возвращает элемент, который получит фокус ввода, когда сцена станет активной.
Фокусируемый элемент получает ввод с клавиатуры, когда сцена получает событие нажатия клавиши.
См. также setFocusItem(), QGraphicsItem::hasFocus() и isActive().
[signal] void QGraphicsScene::focusItemChanged(QGraphicsItem *newFocusItem, QGraphicsItem *oldFocusItem, Qt::FocusReason reason)
Этот сигнал испускается QGraphicsScene всякий раз, когда фокус меняется на сцене (т. е., когда элемент получает или теряет фокус ввода или когда фокус передаётся от одного элемента к другому). Вы можете подключиться к этому сигналу, если вам нужно отслеживать, когда другие элементы получают фокус ввода. Это особенно полезно для реализации виртуальных клавиатур, методов ввода и элементов курсора.
oldFocusItem — указатель на элемент, который ранее имел фокус, или 0, если ни один элемент не имел фокуса до испускания сигнала. newFocusItem — указатель на элемент, который получил фокус ввода, или 0, если фокус был потерян. reason — причина изменения фокуса (например, если сцена была деактивирована, в то время как поле ввода имело фокус, oldFocusItem указывал бы на элемент поля ввода, newFocusItem был бы 0, а reason был бы Qt::ActiveWindowFocusReason.
[virtual protected slot] bool QGraphicsScene::focusNextPrevChild(bool next)
Находит новый виджет для присвоения фокуса клавиатуры, как это предусмотрено для Tab и Shift+Tab, и возвращает true если можно найти новый виджет, или false, если нельзя. Если next истинно, эта функция ищет вперёд; если next ложно, она ищет назад.
Вы можете переопределить эту функцию в подклассе QGraphicsScene, чтобы обеспечить тонкую настройку того, как передаётся фокус табуляции внутри вашей сцены. По умолчанию реализация основана на цепочке фокуса табуляции, определённой в QGraphicsWidget::setTabOrder().
Эта функция была введена в Qt 4.4.
[virtual protected] void QGraphicsScene::focusOutEvent(QFocusEvent *focusEvent)
Этот обработчик событий, для события focusEvent, может быть переопределён в подклассе для получения событий выхода фокуса.
По умолчанию фокус снимается с любого фокусируемого элемента, а затем фокус снимается со сцены.
См. также QGraphicsItem::focusInEvent().
bool QGraphicsScene::hasFocus() const
Возвращает true если сцена имеет фокус; в противном случае возвращает false. Если сцена имеет фокус, она будет пересылать события нажатия клавиш от QKeyEvent любому элементу, имеющему фокус.
См. также setFocus() и setFocusItem().
qreal QGraphicsScene::height() const
Эта функция-удобство эквивалентна вызову sceneRect().height().
См. также width().
[virtual protected] void QGraphicsScene::helpEvent(QGraphicsSceneHelpEvent *helpEvent)
Этот обработчик событий, для события helpEvent, может быть переопределён в подклассе для получения событий справки. События типа QEvent::ToolTip, которые создаются при запросе всплывающей подсказки.
По умолчанию отображает всплывающую подсказку самого верхнего видимого элемента (т. е. элемента с наибольшим значением z) в позиции курсора мыши. Если ни у одного элемента нет установленной всплывающей подсказки, эта функция ничего не делает.
Примечание: см. items() для определения, какие элементы считаются видимыми этой функцией.
См. также QGraphicsItem::toolTip() и QGraphicsSceneHelpEvent.
[virtual protected] void QGraphicsScene::inputMethodEvent(QInputMethodEvent *event)
Этот обработчик событий, для события event, может быть переопределён в подклассе для получения событий методов ввода для сцены.
По умолчанию пересылает событие в focusItem(). Если в данный момент ни один элемент не имеет фокуса или текущий фокусируемый элемент не принимает методы ввода, эта функция ничего не делает.
См. также QGraphicsItem::inputMethodEvent().
[virtual] QVariant QGraphicsScene::inputMethodQuery(Qt::InputMethodQuery query) const
Этот метод используется методами ввода для запроса набора свойств сцены, чтобы иметь возможность поддерживать сложные операции методов ввода, такие как поддержка окружающего текста и обратных преобразований.
Параметр query указывает, какое свойство запрашивается.
См. также QWidget::inputMethodQuery().
[slot] void QGraphicsScene::invalidate(const QRectF &rect = QRectF(), 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().
void QGraphicsScene::invalidate(qreal x, qreal y, qreal w, qreal h, 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 или 0, если элементов в этой позиции нет.
deviceTransform — преобразование, применяемое к представлению, и необходимо предоставлять, если сцена содержит элементы, которые игнорируют преобразования.
Примечание: см. items() для определения, какие элементы считаются видимыми этой функцией.
Эта функция была введена в Qt 4.6.
См. также items(), collidingItems() и Sorting.
QGraphicsItem *QGraphicsScene::itemAt(qreal x, qreal y, const QTransform &deviceTransform) const
Это перегруженная функция.
Возвращает самый верхний видимый элемент в позиции (x, y) или 0, если элементов в этой позиции нет.
deviceTransform — это преобразование, применяемое к представлению, и его необходимо указать, если сцена содержит элементы, игнорирующие преобразования.
Эта функция-утилита эквивалентна вызову itemAt(QPointF(x, y), deviceTransform).
Примечание: см. items() для определения, какие элементы считаются видимыми этой функцией.
Эта функция была добавлена в Qt 4.6.
QList<QGraphicsItem *> QGraphicsScene::items(Qt::SortOrder order = Qt::DescendingOrder) const
Возвращает упорядоченный список всех элементов на сцене. order определяет порядок наложения.
См. также addItem(), removeItem() и Сортировка.
QList<QGraphicsItem *> QGraphicsScene::items(const QPointF &pos, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const
Возвращает все видимые элементы, которые в зависимости от mode, находятся в заданной позиции pos в отсортированном списке, используя order. В этом случае «видимый» определяет элементы, для которых: isVisible() возвращает true, effectiveOpacity() возвращает значение больше 0.0 (что полностью прозрачно), и родительский элемент не обрезает его.
Значение по умолчанию для mode — Qt::IntersectsItemShape; возвращаются все элементы, чья точная форма пересекается с pos.
deviceTransform — это преобразование, применяемое к представлению, и его необходимо указать, если сцена содержит элементы, игнорирующие преобразования.
Эта функция была добавлена в Qt 4.6.
См. также itemAt() и Сортировка.
QList<QGraphicsItem *> QGraphicsScene::items(const QRectF &rect, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const
Это перегруженная функция.
Возвращает все видимые элементы, которые, в зависимости от mode, находятся внутри или пересекаются с заданным rect, в отсортированном списке, используя order. В этом случае «видимый» определяет элементы, для которых: isVisible() возвращает true, effectiveOpacity() возвращает значение больше 0.0 (что полностью прозрачно), и родительский элемент не обрезает его.
Значение по умолчанию для mode — Qt::IntersectsItemShape; возвращаются все элементы, чья точная форма пересекается или содержится в rect.
deviceTransform — это преобразование, применяемое к представлению, и его необходимо указать, если сцена содержит элементы, игнорирующие преобразования.
Эта функция была добавлена в Qt 4.6.
См. также itemAt() и Сортировка.
QList<QGraphicsItem *> QGraphicsScene::items(const QPolygonF &polygon, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const
Это перегруженная функция.
Возвращает все видимые элементы, которые, в зависимости от mode, находятся внутри или пересекаются с заданной polygon, в отсортированном списке, используя order. В этом случае «видимый» определяет элементы, для которых: isVisible() возвращает true, effectiveOpacity() возвращает значение больше 0.0 (что полностью прозрачно), и родительский элемент не обрезает его.
Значение по умолчанию для mode — Qt::IntersectsItemShape; возвращаются все элементы, чья точная форма пересекается или содержится в polygon.
deviceTransform — это преобразование, применяемое к представлению, и его необходимо указать, если сцена содержит элементы, игнорирующие преобразования.
Эта функция была добавлена в Qt 4.6.
См. также itemAt() и Сортировка.
QList<QGraphicsItem *> QGraphicsScene::items(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const
Это перегруженная функция.
Возвращает все видимые элементы, которые, в зависимости от mode, находятся внутри или пересекаются с заданной path, в отсортированном списке, используя order. В этом случае «видимый» определяет элементы, для которых: isVisible() возвращает true, effectiveOpacity() возвращает значение больше 0.0 (что полностью прозрачно), и родительский элемент не обрезает его.
Значение по умолчанию для mode — Qt::IntersectsItemShape; возвращаются все элементы, чья точная форма пересекается или содержится в path.
deviceTransform — это преобразование, применяемое к представлению, и его необходимо указать, если сцена содержит элементы, игнорирующие преобразования.
Эта функция была добавлена в Qt 4.6.
См. также itemAt() и Сортировка.
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 — это преобразование, применяемое к представлению, и его необходимо указать, если сцена содержит элементы, игнорирующие преобразования.
Эта функция была добавлена в 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
Возвращает текущий элемент-захватчик мыши или 0, если ни один элемент не захватывает мышь в данный момент. Элемент-захватчик мыши — это элемент, который получает все события мыши, отправленные на сцену.
Элемент становится захватом мыши, когда он получает и принимает событие нажатия мыши, и остается им, пока не произойдет одно из следующих событий:
- Если элемент получает событие отпускания мыши, при этом не нажаты другие кнопки, он теряет захват мыши.
- Если элемент становится невидимым (т.е., кто-то вызывает
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().
[signal] void QGraphicsScene::sceneRectChanged(const QRectF &rect)
Этот сигнал испускается QGraphicsScene всякий раз, когда изменяется прямоугольник сцены. Параметр rect — это новый прямоугольник сцены.
См. также QGraphicsView::updateSceneRect().
QList<QGraphicsItem *> QGraphicsScene::selectedItems() const
Возвращает список всех выделенных в данный момент элементов. Элементы возвращаются в произвольном порядке.
См. также setSelectionArea().
QPainterPath QGraphicsScene::selectionArea() const
Возвращает область выделения, которая была ранее установлена с помощью setSelectionArea(), или пустой QPainterPath, если область выделения не была установлена.
См. также setSelectionArea().
[signal] void QGraphicsScene::selectionChanged()
Этот сигнал испускается QGraphicsScene всякий раз, когда меняется выделение. Вы можете вызвать selectedItems() для получения нового списка выделенных элементов.
Выделение изменяется всякий раз, когда элемент выбирается или отменяется выбор, устанавливается, очищается или изменяется область выделения, если предварительно выбранный элемент добавляется на сцену или если выбранный элемент удаляется со сцены.
QGraphicsScene испускает этот сигнал только один раз для операций группового выделения. Например, если вы установили область выделения, выбрали или отменили выбор QGraphicsItemGroup, или добавили или удалили со сцены родительский элемент, содержащий несколько выбранных элементов, selectionChanged() испускается только один раз после завершения операции (вместо одного раза для каждого элемента).
Эта функция была представлена в Qt 4.3.
См. также setSelectionArea(), selectedItems(), и QGraphicsItem::setSelected().
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 равен 0, ни один элемент не будет активирован).
Эта функция была представлена в 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 равен 0, или если он не принимает фокус (т.е., у него не включен флаг QGraphicsItem::ItemIsFocusable), или он не виден или не активен, эта функция только удаляет фокус с любого предыдущего элемента фокуса.
Если item не равен 0, и сцена в данный момент не имеет фокуса (т.е., 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 равен 0, QGraphicsScene вернётся к QApplication::style().
Эта функция была введена в Qt 4.4.
См. также style().
QStyle *QGraphicsScene::style() const
Возвращает стиль сцены или тот же, что и QApplication::style(), если сцене не был явно назначен стиль.
Эта функция была введена в Qt 4.4.
См. также setStyle().
[slot] void QGraphicsScene::update(const QRectF &rect = QRectF())
Планирует перерисовку области rect на сцене.
См. также sceneRect() и changed().
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.9/qgraphicsscene.html