QGraphicsScene Class
QGraphicsScene 클래스는 다수의 2D 그래픽 항목을 관리하기 위한 표면을 제공합니다. 더 보기...
| 헤더: | #include <QGraphicsScene> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| 상속: | QObject |
공개 유형
| enum | ItemIndexMethod { BspTreeIndex, NoIndex } |
| enum | SceneLayer { ItemLayer, BackgroundLayer, ForegroundLayer, AllLayers } |
| flags | SceneLayers |
속성
|
|
공개 함수
| 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 = Qt::WindowFlags()) |
| QBrush | backgroundBrush() const |
| int | bspTreeDepth() const |
| void | clearFocus() |
| QList<QGraphicsItem *> | collidingItems(const QGraphicsItem *item, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const |
| QGraphicsItemGroup * | createItemGroup(const QList<QGraphicsItem *> &items) |
| void | destroyItemGroup(QGraphicsItemGroup *group) |
| QGraphicsItem * | focusItem() const |
| bool | focusOnTouch() const |
| QFont | font() const |
| QBrush | foregroundBrush() const |
| bool | hasFocus() const |
| qreal | height() const |
| virtual QVariant | inputMethodQuery(Qt::InputMethodQuery query) const |
| void | invalidate(qreal x, qreal y, qreal w, qreal h, QGraphicsScene::SceneLayers layers = AllLayers) |
| bool | isActive() const |
| QGraphicsItem * | itemAt(const QPointF &position, const QTransform &deviceTransform) const |
| QGraphicsItem * | itemAt(qreal x, qreal y, const QTransform &deviceTransform) const |
| QGraphicsScene::ItemIndexMethod | itemIndexMethod() const |
| QList<QGraphicsItem *> | items(Qt::SortOrder order = Qt::DescendingOrder) const |
| QList<QGraphicsItem *> | items(const QPointF &pos, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const |
| QList<QGraphicsItem *> | items(const QPainterPath &path, 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 QRectF &rect, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const |
| QList<QGraphicsItem *> | items(qreal x, qreal y, qreal w, qreal h, Qt::ItemSelectionMode mode, Qt::SortOrder order, const QTransform &deviceTransform = QTransform()) const |
| QRectF | itemsBoundingRect() const |
| qreal | minimumRenderSize() const |
| QGraphicsItem * | mouseGrabberItem() const |
| QPalette | palette() const |
| void | removeItem(QGraphicsItem *item) |
| void | render(QPainter *painter, const QRectF &target = QRectF(), const QRectF &source = QRectF(), Qt::AspectRatioMode aspectRatioMode = Qt::KeepAspectRatio) |
| QRectF | sceneRect() const |
| QList<QGraphicsItem *> | selectedItems() const |
| QPainterPath | selectionArea() const |
| bool | sendEvent(QGraphicsItem *item, QEvent *event) |
| void | setActivePanel(QGraphicsItem *item) |
| void | setActiveWindow(QGraphicsWidget *widget) |
| void | setBackgroundBrush(const QBrush &brush) |
| void | setBspTreeDepth(int depth) |
| void | setFocus(Qt::FocusReason focusReason = Qt::OtherFocusReason) |
| void | setFocusItem(QGraphicsItem *item, Qt::FocusReason focusReason = Qt::OtherFocusReason) |
| void | setFocusOnTouch(bool enabled) |
| void | setFont(const QFont &font) |
| void | setForegroundBrush(const QBrush &brush) |
| void | setItemIndexMethod(QGraphicsScene::ItemIndexMethod method) |
| void | setMinimumRenderSize(qreal minSize) |
| void | setPalette(const QPalette &palette) |
| void | setSceneRect(const QRectF &rect) |
| void | setSceneRect(qreal x, qreal y, qreal w, qreal h) |
| void | setSelectionArea(const QPainterPath &path, const QTransform &deviceTransform) |
| void | setSelectionArea(const QPainterPath &path, Qt::ItemSelectionOperation selectionOperation = Qt::ReplaceSelection, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, const QTransform &deviceTransform = QTransform()) |
| void | setStickyFocus(bool enabled) |
| void | setStyle(QStyle *style) |
| bool | stickyFocus() const |
| QStyle * | style() const |
| void | update(qreal x, qreal y, qreal w, qreal h) |
| QList<QGraphicsView *> | views() const |
| qreal | width() const |
공개 슬롯
| void | advance() |
| void | clear() |
| void | clearSelection() |
| void | invalidate(const QRectF &rect = QRectF(), QGraphicsScene::SceneLayers layers = AllLayers) |
| void | update(const QRectF &rect = QRectF()) |
신호
| void | changed(const QList<QRectF> ®ion) |
| void | focusItemChanged(QGraphicsItem *newFocusItem, QGraphicsItem *oldFocusItem, Qt::FocusReason reason) |
| void | sceneRectChanged(const QRectF &rect) |
| void | selectionChanged() |
보호된 함수
| virtual void | contextMenuEvent(QGraphicsSceneContextMenuEvent *contextMenuEvent) |
| virtual void | dragEnterEvent(QGraphicsSceneDragDropEvent *event) |
| virtual void | dragLeaveEvent(QGraphicsSceneDragDropEvent *event) |
| virtual void | dragMoveEvent(QGraphicsSceneDragDropEvent *event) |
| virtual void | drawBackground(QPainter *painter, const QRectF &rect) |
| virtual void | drawForeground(QPainter *painter, const QRectF &rect) |
| virtual void | dropEvent(QGraphicsSceneDragDropEvent *event) |
| virtual void | focusInEvent(QFocusEvent *focusEvent) |
| virtual void | focusOutEvent(QFocusEvent *focusEvent) |
| virtual void | helpEvent(QGraphicsSceneHelpEvent *helpEvent) |
| virtual void | inputMethodEvent(QInputMethodEvent *event) |
| virtual void | keyPressEvent(QKeyEvent *keyEvent) |
| virtual void | keyReleaseEvent(QKeyEvent *keyEvent) |
| virtual void | mouseDoubleClickEvent(QGraphicsSceneMouseEvent *mouseEvent) |
| virtual void | mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent) |
| virtual void | mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) |
| virtual void | mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent) |
| virtual void | wheelEvent(QGraphicsSceneWheelEvent *wheelEvent) |
재구현된 보호 함수
| virtual bool | event(QEvent *event) override |
| virtual bool | eventFilter(QObject *watched, QEvent *event) override |
보호된 슬롯
| virtual bool | focusNextPrevChild(bool next) |
상세 설명
이 클래스는 QGraphicsItem의 컨테이너 역할을 합니다. 이 클래스는 QGraphicsScene( QGraphicsView )과 함께 사용되어 2D 표면 위에 선, 사각형, 텍스트 또는 사용자 정의 항목과 같은 그래픽 항목을 시각화합니다. QGraphicsScene은 그래픽 뷰 프레임워크( Graphics View Framework)의 일부입니다.
또한 QGraphicsScene은 아이템의 위치를 효율적으로 파악하고, 씬 내 임의의 영역에서 어떤 아이템이 보이는지 확인할 수 있는 기능을 제공합니다. QGraphicsView 위젯을 사용하면 씬 전체를 표시하거나, 확대하여 씬의 일부만 볼 수 있습니다.
예시:
QGraphicsScene scene;
scene.addText("Hello, world!");
QGraphicsView view(&scene);
view.show();QGraphicsScene은 자체적인 시각적 모양을 가지고 있지 않으며, 오직 항목들만 관리한다는 점에 유의하십시오. 장면을 시각화하려면 QGraphicsView 위젯을 생성해야 합니다.
씬에 항목을 추가하려면 먼저 QGraphicsScene 객체를 생성해야 합니다. 그런 다음 두 가지 옵션이 있습니다. ` addItem()`를 호출하여 기존 ` QGraphicsItem ` 객체를 추가하거나, ` addEllipse()`, ` addLine()`, ` addPath()`, ` addPixmap()`, ` addPolygon()`, ` addRect()`, ` addText()` 중 하나의 편의 함수를 호출할 수 있습니다. 이 함수들은 모두 새로 추가된 항목에 대한 포인터를 반환합니다. 이 함수들로 추가된 항목의 크기는 해당 항목의 좌표계를 기준으로 하며, 항목의 위치는 씬 내에서 (0, 0)으로 초기화됩니다.
그런 다음 QGraphicsView 를 사용하여 장면을 시각화할 수 있습니다. 장면이 변경되면(예: 항목이 이동하거나 변형될 때) QGraphicsScene은 changed() 신호를 발생시킵니다. 항목을 제거하려면 removeItem()를 호출하십시오.
QGraphicsScene은 인덱싱 알고리즘을 사용하여 항목의 위치를 효율적으로 관리합니다. 기본적으로 BSP(이진 공간 분할) 트리가 사용되며, 이는 대부분의 항목이 정적 상태(즉, 이동하지 않음)로 유지되는 대규모 장면에 적합한 알고리즘입니다. setItemIndexMethod()를 호출하여 이 인덱싱을 비활성화할 수 있습니다. 사용 가능한 인덱싱 알고리즘에 대한 자세한 내용은 itemIndexMethod 속성을 참조하십시오.
씬의 바운딩 사각형은 setSceneRect()를 호출하여 설정합니다. 아이템은 씬의 어느 위치에나 배치할 수 있으며, 씬의 크기는 기본적으로 제한이 없습니다. 씬 사각형은 씬의 아이템 인덱스를 관리하는 내부 용도로만 사용됩니다. 씬 사각형이 설정되지 않은 경우, QGraphicsScene은 itemsBoundingRect()가 반환하는 모든 아이템의 바운딩 영역을 씬 사각형으로 사용합니다. 그러나 ` itemsBoundingRect()`는 씬에 있는 모든 항목의 위치 정보를 수집하는 방식으로 작동하기 때문에 상대적으로 시간이 많이 소요되는 함수입니다. 이 때문에 대규모 씬을 다룰 때는 항상 씬 사각형을 설정해야 합니다.
QGraphicsScene의 가장 큰 장점 중 하나는 항목의 위치를 효율적으로 파악할 수 있다는 점입니다. 씬에 수백만 개의 항목이 있더라도, ` items()` 함수는 몇 밀리초 이내에 항목의 위치를 파악할 수 있습니다. items() 함수에는 여러 오버로드가 있습니다. 특정 위치에 있는 항목을 찾는 오버로드, 다각형이나 사각형 내부에 있거나 이와 교차하는 항목을 찾는 오버로드 등이 있습니다. 반환되는 항목 목록은 스택 순서대로 정렬되며, 최상위 항목이 목록의 첫 번째 항목이 됩니다. 편의를 위해, 주어진 위치의 최상위 항목을 반환하는 ` itemAt()` 함수도 있습니다.
QGraphicsScene은 씬에 대한 선택 정보를 관리합니다. 항목을 선택하려면 setSelectionArea()을 호출하고, 현재 선택을 해제하려면 clearSelection()을 호출하십시오. 선택된 모든 항목의 목록을 얻으려면 selectedItems()을 호출하십시오.
이벤트 처리 및 전파
QGraphicsScene이 담당하는 또 다른 역할은 QGraphicsView 에서 발생하는 이벤트를 전파하는 것입니다. 씬으로 이벤트를 전송하려면 QEvent 를 상속하는 이벤트를 생성한 다음, 예를 들어 QCoreApplication::sendEvent()를 사용하여 전송합니다. event()는 이벤트를 개별 항목으로 분배하는 역할을 담당합니다. 일부 일반적인 이벤트는 편의 이벤트 핸들러에 의해 처리됩니다. 예를 들어, 키 누름 이벤트는 keyPressEvent()에 의해 처리되며, 마우스 클릭 이벤트는 mousePressEvent()에 의해 처리됩니다.
키 이벤트는 포커스가 설정된 항목으로 전달됩니다. 포커스 항목을 설정하려면, 포커스를 받을 수 있는 항목을 인수로 전달하여 setFocusItem()를 호출하거나, 해당 항목 자체가 QGraphicsItem::setFocus()를 호출할 수 있습니다. 현재 포커스 항목을 가져오려면 focusItem()를 호출하십시오. 위젯과의 호환성을 위해, 씬은 자체적인 포커스 정보도 관리합니다. 기본적으로 씬은 포커스를 가지지 않으며, 모든 키 이벤트는 무시됩니다. ` setFocus()`가 호출되거나 씬의 항목 중 하나가 포커스를 얻으면, 씬은 자동으로 포커스를 얻습니다. 씬이 포커스를 가지고 있는 경우, ` hasFocus()`는 `true`를 반환하며, 키 이벤트는 포커스를 가진 항목(있는 경우)으로 전달됩니다. 씬이 포커스를 잃는 경우(즉, 어떤 항목이 포커스를 가지고 있는 상태에서 누군가가 ` clearFocus()`를 호출하는 경우), 씬은 해당 항목의 포커스 정보를 유지하며, 씬이 다시 포커스를 얻으면 마지막으로 포커스를 가졌던 항목이 다시 포커스를 얻도록 보장합니다.
마우스 오버 효과의 경우, QGraphicsScene은 hover 이벤트를 디스패치합니다. 항목이 호버 이벤트를 수락하는 경우( QGraphicsItem::acceptHoverEvents() 참조), 마우스가 해당 영역에 들어오면 GraphicsSceneHoverEnter 이벤트를 수신합니다. 마우스가 항목의 영역 내에서 계속 이동하면, QGraphicsScene은 GraphicsSceneHoverMove 이벤트를 보냅니다. 마우스가 항목의 영역을 벗어나면, 항목은 GraphicsSceneHoverLeave 이벤트를 수신합니다.
모든 마우스 이벤트는 현재 마우스 그라버 항목으로 전달됩니다. 항목이 마우스 이벤트를 수락하고( QGraphicsItem::acceptedMouseButtons() 참조) 마우스 누름 이벤트를 수신하면 해당 항목은 씬의 마우스 그라버가 됩니다. 다른 마우스 버튼이 눌려 있지 않은 상태에서 마우스 릴리스 이벤트를 수신할 때까지 해당 항목은 마우스 그라버 상태를 유지합니다. mouseGrabberItem()를 호출하여 현재 마우스를 잡고 있는 항목이 무엇인지 확인할 수 있습니다.
QGraphicsItem 및 QGraphicsView도 참조하십시오 .
멤버 유형 문서
enum QGraphicsScene::ItemIndexMethod
이 열거형은 QGraphicsScene 가 씬 내 아이템의 위치 정보를 관리하기 위해 제공하는 인덱싱 알고리즘을 설명합니다.
| 상수 | 값 | 설명 |
|---|---|---|
QGraphicsScene::BspTreeIndex | 0 | 이진 공간 분할(BSP) 트리가 적용됩니다. QGraphicsScene 의 모든 아이템 위치 알고리즘은 이진 검색을 활용하여 로그급 근사 복잡도를 갖습니다. 아이템 추가, 이동 및 제거는 로그 시간 내에 수행됩니다. 이 방식은 정적 장면(즉, 대부분의 아이템이 움직이지 않는 장면)에 가장 적합합니다. |
QGraphicsScene::NoIndex | -1 | 인덱스가 적용되지 않습니다. 씬에 있는 모든 아이템을 검색하므로 아이템 위치 파악은 선형 시간 복잡도를 가집니다. 그러나 아이템 추가, 이동 및 제거는 상수 시간에 수행됩니다. 이 접근 방식은 많은 아이템이 지속적으로 추가, 이동 또는 제거되는 동적 씬에 이상적입니다. |
setItemIndexMethod() 및 bspTreeDepth도 참조하십시오 .
enum QGraphicsScene::SceneLayer
flags QGraphicsScene::SceneLayers
이 열거형은 ` QGraphicsScene`의 렌더링 레이어를 설명합니다. ` QGraphicsScene `가 장면 내용을 그릴 때, 이러한 각 레이어를 순서대로 개별적으로 렌더링합니다.
각 레이어는 invalidate()이나 QGraphicsView::invalidateScene()과 같은 함수를 호출할 때 OR 연산을 통해 결합할 수 있는 플래그를 나타냅니다.
| 상수 | 값 | 설명 |
|---|---|---|
QGraphicsScene::ItemLayer | 0x1 | 아이템 레이어입니다. QGraphicsScene 는 가상 함수 drawItems()를 호출하여 이 레이어에 있는 모든 아이템을 렌더링합니다. 아이템 레이어는 배경 레이어 다음, 전경 레이어 이전에 그려집니다. |
QGraphicsScene::BackgroundLayer | 0x2 | 배경 레이어입니다. QGraphicsScene 은 가상 함수 drawBackground()를 호출하여 이 레이어에 장면의 배경을 렌더링합니다. 배경 레이어는 모든 레이어 중에서 가장 먼저 그려집니다. |
QGraphicsScene::ForegroundLayer | 0x4 | 전경 레이어. QGraphicsScene 는 가상 함수 drawForeground()를 호출하여 이 레이어에 장면의 전경을 렌더링합니다. 전경 레이어는 모든 레이어 중에서 가장 마지막에 그려집니다. |
QGraphicsScene::AllLayers | 0xffff | 모든 레이어; 이 값은 세 레이어 모두의 조합을 나타냅니다. |
SceneLayers 유형은 QFlags<SceneLayer>에 대한 typedef입니다. 이 유형은 SceneLayer 값들의 OR 조합을 저장합니다.
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()를 호출하여 씬 배경을 그립니다. 배경이 그려지는 방식을 더 세밀하게 제어하려면, QGraphicsScene 의 서브클래스에서 drawBackground()을 재구현할 수 있습니다.
액세스 함수:
| QBrush | backgroundBrush() const |
| void | setBackgroundBrush(const QBrush &brush) |
bspTreeDepth : int
이 속성은 QGraphicsScene 의 BSP 인덱스 트리의 깊이를 저장합니다.
NoIndex 를 사용할 때는 이 속성이 아무런 영향을 미치지 않습니다.
이 값은 ` QGraphicsScene`의 BSP 트리의 깊이를 결정합니다. 이 깊이는 ` QGraphicsScene`의 성능과 메모리 사용량에 직접적인 영향을 미치며, 메모리 사용량은 트리의 깊이에 따라 기하급수적으로 증가합니다. 최적의 트리 깊이를 설정하면, ` QGraphicsScene `는 수천 개 또는 수백만 개의 아이템이 있는 장면에서도 아이템의 국소성을 즉시 파악할 수 있습니다. 이는 또한 렌더링 성능을 크게 향상시킵니다.
기본적으로 이 값은 0이며, 이 경우 Qt는 씬 내 아이템의 크기, 위치 및 개수를 바탕으로 적절한 기본 깊이를 추측합니다. 그러나 이러한 매개변수가 빈번하게 변경될 경우, QGraphicsScene 가 내부적으로 깊이를 재조정하는 과정에서 성능 저하가 발생할 수 있습니다. 이 속성을 설정하여 트리 깊이를 고정하면 잠재적인 성능 저하를 방지할 수 있습니다.
트리의 깊이와 장면 사각형의 크기는 장면 분할의 세분화 정도를 결정합니다. 각 장면 세그먼트의 크기는 다음 알고리즘에 따라 결정됩니다:
QSizeF segmentSize = sceneRect().size() / pow(2, depth - 1);각 세그먼트에 0개에서 10개 사이의 항목이 포함될 때 BSP 트리는 최적의 크기를 갖습니다.
액세스 함수:
| int | bspTreeDepth() const |
| void | setBspTreeDepth(int depth) |
itemIndexMethod도 참조하십시오 .
focusOnTouch : bool
이 속성은 항목이 터치 시작 이벤트를 수신할 때 포커스를 얻는지 여부를 나타냅니다.
일반적인 동작은 항목이 클릭될 때만 포커스를 전달하는 것입니다. 종종 터치패드를 탭하는 동작은 운영 체제에서 마우스 클릭과 동일하게 해석되어, 이에 대응하여 합성 클릭 이벤트가 생성됩니다. 하지만 적어도 macOS에서는 이 동작을 구성할 수 있습니다.
기본적으로 QGraphicsScene 는 트랙패드 등을 터치할 때도 포커스를 이전합니다. 운영 체제가 트랙패드 탭 시 합성 마우스 클릭을 생성하지 않도록 설정된 경우, 이는 예상치 못한 동작이 될 수 있습니다. 운영 체제가 트랙패드 탭 시 합성 마우스 클릭을 생성하는 경우, 터치 제스처 시작 시 포커스 이전은 불필요합니다.
focusOnTouch를 비활성화하면, QGraphicsScene 는 macOS에서 예상되는 대로 동작합니다.
기본값은 ` true`이며, 이는 기본 동작이 Qt 5.12 이전 버전과 동일함을 보장합니다. 터치 이벤트로 인해 포커스가 변경되는 것을 방지하려면 ` false `로 설정하십시오.
액세스 함수:
| bool | focusOnTouch() const |
| void | setFocusOnTouch(bool enabled) |
font : QFont
이 속성은 씬의 기본 글꼴을 지정합니다.
이 속성은 씬의 글꼴을 제공합니다. 씬 글꼴은 기본적으로 QApplication::font 에서 모든 항목을 가져오며, 이를 기본값으로 사용합니다.
씬의 글꼴이 setFont()를 통해 직접 변경되거나 애플리케이션 글꼴이 변경될 때 간접적으로 변경되는 경우, QGraphicsScene 는 먼저 자신에게 FontChange 이벤트를 전송한 다음, 씬 내의 모든 최상위 위젯 항목에 FontChange 이벤트를 전송합니다. 이 항목들은 자체 글꼴을 씬에 반영하여 응답하고, 자식 항목들에 이를 알립니다. 자식 항목들은 다시 그 자식 항목들에 알리고, 이 과정이 모든 위젯 항목의 글꼴이 업데이트될 때까지 반복됩니다.
씬의 글꼴을 변경하면(직접적으로 또는 QApplication::setFont()를 통해 간접적으로), 씬 전체의 다시 그리기가 자동으로 예약됩니다.
관련 함수:
| QFont | font() const |
| void | setFont(const QFont &font) |
QWidget::font, QApplication::setFont(), palette 및 style()도 참조하십시오 .
foregroundBrush : QBrush
이 속성은 씬의 전경 브러시를 저장합니다.
이 속성을 변경하여 장면의 전경을 다른 색상, 그라데이션 또는 텍스처로 설정할 수 있습니다.
전경은 항목들 뒤에(즉, 항목들 위에) 그려집니다. 기본 전경 브러시는 ' Qt::NoBrush '입니다(즉, 전경이 그려지지 않음).
예:
QGraphicsScene scene;
QGraphicsView view(&scene);
view.show();
// a white semi-transparent foreground
scene.setForegroundBrush(QColor(255, 255, 255, 127));
// a grid foreground
scene.setForegroundBrush(QBrush(Qt::lightGray, Qt::CrossPattern));QGraphicsScene::render()는 drawForeground()를 호출하여 씬의 전경을 그립니다. 전경이 그려지는 방식을 더 세밀하게 제어하려면, QGraphicsScene 의 서브클래스에서 drawForeground() 함수를 재구현할 수 있습니다.
액세스 함수:
| 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 이하의 값으로 설정하는 것이 좋습니다.
액세스 함수:
| qreal | minimumRenderSize() const |
| void | setMinimumRenderSize(qreal minSize) |
QStyleOptionGraphicsItem::levelOfDetailFromTransform()도 참조하십시오 .
palette : QPalette
이 속성은 씬의 기본 팔레트를 저장합니다.
이 속성은 씬의 팔레트를 제공합니다. 씬 팔레트는 기본적으로 QApplication::palette 를 사용하며, 해당 URL에서 모든 항목을 가져옵니다.
씬의 팔레트가 setPalette()를 통해 직접 변경되거나 애플리케이션 팔레트가 변경되어 간접적으로 변경될 경우, QGraphicsScene 는 먼저 자신에게 PaletteChange 이벤트를 전송한 다음, 씬 내의 모든 최상위 위젯 항목에 PaletteChange 이벤트를 전송합니다. 이 항목들은 자체 팔레트를 씬에 반영하여 응답하고, 자식 위젯에 알립니다. 자식 위젯은 다시 그 자식 위젯에 알리는 식으로, 모든 위젯 항목이 팔레트를 업데이트할 때까지 이 과정이 반복됩니다.
씬 팔레트를 변경하면(직접적으로 또는 QApplication::setPalette()를 통해 간접적으로), 씬 전체의 다시 그리기가 자동으로 예약됩니다.
관련 함수:
| QPalette | palette() const |
| void | setPalette(const QPalette &palette) |
QWidget::palette, QApplication::setPalette(), font 및 style()도 참조하십시오 .
sceneRect : QRectF
이 속성은 씬 사각형, 즉 씬의 경계 사각형을 나타냅니다
씬 사각형은 씬의 범위를 정의합니다. 이 속성은 주로 QGraphicsView 에서 뷰의 기본 스크롤 가능 영역을 결정하는 데 사용되며, QGraphicsScene 에서 항목 인덱싱을 관리하는 데 사용됩니다.
이 속성이 설정되지 않았거나 null 값의 QRectF 로 설정된 경우, sceneRect()는 장면이 생성된 이후 장면 내 모든 항목의 가장 큰 경계 사각형을 반환합니다(즉, 장면에 항목이 추가되거나 이동될 때 크기가 커지지만, 절대 줄어들지 않는 사각형).
액세스 함수:
| QRectF | sceneRect() const |
| void | setSceneRect(const QRectF &rect) |
| void | setSceneRect(qreal x, qreal y, qreal w, qreal h) |
width(), height() 및 QGraphicsView::sceneRect도 참조하십시오 .
stickyFocus : bool
이 속성은 장면 배경을 클릭했을 때 포커스가 해제되는지 여부를 결정합니다.
` QGraphicsScene `에서 `stickyFocus`가 `true`로 설정된 경우, 사용자가 씬의 배경이나 포커스를 받을 수 없는 항목을 클릭하더라도 포커스는 변경되지 않습니다. 그렇지 않은 경우, 포커스가 해제됩니다.
기본적으로 이 속성은 ` false`입니다.
포커스는 마우스 클릭에 반응하여 변경됩니다. ` QGraphicsScene `의 서브클래스에서 ` mousePressEvent()` 메서드를 재정의하여 사용자가 클릭한 위치에 따라 이 속성을 토글할 수 있습니다.
액세스 함수:
| 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)
sceneRect 를 씬 사각형으로 사용하여 QGraphicsScene 객체를 생성합니다. ` parent ` 매개변수는 ` QObject`의 생성자에 전달됩니다.
sceneRect도 참조하십시오 .
QGraphicsScene::QGraphicsScene(qreal x, qreal y, qreal width, qreal height, QObject *parent = nullptr)
(x, y)로 지정된 사각형과, 장면 사각형으로 주어진 width 및 height 를 사용하여 QGraphicsScene 객체를 생성합니다. parent 매개변수는 QObject 의 생성자에 전달됩니다.
sceneRect도 참조하십시오 .
[virtual noexcept] QGraphicsScene::~QGraphicsScene()
씬 객체를 파기하기 전에 씬 객체에서 모든 항목을 제거하고 삭제합니다. 씬 객체는 애플리케이션의 전역 씬 목록에서 제거되며, 관련된 모든 뷰에서도 제거됩니다.
QGraphicsItem *QGraphicsScene::activePanel() const
현재 활성화된 패널을 반환하며, 현재 활성화된 패널이 없는 경우 ` nullptr `를 반환합니다.
QGraphicsScene::setActivePanel()도 참조하십시오 .
QGraphicsWidget *QGraphicsScene::activeWindow() const
현재 활성화된 창을 반환하며, 현재 활성화된 창이 없는 경우 ` nullptr `를 반환합니다.
QGraphicsScene::setActiveWindow()도 참조하십시오 .
QGraphicsEllipseItem *QGraphicsScene::addEllipse(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush = QBrush())
타원 모양의 아이템을 생성하여 씬에 추가하고, 해당 아이템 포인터를 반환합니다. 타원의 지오메트리는 rect 로 정의되며, 펜과 브러시는 각각 pen 및 brush 로 초기화됩니다.
항목의 기하 구조는 항목 좌표계로 제공되며, 위치는 (0, 0)으로 초기화됩니다.
항목이 표시되어 있는 경우(즉, QGraphicsItem::isVisible()가 true 를 반환하는 경우), 제어권이 이벤트 루프로 돌아오면 QGraphicsScene 는 changed()를 발생시킵니다.
addLine(), addPath(), addPixmap(), addRect(), addText(), addItem(), addWidget()도 참조하십시오 .
QGraphicsEllipseItem *QGraphicsScene::addEllipse(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush())
이 편의 함수는 addEllipse(QRectF(x, y, w, h), pen, brush)를 호출하는 것과 동일합니다.
void QGraphicsScene::addItem(QGraphicsItem *item)
item 와 그 모든 자식 요소를 이 씬에 추가하거나 이동합니다. 이 씬은 item 의 소유권을 갖게 됩니다.
해당 항목이 표시되어 있는 경우(즉, ` QGraphicsItem::isVisible()`가 `true`를 반환하는 경우), ` QGraphicsScene `는 제어권이 이벤트 루프로 돌아오면 ` changed()`를 발생시킵니다.
항목이 이미 다른 씬에 있는 경우, 먼저 기존 씬에서 제거된 후 이 씬에 최상위 레벨로 추가됩니다.
QGraphicsScene 는 아이템이 씬에 추가되는 동안 item 에 ItemSceneChange 알림을 보냅니다. 아이템이 현재 어떤 씬에도 속해 있지 않은 경우, 알림은 한 번만 전송됩니다. 이미 씬에 속해 있는 경우(즉, 이 씬으로 이동되는 경우), QGraphicsScene 는 아이템이 이전 씬에서 제거될 때 추가 알림을 보냅니다.
항목이 패널이고, 해당 장면이 활성 상태이며, 그 장면에 활성 패널이 없는 경우, 해당 항목이 활성화됩니다.
removeItem(), addEllipse(), addLine(), addPath(), addPixmap(), addRect(), addText(), addWidget(), Sorting도 참조하십시오 .
QGraphicsLineItem *QGraphicsScene::addLine(const QLineF &line, const QPen &pen = QPen())
씬에 선 항목을 생성하여 추가하고, 해당 항목 포인터를 반환합니다. 선의 지오메트리는 ` line`로 정의되며, 펜은 ` pen`로 초기화됩니다.
항목의 지오메트리는 항목 좌표계로 제공되며, 위치는 (0, 0)으로 초기화됩니다.
항목이 표시된 상태인 경우(즉, ` QGraphicsItem::isVisible()`가 ` true`를 반환하는 경우), ` QGraphicsScene `는 제어권이 이벤트 루프로 돌아오면 ` changed()`를 발생시킵니다.
addEllipse(), addPath(), addPixmap(), addRect(), addText(), addItem(), addWidget()도 참조하십시오 .
QGraphicsLineItem *QGraphicsScene::addLine(qreal x1, qreal y1, qreal x2, qreal y2, const QPen &pen = QPen())
이 편의 함수는 addLine(QLineF(x1, y1, x2, y2), pen)를 호출하는 것과 동일합니다.
QGraphicsPathItem *QGraphicsScene::addPath(const QPainterPath &path, const QPen &pen = QPen(), const QBrush &brush = QBrush())
경로 항목을 생성하여 씬에 추가하고, 해당 항목 포인터를 반환합니다. 경로의 지오메트리는 path 로 정의되며, 펜과 브러시는 각각 pen 와 brush 로 초기화됩니다.
이 항목의 지오메트리는 항목 좌표계로 제공되며, 위치는 (0, 0)으로 초기화됩니다.
항목이 표시되어 있는 경우(즉, QGraphicsItem::isVisible()가 true 를 반환하는 경우), QGraphicsScene 는 제어권이 이벤트 루프로 돌아오면 changed()를 발산합니다.
addEllipse(), addLine(), addPixmap(), addRect(), addText(), addItem(), addWidget()도 참조하십시오 .
QGraphicsPixmapItem *QGraphicsScene::addPixmap(const QPixmap &pixmap)
픽스맵 아이템을 생성하여 씬에 추가하고, 해당 아이템 포인터를 반환합니다. 픽스맵은 ` pixmap`로 정의됩니다.
이 항목의 기하학적 정보는 항목 좌표계로 제공되며, 위치는 (0, 0)으로 초기화됩니다.
항목이 표시된 상태인 경우(즉, ` QGraphicsItem::isVisible()`가 ` true`을 반환하는 경우), ` QGraphicsScene `는 제어권이 이벤트 루프로 돌아오면 ` changed()`를 발생시킵니다.
addEllipse(), addLine(), addPath(), addRect(), addText(), addItem(), addWidget()도 참조하십시오 .
QGraphicsPolygonItem *QGraphicsScene::addPolygon(const QPolygonF &polygon, const QPen &pen = QPen(), const QBrush &brush = QBrush())
장면에 다각형 항목을 생성하여 추가하고, 해당 항목 포인터를 반환합니다. 다각형은 ` polygon`로 정의되며, 펜과 브러시는 각각 ` pen `와 ` brush`로 초기화됩니다.
이 항목의 기하 구조는 항목 좌표계로 제공되며, 위치는 (0, 0)으로 초기화됩니다.
항목이 표시되어 있는 경우(즉, ` QGraphicsItem::isVisible()`가 ` true`을 반환하는 경우), 제어권이 이벤트 루프로 돌아오면 ` QGraphicsScene `는 ` changed()`를 발생시킵니다.
addEllipse(), addLine(), addPath(), addRect(), addText(), addItem() 및 addWidget()도 참조하십시오 .
QGraphicsRectItem *QGraphicsScene::addRect(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush = QBrush())
사각형 아이템을 생성하여 씬에 추가하고, 해당 아이템 포인터를 반환합니다. 사각형의 지오메트리는 ` rect`로 정의되며, 펜과 브러시는 각각 ` pen ` 및 ` brush`로 초기화됩니다.
아이템의 지오메트리는 아이템 좌표계로 제공되며, 위치는 (0, 0)으로 초기화됩니다. 예를 들어, QRect(50, 50, 100, 100)이 추가되면, 그 왼쪽 상단 모서리는 항목 좌표계의 원점을 기준으로 (50, 50)에 위치하게 됩니다.
항목이 표시되어 있는 경우(즉, QGraphicsItem::isVisible()가 true 를 반환하는 경우), 제어권이 이벤트 루프로 돌아오면 QGraphicsScene 는 changed()를 한 번 발생시킵니다.
addEllipse(), addLine(), addPixmap(), addText(), addItem(), addWidget()도 참조하십시오 .
QGraphicsRectItem *QGraphicsScene::addRect(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush())
이 편의 함수는 addRect(QRectF(x, y, w, h), pen, brush)를 호출하는 것과 동일합니다.
QGraphicsSimpleTextItem *QGraphicsScene::addSimpleText(const QString &text, const QFont &font = QFont())
QGraphicsSimpleTextItem 를 생성하여 씬에 추가하고, 해당 아이템 포인터를 반환합니다. 텍스트 문자열은 text 로 초기화되며, 글꼴은 font 로 초기화됩니다.
아이템의 위치는 (0, 0)으로 초기화됩니다.
항목이 표시된 상태인 경우(즉, ` QGraphicsItem::isVisible()`가 ` true`를 반환하는 경우), ` QGraphicsScene `는 제어권이 이벤트 루프로 돌아오면 ` changed()`를 발생시킵니다.
addEllipse(), addLine(), addPixmap(), 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(), addRect(), addItem(), addWidget()도 참조하십시오 .
QGraphicsProxyWidget *QGraphicsScene::addWidget(QWidget *widget, Qt::WindowFlags wFlags = Qt::WindowFlags())
widget 에 대한 새로운 QGraphicsProxyWidget 를 생성하고, 이를 씬에 추가한 다음, 프록시에 대한 포인터를 반환합니다. wFlags 는 임베딩 프록시 위젯에 대한 기본 창 플래그를 설정합니다.
항목의 위치는 (0, 0)으로 초기화됩니다.
항목이 표시된 상태인 경우(즉, QGraphicsItem::isVisible()이 true 를 반환하는 경우), QGraphicsScene 는 제어권이 이벤트 루프로 돌아오면 changed()을 한 번 발생시킵니다.
Qt::WA_PaintOnScreen 위젯 속성이 설정된 위젯과 외부 애플리케이션 또는 컨트롤러를 감싸는 위젯은 지원되지 않는다는 점에 유의하십시오. 예시로는 QOpenGLWidget 및 QAxWidget이 있습니다.
addEllipse(), addLine(), 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()
씬에서 모든 항목을 제거하고 삭제하지만, 그 외에는 씬의 상태를 그대로 유지합니다.
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() 및 Sorting도 참조하십시오 .
[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(QEvent *e)를 재구현합니다.
event 이벤트를 처리하고, 해당 이벤트 핸들러로 전달합니다.
이 함수는 편의용 이벤트 핸들러를 호출하는 것 외에도, 마우스 그래버 항목이 없는 경우 마우스 이동 이벤트를 호버 이벤트로 변환하는 역할을 담당합니다. 호버 이벤트는 항목에 직접 전달되며, 이에 대한 편의 함수는 없습니다.
QWidget 와 달리, QGraphicsScene 에는 enterEvent() 및 leaveEvent()와 같은 편의 함수가 없습니다. 대신 이 함수를 사용하여 해당 이벤트를 가져오십시오.
event 가 인식 및 처리된 경우 true 을 반환하고, 그렇지 않은 경우 false 을 반환합니다.
contextMenuEvent(), keyPressEvent(), keyReleaseEvent(), mousePressEvent(), mouseMoveEvent(), mouseReleaseEvent(), mouseDoubleClickEvent(), focusInEvent() 및 focusOutEvent()도 참조하십시오 .
[override virtual protected] bool QGraphicsScene::eventFilter(QObject *watched, QEvent *event)
QObject::eventFilter(QObject *watched, QEvent *event)를 재구현합니다.
QGraphicsScene QApplication 의 이벤트를 필터링하여 팔레트 및 글꼴 변경을 감지합니다.
[virtual protected] void QGraphicsScene::focusInEvent(QFocusEvent *focusEvent)
focusEvent 이벤트에 대한 이 이벤트 핸들러는 하위 클래스에서 재구현하여 이벤트 발생 시 포커스를 받을 수 있습니다.
기본 구현은 씬에 포커스를 설정한 다음, 마지막으로 포커스가 설정되었던 항목에 포커스를 설정합니다.
QGraphicsItem::focusOutEvent()도 참조하십시오 .
QGraphicsItem *QGraphicsScene::focusItem() const
씬이 활성 상태일 때, 이 함수는 씬의 현재 포커스 항목을 반환하며, 현재 포커스를 가진 항목이 없는 경우에는 ` nullptr `를 반환합니다. 씬이 비활성 상태일 때, 이 함수는 씬이 활성 상태가 되었을 때 입력 포커스를 받게 될 항목을 반환합니다.
씬이 키 이벤트를 수신하면 포커스 항목이 키보드 입력을 받게 됩니다.
setFocusItem(), QGraphicsItem::hasFocus(), isActive()도 참조하십시오 .
[signal] void QGraphicsScene::focusItemChanged(QGraphicsItem *newFocusItem, QGraphicsItem *oldFocusItem, Qt::FocusReason reason)
이 신호는 QGraphicsScene 에서 장면 내 포커스가 변경될 때마다(즉, 항목이 입력 포커스를 얻거나 잃을 때, 또는 포커스가 한 항목에서 다른 항목으로 이동할 때) 발생합니다. 다른 항목이 입력 포커스를 획득하는 시점을 추적해야 할 경우 이 신호에 연결할 수 있습니다. 이 신호는 가상 키보드, 입력 방식 및 커서 항목을 구현할 때 특히 유용합니다.
oldFocusItem 는 이전에 포커스를 가졌던 항목에 대한 포인터이며, 신호가 발송되기 전에 포커스를 가진 항목이 없으면 0입니다. ` newFocusItem `는 입력 포커스를 얻은 항목에 대한 포인터이며, 포커스를 잃은 경우에는 ` nullptr `입니다. ` reason 는 포커스 변경의 원인입니다(예: 입력 필드가 포커스를 가지고 있는 상태에서 씬이 비활성화된 경우, oldFocusItem 는 해당 입력 필드 항목을 가리키고, newFocusItem 는 nullptr 가 되며, reason 는 Qt::ActiveWindowFocusReason 가 됩니다).
[virtual protected slot] bool QGraphicsScene::focusNextPrevChild(bool next)
Tab 및 Shift+Tab 키 입력에 따라 키보드 포커스를 줄 새로운 위젯을 찾으며, 새로운 위젯을 찾으면 ` true `를 반환하고, 찾을 수 없으면 `false`를 반환합니다. ` next `가 `true`인 경우 이 함수는 앞으로 검색하고, ` next `가 `false`인 경우 뒤로 검색합니다.
QGraphicsScene 의 서브클래스에서 이 함수를 재구현하여, 장면 내에서 탭 포커스가 전달되는 방식을 세밀하게 제어할 수 있습니다. 기본 구현은 QGraphicsWidget::setTabOrder()에 의해 정의된 탭 포커스 체인을 기반으로 합니다.
[virtual protected] void QGraphicsScene::focusOutEvent(QFocusEvent *focusEvent)
focusEvent 이벤트에 대한 이 이벤트 핸들러는, 포커스가 벗어나는 이벤트를 수신하기 위해 하위 클래스에서 재구현할 수 있습니다.
기본 구현은 모든 포커스 항목에서 포커스를 제거한 다음, 씬에서 포커스를 제거합니다.
QGraphicsItem::focusInEvent()도 참조하십시오 .
bool QGraphicsScene::hasFocus() const
씬이 포커스를 가지고 있으면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다. 씬이 포커스를 가지고 있는 경우, QKeyEvent 에서 발생하는 키 이벤트를 포커스를 가진 항목으로 전달합니다.
setFocus() 및 setFocusItem()도 참조하십시오 .
qreal QGraphicsScene::height() const
이 편의 함수는 sceneRect().height() 을 호출하는 것과 동일합니다.
width()도 참조하십시오 .
[virtual protected] void QGraphicsScene::helpEvent(QGraphicsSceneHelpEvent *helpEvent)
helpEvent 이벤트에 대한 이 이벤트 핸들러는 하위 클래스에서 재구현하여 도움말 이벤트를 수신할 수 있습니다. 이 이벤트들은 QEvent::ToolTip 유형이며, 툴팁이 요청될 때 생성됩니다.
기본 구현은 마우스 커서 위치에서 가장 위에 표시된 항목, 즉 z-값이 가장 높은 항목의 툴팁을 표시합니다. 툴팁이 설정된 항목이 없는 경우, 이 함수는 아무 작업도 수행하지 않습니다.
참고: 이 함수가 어떤 항목을 표시된 것으로 간주하는지에 대한 정의는 items()을 참조하십시오.
QGraphicsItem::toolTip() 및 QGraphicsSceneHelpEvent도 참조하십시오 .
[virtual protected] void QGraphicsScene::inputMethodEvent(QInputMethodEvent *event)
event 이벤트에 대한 이 이벤트 핸들러는, 서브클래스에서 재구현하여 씬에 대한 입력 방식 이벤트를 수신할 수 있습니다.
기본 구현은 이벤트를 focusItem()로 전달합니다. 현재 포커스가 설정된 항목이 없거나, 현재 포커스가 설정된 항목이 입력 메서드를 허용하지 않는 경우, 이 함수는 아무 작업도 수행하지 않습니다.
QGraphicsItem::inputMethodEvent()도 참조하십시오 .
[virtual] QVariant QGraphicsScene::inputMethodQuery(Qt::InputMethodQuery query) const
이 메서드는 입력 방식에서 주변 텍스트 지원 및 재변환과 같은 복잡한 입력 방식 작업을 지원하기 위해 장면의 일련의 속성을 조회하는 데 사용됩니다.
query 매개변수는 어떤 속성을 조회할지 지정합니다.
QWidget::inputMethodQuery()도 참조하십시오 .
[slot] void QGraphicsScene::invalidate(const QRectF &rect = QRectF(), QGraphicsScene::SceneLayers layers = AllLayers)
씬의 ` rect `에 있는 ` layers `을 무효화하고 다시 그리도록 예약합니다. ` 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 참조). BackgroundLayer 레이어를 제외한 다른 레이어가 전달될 경우, 이 함수는 update()을 호출하는 것과 동일합니다.
참고: 이 슬롯은 오버로드되어 있습니다. 이 슬롯에 연결하려면:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
graphicsScene, qOverload(&QGraphicsScene::invalidate));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
graphicsScene, [receiver = graphicsScene](const QRectF &rect, QGraphicsScene::SceneLayers layers) { receiver->invalidate(rect, layers); }); QGraphicsView::resetCachedContent()도 참조하십시오 .
void QGraphicsScene::invalidate(qreal x, qreal y, qreal w, qreal h, QGraphicsScene::SceneLayers layers = AllLayers)
이 편의 함수는 invalidate(QRectF(x, y, w, h), layers)를 호출하는 것과 동일합니다.
이것은 오버로드된 함수입니다.
bool QGraphicsScene::isActive() const
씬이 활성 상태인 경우(예: 활성 상태인 QGraphicsView 중 적어도 하나가 해당 씬을 보고 있는 경우) true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.
QGraphicsItem::isActive() 및 QWidget::isActiveWindow()도 참조하십시오 .
QGraphicsItem *QGraphicsScene::itemAt(const QPointF &position, const QTransform &deviceTransform) const
지정된 position 위치에서 가장 위에 있는 표시된 항목을 반환하며, 해당 위치에 항목이 없는 경우에는 nullptr 를 반환합니다.
deviceTransform 는 뷰에 적용되는 변환이며, 씬에 변환을 무시하는 항목이 포함된 경우 반드시 제공해야 합니다.
참고: 이 함수에서 어떤 항목을 표시된 것으로 간주하는지에 대한 정의는 items()을 참조하십시오.
items(), collidingItems(), Sorting도 참조하십시오 .
QGraphicsItem *QGraphicsScene::itemAt(qreal x, qreal y, const QTransform &deviceTransform) const
(x, y)로 지정된 위치에서 가장 상단에 표시된 항목을 반환하며, 해당 위치에 항목이 없는 경우에는 nullptr 를 반환합니다.
deviceTransform 는 뷰에 적용되는 변환이며, 씬에 변환을 무시하는 항목이 포함된 경우 이 매개변수를 반드시 제공해야 합니다.
이 편의 함수는 itemAt(QPointF(x, y), deviceTransform) 를 호출하는 것과 동일합니다.
참고: 이 함수에서 어떤 아이템이 표시되는 것으로 간주되는지에 대한 정의는 items()을 참조하십시오.
이 함수는 오버로드된 함수입니다.
QList<QGraphicsItem *> QGraphicsScene::items(Qt::SortOrder order = Qt::DescendingOrder) const
씬에 있는 모든 항목의 정렬된 목록을 반환합니다. 중첩 순서는 ` order `에 의해 결정됩니다.
addItem(), removeItem() 및 Sorting도 참조하십시오 .
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 를 사용하여 정렬된 목록 형태로 반환합니다. 이 경우, “표시 가능(visible)”이란 다음 조건을 모두 충족하는 항목을 의미합니다: isVisible()이 true 를 반환하고, effectiveOpacity()가 0.0(완전 투명)보다 큰 값을 반환하며, 부모 항목에 의해 잘리지 않는 항목입니다.
mode 의 기본값은 Qt::IntersectsItemShape 입니다. 즉, 정확한 모양이 pos 와 교차하는 모든 항목이 반환됩니다.
deviceTransform 는 뷰에 적용되는 변환이며, 씬에 변환을 무시하는 항목이 포함된 경우 이 변환을 제공해야 합니다.
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 는 뷰에 적용되는 변환이며, 씬에 변환을 무시하는 항목이 포함된 경우 이 변환을 제공해야 합니다.
이 함수는 오버로드된 함수입니다.
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 는 뷰에 적용되는 변환이며, 씬에 변환을 무시하는 항목이 포함된 경우 이 매개변수를 제공해야 합니다.
이 함수는 오버로드된 함수입니다.
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 는 뷰에 적용되는 변환이며, 씬에 변환을 무시하는 항목이 포함된 경우 이 값을 제공해야 합니다.
이 함수는 오버로드된 함수입니다.
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 를 사용하여 정렬된 목록으로 반환합니다. 이 경우, "visible"은 isVisible()이 ` true`을 반환하고, effectiveOpacity()가 0.0(완전 투명)보다 큰 값을 반환하며, 부모 항목에 의해 잘리지 않는 항목을 의미합니다.
deviceTransform 는 뷰에 적용되는 변환이며, 씬에 변환을 무시하는 항목이 포함된 경우 이 변환을 제공해야 합니다.
이 함수는 오버로드된 함수입니다.
QRectF QGraphicsScene::itemsBoundingRect() const
씬에 있는 모든 아이템의 바운딩 박스를 계산하여 반환합니다. 이 함수는 모든 아이템을 순회하는 방식으로 작동하므로, 씬이 클 경우 처리 속도가 느려질 수 있습니다.
sceneRect()도 참조하십시오 .
[virtual protected] void QGraphicsScene::keyPressEvent(QKeyEvent *keyEvent)
keyEvent 이벤트에 대한 이 이벤트 핸들러는 키 입력 이벤트를 수신하기 위해 하위 클래스에서 재구현할 수 있습니다. 기본 구현은 이벤트를 현재 포커스가 있는 항목으로 전달합니다.
QGraphicsItem::keyPressEvent() 및 focusItem()도 참조하십시오 .
[virtual protected] void QGraphicsScene::keyReleaseEvent(QKeyEvent *keyEvent)
keyEvent 이벤트에 대한 이 이벤트 핸들러는 키 해제 이벤트를 수신하기 위해 하위 클래스에서 재구현할 수 있습니다. 기본 구현은 이벤트를 현재 포커스 대상 항목으로 전달합니다.
QGraphicsItem::keyReleaseEvent() 및 focusItem()도 참조하십시오 .
[virtual protected] void QGraphicsScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *mouseEvent)
mouseEvent 이벤트에 대한 이 이벤트 핸들러는 하위 클래스에서 재구현하여 씬에 대한 마우스 더블 클릭 이벤트를 수신할 수 있습니다.
누군가 씬을 더블 클릭하면, 씬은 먼저 마우스 누르기 이벤트를 수신한 다음, 릴리스 이벤트(즉, 클릭)를 수신하고, 그 다음 더블 클릭 이벤트를 수신한 뒤, 마지막으로 릴리스 이벤트를 수신합니다. 더블 클릭 이벤트가 첫 번째 누름 및 떼기 이벤트를 수신한 항목과 다른 항목으로 전달되는 경우, 이 이벤트는 누름 이벤트로 전달됩니다. 그러나 이 경우 트리플 클릭 이벤트는 더블 클릭 이벤트로 전달되지 않습니다.
기본 구현은 mousePressEvent()과 유사합니다.
참고: 이 함수에서 어떤 항목을 가시적인 것으로 간주하는지에 대한 정의는 items()을 참조하십시오.
QGraphicsItem::mousePressEvent(), QGraphicsItem::mouseMoveEvent(), QGraphicsItem::mouseReleaseEvent(), QGraphicsItem::setAcceptedMouseButtons()도 참조하십시오 .
QGraphicsItem *QGraphicsScene::mouseGrabberItem() const
현재 마우스 그라버 항목을 반환하거나, 현재 마우스를 그라브하고 있는 항목이 없는 경우 ` nullptr `를 반환합니다. 마우스 그라버 항목이란 씬으로 전송되는 모든 마우스 이벤트를 수신하는 항목을 말합니다.
아이템은 마우스 누름 이벤트를 수신하고 수락하면 마우스 그래버가 되며, 다음 이벤트 중 하나가 발생할 때까지 마우스 그래버 상태를 유지합니다:
- 다른 버튼이 눌려 있지 않은 상태에서 해당 아이템이 마우스 릴리스 이벤트를 수신하면, 마우스 그랩 상태를 잃게 됩니다.
- 아이템이 보이지 않게 되거나(예: 누군가가 `
item->setVisible(false)`를 호출한 경우), 비활성화되면(예: 누군가가 `item->setEnabled(false)`를 호출한 경우), 마우스 그랩 상태가 해제됩니다. - 항목이 씬에서 제거되면 마우스 그랩을 잃게 됩니다.
항목이 마우스 그랩을 잃게 되면, 새로운 항목이 마우스를 그랩할 때까지(즉, 새로운 항목이 마우스 누름 이벤트를 수신할 때까지) 씬은 모든 마우스 이벤트를 무시합니다.
[virtual protected] void QGraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
mouseEvent 이벤트에 대한 이 이벤트 핸들러는 하위 클래스에서 재구현하여 씬의 마우스 이동 이벤트를 수신할 수 있습니다.
기본 구현은 마우스 그래버 상태에 따라 달라집니다. 마우스 그래버 항목이 있는 경우, 이벤트는 마우스 그래버로 전송됩니다. 현재 위치에서 호버 이벤트를 수신하는 항목이 있는 경우, 이벤트는 호버 이벤트로 변환되어 수신되며, 그렇지 않은 경우 무시됩니다.
QGraphicsItem::mousePressEvent(), QGraphicsItem::mouseReleaseEvent(), QGraphicsItem::mouseDoubleClickEvent(), QGraphicsItem::setAcceptedMouseButtons()도 참조하십시오 .
[virtual protected] void QGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
mouseEvent 이벤트에 대한 이 이벤트 핸들러는 하위 클래스에서 재구현하여 씬의 마우스 클릭 이벤트를 수신할 수 있습니다.
기본 구현은 씬의 상태에 따라 달라집니다. 마우스 그라버 항목이 있는 경우, 이벤트는 마우스 그라버로 전송됩니다. 그렇지 않은 경우, 이벤트에서 지정한 씬 위치에서 마우스 이벤트를 수락하는 가장 위에 표시된 항목으로 이벤트가 전달되며, 해당 항목은 즉시 마우스 그라버 항목이 됩니다.
씬의 지정된 위치에 항목이 없는 경우, 선택 영역이 초기화되고, 포커스가 설정된 항목은 입력 포커스를 잃게 되며, 이벤트는 무시됩니다.
참고: 이 함수에서 어떤 항목을 가시적인 것으로 간주하는지에 대한 정의는 items()을 참조하십시오.
QGraphicsItem::mousePressEvent() 및 QGraphicsItem::setAcceptedMouseButtons()도 참조하십시오 .
[virtual protected] void QGraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
mouseEvent 이벤트에 대한 이 이벤트 핸들러는 하위 클래스에서 재구현하여 씬의 마우스 해제 이벤트를 수신할 수 있습니다.
기본 구현은 마우스 그래버 상태에 따라 달라집니다. 마우스 그래버가 없는 경우, 이 이벤트는 무시됩니다. 반면, 마우스 그래버 항목이 있는 경우, 이 이벤트는 마우스 그래버로 전송됩니다. 이 마우스 릴리스가 마우스에서 마지막으로 눌렸던 버튼을 나타내는 경우, 마우스 그래버 항목은 마우스 그래브 상태를 해제합니다.
QGraphicsItem::mousePressEvent(), QGraphicsItem::mouseMoveEvent(), QGraphicsItem::mouseDoubleClickEvent(), QGraphicsItem::setAcceptedMouseButtons()도 참조하십시오 .
void QGraphicsScene::removeItem(QGraphicsItem *item)
item 항목과 그 모든 자식 요소를 씬에서 제거합니다. item 의 소유권은 호출자에게 이전됩니다(즉, QGraphicsScene 가 소멸될 때 더 이상 item 를 삭제하지 않습니다).
addItem()도 참조하십시오 .
void QGraphicsScene::render(QPainter *painter, const QRectF &target = QRectF(), const QRectF &source = QRectF(), Qt::AspectRatioMode aspectRatioMode = Qt::KeepAspectRatio)
painter 을 사용하여 씬의 source 사각형을 target 로 렌더링합니다. 이 함수는 QImage 와 같은 페인트 장치에 씬의 내용을 캡처하거나(예: 스크린샷 촬영), QPrinter를 사용하여 인쇄할 때 유용합니다. 예를 들어:
QGraphicsScene scene;
scene.addItem(someItem);
//...
QPrinter printer(QPrinter::HighResolution);
printer.setPageSize(QPageSize::A4);
QPainter painter(&printer);
scene.render(&painter);source 가 null rect인 경우, 이 함수는 sceneRect()을 사용하여 렌더링할 내용을 결정합니다. target 가 null rect인 경우, painter 의 페인트 장치 치수가 사용됩니다.
소스 사각형의 내용은 대상 사각형에 맞도록 aspectRatioMode 에 따라 변환됩니다. 기본적으로 종횡비는 유지되며, source 는 target 에 맞도록 크기가 조정됩니다.
QGraphicsView::render()도 참조하십시오 .
[signal] void QGraphicsScene::sceneRectChanged(const QRectF &rect)
이 신호는 장면 사각형(scene 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()는 작업이 완료된 후 한 번만 발생합니다(각 항목마다 한 번씩 발생하는 것이 아닙니다).
setSelectionArea(), selectedItems(), QGraphicsItem::setSelected()도 참조하십시오 .
bool QGraphicsScene::sendEvent(QGraphicsItem *item, QEvent *event)
가능한 이벤트 필터를 통해 item 항목에 event 이벤트를 전송합니다.
이 이벤트는 항목이 활성화된 경우에만 전송됩니다.
이벤트가 필터링되었거나 항목이 비활성화된 경우 false 를 반환합니다. 그렇지 않은 경우 이벤트 핸들러에서 반환된 값을 반환합니다.
QGraphicsItem::sceneEvent() 및 QGraphicsItem::sceneEventFilter()도 참조하십시오 .
void QGraphicsScene::setActivePanel(QGraphicsItem *item)
item 를 활성화합니다. 이 값은 반드시 이 씬에 포함된 항목이어야 합니다. 또한 item 에 0을 전달할 수도 있으며, 이 경우 QGraphicsScene 는 현재 활성화된 패널을 모두 비활성화합니다.
현재 장면이 비활성 상태인 경우, item 는 장면이 활성화될 때까지 비활성 상태로 유지됩니다(또는 item 가 nullptr 인 경우, 어떤 항목도 활성화되지 않습니다).
activePanel(), isActive(), QGraphicsItem::isActive()도 참조하십시오 .
void QGraphicsScene::setActiveWindow(QGraphicsWidget *widget)
widget 를 활성화합니다. 이 객체는 반드시 이 씬에 있는 위젯이어야 합니다. 또한 widget 에 0을 전달할 수도 있으며, 이 경우 QGraphicsScene 가 현재 활성화된 창을 모두 비활성화합니다.
activeWindow() 및 QGraphicsWidget::isActiveWindow()도 참조하십시오 .
void QGraphicsScene::setFocus(Qt::FocusReason focusReason = Qt::OtherFocusReason)
QFocusEvent 를 씬에 전송하고, focusReason 를 이유로 전달하여 씬에 포커스를 설정합니다. 항목에 포커스가 있는 상태에서 씬이 일시적으로 포커스를 잃었다가 다시 포커스를 되찾는 경우, 마지막으로 포커스를 가졌던 항목이 focusReason 를 이유로 포커스를 받게 됩니다.
씬이 이미 포커스를 가지고 있는 경우, 이 함수는 아무 작업도 수행하지 않습니다.
hasFocus(), clearFocus(), setFocusItem()도 참조하십시오 .
void QGraphicsScene::setFocusItem(QGraphicsItem *item, Qt::FocusReason focusReason = Qt::OtherFocusReason)
이전 포커스가 설정되어 있을 수 있는 항목에서 포커스를 제거한 후, item 를 장면의 포커스 항목으로 설정하고, 포커스 사유로 focusReason 를 지정합니다.
item 이 nullptr 인 경우, 또는 해당 항목이 포커스를 받을 수 없는 경우(즉, QGraphicsItem::ItemIsFocusable 플래그가 활성화되어 있지 않은 경우), 혹은 보이지 않거나 활성화되어 있지 않은 경우, 이 함수는 이전 포커스 항목에서 포커스만 제거합니다.
item이 nullptr 가 아니고, 현재 씬에 포커스가 없는 경우(즉, hasFocus()가 false 를 반환하는 경우), 이 함수는 자동으로 setFocus()를 호출합니다.
focusItem(), hasFocus() 및 setFocus()도 참조하십시오 .
void QGraphicsScene::setSelectionArea(const QPainterPath &path, const QTransform &deviceTransform)
선택 영역을 path 로 설정합니다. 이 영역 내의 모든 항목은 즉시 선택되고, 영역 외부의 모든 항목은 선택 해제됩니다. selectedItems()를 호출하여 선택된 모든 항목의 목록을 가져올 수 있습니다.
deviceTransform 는 뷰에 적용되는 변환이며, 씬에 변환을 무시하는 항목이 포함된 경우 이 변환을 제공해야 합니다.
항목을 선택하려면 해당 항목이 선택 가능 (QGraphicsItem::ItemIsSelectable)으로 표시되어 있어야 합니다.
clearSelection() 및 selectionArea()도 참조하십시오 .
void QGraphicsScene::setSelectionArea(const QPainterPath &path, Qt::ItemSelectionOperation selectionOperation = Qt::ReplaceSelection, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, const QTransform &deviceTransform = QTransform())
mode 를 사용하여 항목이 선택 영역에 포함되는지 여부를 판단하고, 선택 영역을 path 로 설정합니다.
deviceTransform 는 뷰에 적용되는 변환이며, 씬에 변환을 무시하는 항목이 포함된 경우 반드시 지정해야 합니다.
selectionOperation 현재 선택된 항목에 대해 수행할 작업을 결정합니다.
이 함수는 오버로드된 함수입니다.
clearSelection() 및 selectionArea()도 참조하십시오 .
void QGraphicsScene::setStyle(QStyle *style)
씬의 스타일을 ` style`로 설정하거나 변경하고, 해당 스타일을 이 씬에 다시 연결합니다. 이전에 할당된 스타일은 모두 삭제됩니다. 씬의 스타일은 기본적으로 ` QApplication::style()`로 설정되며, 씬 내의 모든 ` QGraphicsWidget ` 항목에 대한 기본값으로 사용됩니다.
이 함수를 직접 호출하거나 QApplication::setStyle()를 간접적으로 호출하여 스타일을 변경하면, 스타일이 명시적으로 할당되지 않은 장면 내의 모든 위젯에 대한 스타일이 자동으로 업데이트됩니다.
style 가 nullptr 인 경우, QGraphicsScene 는 QApplication::style()으로 되돌아갑니다.
style()도 참조하십시오 .
QStyle *QGraphicsScene::style() const
씬의 스타일을 반환하며, 씬에 스타일이 명시적으로 지정되지 않은 경우 QApplication::style()과 동일한 결과를 반환합니다.
setStyle()도 참조하십시오 .
[slot] void QGraphicsScene::update(const QRectF &rect = QRectF())
씬 내의 rect 영역에 대한 재렌더링을 예약합니다.
참고: 이 슬롯은 오버로드되어 있습니다. 이 슬롯에 연결하려면:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
graphicsScene, qOverload(&QGraphicsScene::update));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
graphicsScene, [receiver = graphicsScene](const QRectF &rect) { receiver->update(rect); }); sceneRect() 및 changed()도 참조하십시오 .
void QGraphicsScene::update(qreal x, qreal y, qreal w, qreal h)
이 함수는 update(QRectF(x, y, w, h));를 호출하는 것과 동일합니다.
이것은 오버로드된 함수입니다.
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()도 참조하십시오 .
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.