Spec-Zone.ru › Qt 5.11

Класс QGraphicsScene

Класс QGraphicsScene предоставляет поверхность для управления большим количеством 2D графических элементов. Подробнее...

Заголовок: #include <QGraphicsScene>
qmake: QT += widgets
С момента: Qt 4.2
Наследуется от: QObject
  • Список всех членов, включая унаследованные
  • Устаревшие члены

Открытые типы

Перечисление ItemIndexMethod { BspTreeIndex, NoIndex }
Перечисление SceneLayer { ItemLayer, BackgroundLayer, ForegroundLayer, AllLayers }
Флаги SceneLayers

Свойства

  • backgroundBrush : QBrush
  • bspTreeDepth : int
  • font : QFont
  • foregroundBrush : QBrush
  • itemIndexMethod : ItemIndexMethod
  • minimumRenderSize : qreal
  • palette : QPalette
  • sceneRect : QRectF
  • stickyFocus : bool
  • 1 свойство унаследовано от QObject

Открытые функции

QGraphicsScene(QObject *parent = nullptr)
QGraphicsScene(const QRectF &sceneRect, QObject *parent = nullptr)
QGraphicsScene(qreal x, qreal y, qreal width, qreal height, 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 = ...)
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, QGraphicsScene::SceneLayers layers)
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 setFont(const QFont &font)
void setForegroundBrush(const QBrush &brush)
void setItemIndexMethod(QGraphicsScene::ItemIndexMethod method)
void setMinimumRenderSize(qreal minSize)
void setPalette(const QPalette &palette)
void setSceneRect(const QRectF &rect)
void setSceneRect(qreal x, qreal y, qreal w, qreal h)
void setSelectionArea(const QPainterPath &path, const QTransform &deviceTransform)
void setSelectionArea(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, const QTransform &deviceTransform = QTransform())
void setSelectionArea(const QPainterPath &path, Qt::ItemSelectionOperation selectionOperation, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, const QTransform &deviceTransform = QTransform())
void setStickyFocus(bool enabled)
void setStyle(QStyle *style)
bool stickyFocus() const
QStyle * style() const
void update(qreal x, qreal y, qreal w, qreal h)
QList<QGraphicsView *> views() const
qreal width() const
  • 34 public functions inherited from QObject

Public Slots

void advance()
void clear()
void clearSelection()
void invalidate(const QRectF &rect, QGraphicsScene::SceneLayers layers)
void update(const QRectF &rect = QRectF())
  • 1 public slot inherited from QObject

Signals

void changed(const QList<QRectF> &region)
void focusItemChanged(QGraphicsItem *newFocusItem, QGraphicsItem *oldFocusItem, Qt::FocusReason reason)
void sceneRectChanged(const QRectF &rect)
void selectionChanged()
  • 2 signals inherited from QObject

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
  • 9 защищённых функций, унаследованных от QObject

Защищённые слоты

bool focusNextPrevChild(bool next)

Дополнительные унаследованные члены

  • 1 общедоступная переменная, унаследованная от QObject
  • 10 статические общедоступные члены, унаследованные от QObject
  • 2 защищённые переменные, унаследованные от 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().

END_OF_DOCUMENT_MARKER

Ключевые события передаются элементу фокуса. Чтобы установить элемент фокуса, можно вызвать 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().

Документация свойств

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).

Функции доступа:

QGraphicsScene::ItemIndexMethod itemIndexMethod() const
void setItemIndexMethod(QGraphicsScene::ItemIndexMethod method)

См. также bspTreeDepth.

minimumRenderSize : qreal

Это свойство содержит минимальный размер, преобразованный с учётом вида, который должен иметь элемент для отрисовки.

При отрисовке сцены любой элемент, ширина или высота которого, преобразованные в целевой вид, меньше minimumRenderSize(), не будет отрисован. Если элемент не отрисовывается, и он обрезает свои дочерние элементы, они также не будут отрисовываться. Установите это значение для ускорения отрисовки сцен с множеством объектов, отображаемых на сильно уменьшенном представлении.

Значение по умолчанию — 0. Если не установлено или установлено на 0 или отрицательное значение, все элементы всегда будут отрисовываться.

Например, это свойство может быть особенно полезно, если сцена отрисовывается несколькими представлениями, одно из которых служит обзором, который всегда отображает все элементы. В сценах с большим количеством элементов такое представление будет использовать большой коэффициент масштабирования, чтобы все элементы можно было отобразить. Из-за масштабирования более мелкие элементы будут вносить незначительный вклад в итоговую отрисованную сцену. Чтобы избежать рисования этих элементов и сократить время, необходимое для отрисовки сцены, вы можете вызвать setMinimumRenderSize() с ненулевым значением.

