Класс 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 = 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 |
| bool | focusOnTouch() const |
| QFont | font() const |
| QBrush | foregroundBrush() const |
| bool | hasFocus() const |
| qreal | height() const |
| virtual QVariant | inputMethodQuery(Qt::InputMethodQuery query) const |
| void | invalidate(qreal x, qreal y, qreal w, qreal h, QGraphicsScene::SceneLayers layers) |
| bool | isActive() const |
| QGraphicsItem * | itemAt(const QPointF &position, const QTransform &deviceTransform) const |
| QGraphicsItem * | itemAt(qreal x, qreal y, const QTransform &deviceTransform) const |
| QGraphicsScene::ItemIndexMethod | itemIndexMethod() const |
| QList<QGraphicsItem *> | items(Qt::SortOrder order = Qt::DescendingOrder) const |
| QList<QGraphicsItem *> | items(const QPointF &pos, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const |
| QList<QGraphicsItem *> | items(const QRectF &rect, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const |
| QList<QGraphicsItem *> | items(const QPolygonF &polygon, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const |
| QList<QGraphicsItem *> | items(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const |
| QList<QGraphicsItem *> | items(qreal x, qreal y, qreal w, qreal h, Qt::ItemSelectionMode mode, Qt::SortOrder order, const QTransform &deviceTransform = QTransform()) const |
| QRectF | itemsBoundingRect() const |
| qreal | minimumRenderSize() const |
| QGraphicsItem * | mouseGrabberItem() const |
| QPalette | palette() const |
| void | removeItem(QGraphicsItem *item) |
| void | render(QPainter *painter, const QRectF &target = QRectF(), const QRectF &source = QRectF(), Qt::AspectRatioMode aspectRatioMode = Qt::KeepAspectRatio) |
| QRectF | sceneRect() const |
| QList<QGraphicsItem *> | selectedItems() const |
| QPainterPath | selectionArea() const |
| bool | sendEvent(QGraphicsItem *item, QEvent *event) |
| void | setActivePanel(QGraphicsItem *item) |
| void | setActiveWindow(QGraphicsWidget *widget) |
| void | setBackgroundBrush(const QBrush &brush) |
| void | setBspTreeDepth(int depth) |
| void | setFocus(Qt::FocusReason focusReason = Qt::OtherFocusReason) |
| void | setFocusItem(QGraphicsItem *item, Qt::FocusReason focusReason = Qt::OtherFocusReason) |
| void | setFocusOnTouch(bool enabled) |
| void | setFont(const QFont &font) |
| void | setForegroundBrush(const QBrush &brush) |
| void | setItemIndexMethod(QGraphicsScene::ItemIndexMethod method) |
| void | setMinimumRenderSize(qreal minSize) |
| void | setPalette(const QPalette &palette) |
| void | setSceneRect(const QRectF &rect) |
| void | setSceneRect(qreal x, qreal y, qreal w, qreal h) |
| void | setSelectionArea(const QPainterPath &path, const QTransform &deviceTransform) |
| void | setSelectionArea(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, const QTransform &deviceTransform = QTransform()) |
| void | setSelectionArea(const QPainterPath &path, Qt::ItemSelectionOperation selectionOperation, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, const QTransform &deviceTransform = QTransform()) |
| void | setStickyFocus(bool enabled) |
| void | setStyle(QStyle *style) |
| bool | stickyFocus() const |
| QStyle * | style() const |
| void | update(qreal x, qreal y, qreal w, qreal h) |
| QList<QGraphicsView *> | views() const |
| qreal | width() const |
- 31 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> ®ion) |
| void | focusItemChanged(QGraphicsItem *newFocusItem, QGraphicsItem *oldFocusItem, Qt::FocusReason reason) |
| void | sceneRectChanged(const QRectF &rect) |
| void | selectionChanged() |
- 2 signals inherited from QObject
Static Public Members
| const QMetaObject | staticMetaObject |
- 9 static public members 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) override |
| виртуальный bool | eventFilter(QObject *watched, QEvent *event) override |
- 9 защищённых функций унаследованных от QObject
Защищённые слоты
| bool | focusNextPrevChild(bool next) |
Подробное описание
Класс 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.
focusOnTouch : bool
Это свойство определяет, получают ли элементы фокус при получении события touch begin.
Обычное поведение — передавать фокус только при нажатии на элемент. Часто нажатие на сенсорную панель интерпретируется операционной системой как эквивалент щелчку мыши, генерируя синтетическое событие щелчка в ответ. Однако, по крайней мере, на macOS вы можете настроить это поведение.
По умолчанию QGraphicsScene также передает фокус при касании трекпада или подобного. Если операционная система настроена не генерировать синтетический щелчок мыши при касании трекпада, это может быть неожиданно. Если операционная система генерирует синтетические щелчки мыши при касании трекпада, передача фокуса при начале жеста касания не нужна.
С отключенным focusOnTouch QGraphicsScene ведет себя так, как ожидается на macOS.
Значение по умолчанию — true, обеспечивая, что поведение по умолчанию такое же, как и в версиях Qt до 5.12. Установите false для предотвращения срабатывания событий касания для изменения фокуса.
Это свойство было введено в Qt 5.12.
Функции доступа:
| bool | focusOnTouch() const |
| void | setFocusOnTouch(bool enabled) |
font : QFont
Это свойство содержит шрифт по умолчанию сцены.
Это свойство предоставляет шрифт сцены. Шрифт сцены по умолчанию — и разрешает все свои записи из QApplication::font.
Если шрифт сцены изменяется, либо напрямую через setFont(), либо косвенно при изменении шрифта приложения, QGraphicsScene сначала отправляет себе событие FontChange, а затем отправляет события FontChange всем элементам виджетов верхнего уровня в сцене. Эти элементы реагируют, разрешая свои шрифты к сцене, а затем уведомляют своих потомков, которые снова уведомляют своих потомков, и так далее, пока все элементы виджетов не обновят свои шрифты.
Изменение шрифта сцены (прямо или косвенно через QApplication::setFont()) автоматически планирует перерисовку всей сцены.
Это свойство было введено в Qt 4.4.
Функции доступа:
| QFont | font() const |
| void | setFont(const QFont &font) |
См. также QWidget::font, QApplication::setFont(), palette и style().
foregroundBrush : QBrush
Это свойство содержит кисть переднего плана сцены.
Измените это свойство, чтобы установить передний план сцены на другой цвет, градиент или текстуру.
Передний план рисуется после (сверху) элементов. Кисть переднего плана по умолчанию — Qt::NoBrush (т. е. передний план не рисуется).
Пример:
QGraphicsScene scene; QGraphicsView view(&scene); view.show(); // a white semi-transparent foreground scene.setForegroundBrush(QColor(255, 255, 255, 127)); // a grid foreground scene.setForegroundBrush(QBrush(Qt::lightGray, Qt::CrossPattern));
QGraphicsScene::render() вызывает drawForeground() для отрисовки переднего плана сцены. Для более детального управления отрисовкой переднего плана вы можете переопределить функцию drawForeground() в подклассе QGraphicsScene.
Функции доступа:
| QBrush | foregroundBrush() const |
| void | setForegroundBrush(const QBrush &brush) |
itemIndexMethod : ItemIndexMethod
Это свойство содержит метод индексирования элементов.
QGraphicsScene применяет алгоритм индексирования к сцене для ускорения функций поиска элементов, таких как items() и itemAt(). Индексирование наиболее эффективно для статических сцен (т. е. когда элементы не перемещаются). Для динамических сцен или сцен с множеством анимированных элементов ведение индекса может перевесить быстроту поиска.
В общем случае метод индексирования по умолчанию BspTreeIndex работает хорошо. Если ваша сцена использует много анимаций и вы испытываете замедление, вы можете отключить индексирование, вызвав setItemIndexMethod(NoIndex).
Функции доступа:
| QGraphicsScene::ItemIndexMethod | itemIndexMethod() const |
| void | setItemIndexMethod(QGraphicsScene::ItemIndexMethod method) |
См. также bspTreeDepth.
minimumRenderSize : qreal
Это свойство содержит минимальный размер, преобразованный с помощью представления, который должен иметь элемент для отрисовки.
При отрисовке сцены любой элемент, чья ширина или высота, преобразованные в целевое представление, меньше minimumRenderSize(), не будет отрисовываться. Если элемент не отрисовывается и он обрезает свои дочерние элементы, они также не будут отрисовываться. Установите это значение для ускорения отрисовки сцен с множеством объектов, отрисовываемых в сильно уменьшенном представлении.
Значение по умолчанию — 0. Если не задано или установлено в 0 или отрицательное значение, все элементы будут всегда отрисовываться.
Например, настройка этого свойства особенно полезна, если сцена отрисовывается несколькими представлениями, одно из которых служит общим видом, который всегда отображает все элементы. В сценах с большим количеством элементов такое представление будет использовать большой коэффициент масштабирования, чтобы отобразить все элементы. Из-за масштабирования меньшие элементы будут вносить незначительный вклад в конечную отрисованную сцену. Чтобы избежать отрисовки этих элементов и сократить время, необходимое для отрисовки сцены, вы можете вызвать setMinimumRenderSize() с ненулевым значением.
Примечание: Элементы, которые не отрисовываются из-за того, что слишком малы, все равно возвращаются методами, такими как items() и itemAt(), и участвуют в обнаружении столкновений и взаимодействиях. Рекомендуется установить minimumRenderSize() на значение, меньшее или равное 1, чтобы избежать больших неотрисованных элементов, которые являются интерактивными.
Это свойство было введено в Qt 5.4.
Функции доступа:
| qreal | minimumRenderSize() const |
| void | setMinimumRenderSize(qreal minSize) |
См. также QStyleOptionGraphicsItem::levelOfDetailFromTransform().
palette : QPalette
Это свойство содержит стандартную палитру сцены.
Это свойство предоставляет палитру сцены. Палитра сцены по умолчанию и разрешает все свои записи из QApplication::palette.
Если палитра сцены изменяется, либо напрямую через setPalette(), либо косвенно при изменении палитры приложения, QGraphicsScene сначала отправляет себе событие PaletteChange, а затем отправляет события PaletteChange всем элементам-виджетам верхнего уровня в сцене. Эти элементы реагируют, разрешая свои собственные палитры к сцене, и затем уведомляют своих детей, которые снова уведомляют своих детей, и так далее, пока все элементы виджетов не обновили свои палитры.
Изменение палитры сцены (напрямую или косвенно через QApplication::setPalette()) автоматически планирует перерисовку всей сцены.
Это свойство было добавлено в Qt 4.4.
Функции доступа:
| QPalette | palette() const |
| void | setPalette(const QPalette &palette) |
См. также QWidget::palette, QApplication::setPalette(), шрифт, и стиль.
sceneRect : QRectF
Это свойство содержит прямоугольник сцены; ограничивающий прямоугольник сцены
Прямоугольник сцены определяет границы сцены. Он в основном используется QGraphicsView для определения области прокрутки по умолчанию, и QGraphicsScene для управления индексацией элементов.
Если не задано или если задано нулевое значение QRectF, sceneRect() вернёт наибольший ограничивающий прямоугольник всех элементов на сцене с момента создания сцены (то есть прямоугольник, который увеличивается при добавлении или перемещении элементов в сцене, но никогда не уменьшается).
Функции доступа:
| QRectF | sceneRect() const |
| void | setSceneRect(const QRectF &rect) |
| void | setSceneRect(qreal x, qreal y, qreal w, qreal h) |
См. также ширина(), высота(), и 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).
Если элемент видимый (т.е., QGraphicsItem::isVisible() возвращает true), QGraphicsScene выведет сигнал changed() после возврата управления в цикл событий.
Обратите внимание, что виджеты с установленным атрибутом виджета 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 может быть переопределён в подклассе для получения событий входа перетаскивания для сцены.
По умолчанию обработчик принимает событие и подготавливает сцену к приёму событий перемещения перетаскивания.
См. также QGraphicsItem::dragEnterEvent(), dragMoveEvent(), dragLeaveEvent() и dropEvent().
[virtual protected] void QGraphicsScene::dragLeaveEvent(QGraphicsSceneDragDropEvent *event)
Этот обработчик событий для события event может быть переопределён в подклассе для получения событий выхода перетаскивания для сцены.
См. также QGraphicsItem::dragLeaveEvent(), dragEnterEvent(), dragMoveEvent() и dropEvent().
[virtual protected] void QGraphicsScene::dragMoveEvent(QGraphicsSceneDragDropEvent *event)
Этот обработчик событий для события event может быть переопределён в подклассе для получения событий перемещения перетаскивания для сцены.
Примечание: См. items() для определения того, какие элементы считаются видимыми в этой функции.
См. также QGraphicsItem::dragMoveEvent(), dragEnterEvent(), dragLeaveEvent() и dropEvent().
[virtual protected] void QGraphicsScene::drawBackground(QPainter *painter, const QRectF &rect)
Отрисовывает фон сцены с помощью painter перед отрисовкой любых элементов и переднего плана. Переопределите эту функцию, чтобы обеспечить пользовательский фон для сцены.
Вся отрисовка выполняется в координатах сцены. Параметр rect — это видимый прямоугольник.
Если всё, что вам нужно, это определить цвет, текстуру или градиент для фона, вы можете вызвать setBackgroundBrush() вместо этого.
См. также drawForeground() и drawItems().
[virtual protected] void QGraphicsScene::drawForeground(QPainter *painter, const QRectF &rect)
Отрисовывает передний план сцены с помощью painter после отрисовки фона и всех элементов. Переопределите эту функцию, чтобы обеспечить пользовательский передний план для сцены.
Вся отрисовка выполняется в координатах сцены. Параметр rect — это видимый прямоугольник.
Если всё, что вам нужно, это определить цвет, текстуру или градиент для переднего плана, вы можете вызвать setForegroundBrush() вместо этого.
См. также drawBackground() и drawItems().
[virtual protected] void QGraphicsScene::dropEvent(QGraphicsSceneDragDropEvent *event)
Этот обработчик событий для события event может быть переопределён в подклассе для получения событий падения для сцены.
См. также QGraphicsItem::dropEvent(), dragEnterEvent(), dragMoveEvent(), и dragLeaveEvent().
[override virtual protected] bool QGraphicsScene::event(QEvent *event)
Переопределено из QObject::event().
Обрабатывает событие event и рассылает его соответствующим обработчикам событий.
Помимо вызова удобных обработчиков событий, эта функция отвечает за преобразование событий перемещения мыши в события наведения для случаев, когда нет элемента захвата мыши. События наведения доставляются непосредственно элементам; для них нет удобной функции.
В отличие от QWidget, QGraphicsScene не имеет удобных функций enterEvent() и leaveEvent(). Используйте эту функцию для получения этих событий вместо них.
См. также contextMenuEvent(), keyPressEvent(), keyReleaseEvent(), mousePressEvent(), mouseMoveEvent(), mouseReleaseEvent(), mouseDoubleClickEvent(), focusInEvent(), и focusOutEvent().
[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 истинно, эта функция ищет вперёд; если 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, 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.
END_OF_DOCUMENT_MARKERСм. также 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), или он не виден или не активен, эта функция только удаляет фокус с любого предыдущего элемента фокуса.
Если 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.12/qgraphicsscene.html