Примечание: Элементы, которые не отрисовываются из-за того, что слишком малы, по-прежнему возвращаются методами, такими как items() и itemAt(), и участвуют в обнаружении столкновений и взаимодействиях. Рекомендуется установить minimumRenderSize() на значение меньше или равное 1, чтобы избежать больших неотрисованных элементов, которые являются интерактивными.

Это свойство было добавлено в Qt 5.4.

Функции доступа:

qreal minimumRenderSize() const
void setMinimumRenderSize(qreal minSize)

См. также QStyleOptionGraphicsItem::levelOfDetailFromTransform().

palette : QPalette

Это свойство хранит палитру по умолчанию сцены.

Это свойство предоставляет палитру сцены. Палитра сцены по умолчанию — и разрешает все свои записи из QApplication::palette.

Если палитра сцены изменяется, либо непосредственно через setPalette(), либо косвенно при изменении палитры приложения, QGraphicsScene сначала отправляет себе событие PaletteChange, а затем отправляет события PaletteChange всем элементам виджетов верхнего уровня в сцене. Эти элементы реагируют, разрешая свои палитры на сцене, а затем уведомляют своих детей, которые, в свою очередь, уведомляют своих детей, и так далее, пока все элементы виджетов не обновят свои палитры.

Изменение палитры сцены (непосредственно или косвенно через QApplication::setPalette()) автоматически планирует перерисовку всей сцены.

Это свойство было добавлено в Qt 4.4.

Функции доступа:

QPalette palette() const
void setPalette(const QPalette &palette)

См. также QWidget::palette, QApplication::setPalette(), шрифт и стиль.

sceneRect : QRectF

Это свойство содержит прямоугольник сцены; ограничивающий прямоугольник сцены

Прямоугольник сцены определяет пределы сцены. Он в основном используется QGraphicsView для определения области прокрутки по умолчанию и QGraphicsScene для управления индексацией элементов.

Если не задано или если задано в виде нулевого QRectF, sceneRect() вернёт наибольший ограничивающий прямоугольник всех элементов на сцене с момента создания сцены (то есть прямоугольник, который увеличивается при добавлении или перемещении элементов на сцене, но никогда не уменьшается).

Функции доступа:

QRectF sceneRect() const
void setSceneRect(const QRectF &rect)
void setSceneRect(qreal x, qreal y, qreal w, qreal h)

См. также width(), height() и QGraphicsView::sceneRect.

stickyFocus : bool

Это свойство указывает, будет ли очищаться фокус при нажатии на фон сцены

В QGraphicsScene со значением stickyFocus, равным true, фокус останется неизменным при щелчке пользователя на фоновом изображении сцены или на элементе, не принимающем фокус. В противном случае фокус будет очищен.

По умолчанию это свойство равно false.

Изменение фокуса происходит в ответ на нажатие мыши. Вы можете переопределить mousePressEvent() в подклассе QGraphicsScene, чтобы переключить это свойство в зависимости от того, где пользователь щелкнул.

Это свойство было добавлено в Qt 4.6.

Функции доступа:

bool stickyFocus() const
void setStickyFocus(bool enabled)

См. также clearFocus() и setFocusItem().

Документация по функциям-членам

QGraphicsScene::QGraphicsScene(QObject *parent = nullptr)

Конструирует объект QGraphicsScene. Параметр parent передается в конструктор QObject.

QGraphicsScene::QGraphicsScene(const QRectF &sceneRect, QObject *parent = nullptr)

Конструирует объект QGraphicsScene, используя sceneRect для прямоугольника сцены. Параметр parent передается в конструктор QObject.

См. также sceneRect.

QGraphicsScene::QGraphicsScene(qreal x, qreal y, qreal width, qreal height, QObject *parent = 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 = ...)

Создаёт новый 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> &region)

Этот сигнал испускается 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().

[override 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

[override 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.

[protected slot] bool QGraphicsScene::focusNextPrevChild(bool next)

Ищет новый виджет для получения фокуса клавиатуры, соответствующий нажатию клавиш Tab и Shift+Tab, и возвращает true, если он находит новый виджет, или false, если нет. Если next имеет значение true, эта функция выполняет поиск вперёд; если next имеет значение false, она выполняет поиск назад.

Вы можете переопределить эту функцию в подклассе QGraphicsScene, чтобы получить точный контроль над тем, как фокус при нажатии клавиши Tab передаётся внутри вашей сцены. По умолчанию реализация основана на цепочке фокуса Tab, определённой в 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, QGraphicsScene::SceneLayers layers)

Делает недействительной и планирует перерисовку слоёв 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, QGraphicsScene::SceneLayers layers)

Это перегруженная функция.

Эта вспомогательная функция эквивалентна вызову 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() и Сортировка.

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), или он не виден или не активен, эта функция только снимает фокус с любого предыдущего focusitem.

Если 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/archives/qt-5.11/qgraphicsscene.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API