QGraphicsScene Class

QGraphicsSceneクラスは、多数の2Dグラフィカル・アイテムを管理するためのサーフェスを提供します。詳細...

Header: #include <QGraphicsScene>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Inherits: 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> &region)
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)

詳細説明

このクラスは QGraphicsItems のコンテナとして機能します。このクラスは、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 (Binary Space Partitioning) ツリーが使用されます。このアルゴリズムは、ほとんどのアイテムが静止したまま (つまり、動き回らない) の大規模なシーンに適しています。このインデックスを無効にするには、setItemIndexMethod() を呼び出します。利用可能なインデックス アルゴリズムの詳細については、itemIndexMethod プロパティを参照してください。

シーンの外接矩形は、setSceneRect() を呼び出すことで設定されます。アイテムはシーン上の任意の位置に配置でき、シーンのサイズはデフォルトで無制限です。シーンの矩形は、シーンのアイテムインデックスを維持する、内部的な帳簿管理のためだけに使用されます。シーン矩形が設定されていない場合、QGraphicsScene は、itemsBoundingRect() によって返されるすべてのアイテムの境界領域をシーン矩形として使用します。ただし、itemsBoundingRect() は、シーン上のすべてのアイテムの位置情報を収集して動作するため、比較的時間のかかる関数です。このため、大きなシーンで操作する場合は、常にシーン矩形を設定する必要があります。

QGraphicsSceneの最大の強みは、アイテムの位置を効率的に決定できることです。シーン上に何百万ものアイテムがあっても、items() 関数は数ミリ秒以内にアイテムの位置を決定できます。items() にはいくつかのオーバーロードがあり、特定の位置にあるアイテムを見つけるもの、多角形や矩形の内部や交差するアイテムを見つけるものなどがあります。返される項目のリストは、積み重ね順でソートされ、一番上の項目がリストの最初の項目となる。便宜上、指定した位置の一番上の項目を返すitemAt() 関数もあります。

QGraphicsScene は、シーンの選択情報を保持します。アイテムを選択するには、setSelectionArea() を呼び出し、現在の選択をクリアするには、clearSelection() を呼び出します。すべての選択項目のリストを取得するには、selectedItems() を呼び出します。

イベント処理と伝播

QGraphicsViewイベントをシーンに送信するには、QEvent を継承するイベントを作成し、QCoreApplication::sendEvent() などでイベントを送信します。event() は、個々のアイテムへのイベントのディスパッチを担当します。いくつかの一般的なイベントは、便利なイベント・ハンドラによって処理されます。例えば、キー押下イベントはkeyPressEvent() で処理され、マウス押下イベントはmousePressEvent() で処理されます。

キー・イベントはフォーカス・アイテムに送られる。フォーカス項目を設定するには、フォーカスを受け付ける項目を渡してsetFocusItem() を呼び出すか、項目自体がQGraphicsItem::setFocus() を呼び出します。現在のフォーカス・アイテムを取得するには、focusItem ()を呼び出します。ウィジェットとの互換性のために、シーンは独自のフォーカス情報も保持します。デフォルトでは、シーンはフォーカスを持たず、すべてのキーイベントは破棄されます。setFocus() が呼び出されるか、シーン上のアイテムがフォーカスを得ると、シーンは自動的にフォーカスを得ます。シーンにフォーカスがある場合、hasFocus ()はtrueを返し、キーイベントは、もしあれば、フォーカスアイテムに転送される。アイテムがフォーカスを持っている間にシーンがフォーカスを失った場合(つまり、誰かがclearFocus() を呼び出した場合)、シーンはそのアイテムのフォーカス情報を保持し、シーンがフォーカスを取り戻すと、最後にフォーカスされたアイテムがフォーカスを取り戻すようにします。

マウスオーバー効果のために、QGraphicsScene はホバーイベントをディスパッチします。アイテムがホバーイベントを受け入れる場合 (QGraphicsItem::acceptHoverEvents() を参照)、マウスがその領域に入ると、GraphicsSceneHoverEnter イベントを受け取ります。マウスがアイテムの領域内で動き続けると、QGraphicsScene はGraphicsSceneHoverMove イベントを送ります。マウスがアイテムの領域を離れると、アイテムはGraphicsSceneHoverLeave イベントを受信します。

すべてのマウスイベントは、現在のマウスグラバーアイテムに送られます。アイテムは、マウスイベントを受け入れ(QGraphicsItem::acceptedMouseButtons() を参照)、マウスを押すと、シーンのマウスグラバーになります。それは、他のマウスボタンが押されていないときにマウスリリースを受け取るまで、マウスグラバーのままです。mouseGrabberItem() を呼び出すことで、現在どのアイテムがマウスをつかんでいるかを判断することができます。

QGraphicsItem およびQGraphicsViewも参照のこと

メンバ型ドキュメント

enum QGraphicsScene::ItemIndexMethod

この列挙型は、シーン上のアイテムの位置情報を管理するためにQGraphicsScene が提供するインデックス作成アルゴリズムについて記述します。

定数説明
QGraphicsScene::BspTreeIndex0バイナリ空間分割ツリーが適用される。すべてのQGraphicsScene のアイテム位置アルゴリズムは、バイナリサーチを利用することで、対数に近い複雑さのオーダーを持つ。アイテムの追加、移動、削除は対数的である。このアプローチは、静的なシーン(つまり、ほとんどのアイテムが動かないシーン)に最適である。
QGraphicsScene::NoIndex-1インデックスは適用されない。アイテムの位置は、シーン上のすべてのアイテムが検索されるため、線形複雑度である。しかし、アイテムの追加、移動、削除は一定時間で行われる。このアプローチは、多くのアイテムが連続的に追加、移動、削除されるダイナミックなシーンに最適です。

setItemIndexMethod() およびbspTreeDepthも参照してください

enum QGraphicsScene::SceneLayer
flags QGraphicsScene::SceneLayers

この enum は、QGraphicsScene のレンダリングレイヤーを記述します。QGraphicsScene がシーンコンテンツを描画するとき、これらのレイヤーのそれぞれを別々に、順番にレンダリングします。

各レイヤーはフラグを表し、invalidate() やQGraphicsView::invalidateScene() のような関数を呼び出すときに OR'd することができます。

定数説明
QGraphicsScene::ItemLayer0x1アイテムレイヤー。QGraphicsScene は、仮想関数 drawItems() を呼び出すことで、このレイヤーにあるすべてのアイテムを描画します。アイテムレイヤーは背景レイヤーの後に描画され、前景レイヤーの前に描画されます。
QGraphicsScene::BackgroundLayer0x2背景レイヤーQGraphicsScene 仮想関数drawBackground() を呼び出すことで、このレイヤーにシーンの背景を描画します。背景レイヤーは、すべてのレイヤーの中で最初に描画されます。
QGraphicsScene::ForegroundLayer0x4前景レイヤーQGraphicsScene は、仮想関数drawForeground() を呼び出すことで、このレイヤーにシーンの前景を描画します。前景レイヤーは、すべてのレイヤーの中で最後に描画されます。
QGraphicsScene::AllLayers0xffffこの値は、3 つのレイヤーの組み合わせを表します。

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

BSPツリーは、各セグメントが0から10のアイテムを含むときに最適なサイズになる。

アクセス関数:

int bspTreeDepth() const
void setBspTreeDepth(int depth)

itemIndexMethodも参照してください

focusOnTouch : bool

このプロパティは、タッチ開始イベントを受信したときにアイテムがフォーカスを得るかどうかを保持します。

通常の動作は、アイテムがクリックされたときにのみフォーカスを移す。多くの場合、タッチパッドのタップはオペレーティング・システムによってマウス・クリックと同等に解釈され、それに応答して合成されたクリック・イベントが生成されます。しかし、少なくともmacOSでは、この動作を設定することができます。

デフォルトでは、QGraphicsScene 、トラックパッドなどをタッチしたときにもフォーカスが移動します。オペレーティング・システムが、トラックパッドをタップしても合成マウス・クリックを生成しないように設定されている場合、これは驚くべきことです。オペレーティングシステムがトラックパッドのタップ時に合成マウスクリックを生成する場合、タッチジェスチャの開始時のフォーカスの移動は不要です。

focusOnTouch をオフにすると、QGraphicsScene は macOS で期待されるように動作します。

デフォルト値はtrue で、5.12 より前のバージョンの Qt と同じ動作になります。タッチイベントがフォーカスの変更をトリガーしないようにするには、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::fontQApplication::setFont()、palettestyle()も参照

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 または負の値に設定すると、すべてのアイテムが常にレンダリングされます。

例えば、シーンが複数のビューによってレンダリングされ、そのうちの1つが常にすべてのアイテムを表示するオーバービューとして機能する場合、このプロパティを設定すると特に便利です。多くのアイテムがあるシーンでは、そのようなビューは、すべてのアイテムを表示できるように、高いスケーリング係数を使用します。このスケーリングにより、小さなアイテムは最終的なレンダリングシーンにほとんど寄与しません。このようなアイテムの描画を回避し、シーンのレンダリングに必要な時間を短縮するには、setMinimumRenderSize() に負でない値を指定して呼び出します。

注意: 小さすぎるために描画されなかったアイテムは、items() やitemAt() などのメソッドによって返され、衝突検出や相互作用に参加します。インタラクティブなアイテムが大きく描画されるのを避けるために、minimumRenderSize() を 1 以下の値に設定することをお勧めします。

関数にアクセスしてください:

qreal minimumRenderSize() const
void setMinimumRenderSize(qreal minSize)

QStyleOptionGraphicsItem::levelOfDetailFromTransform()も参照してください

palette : QPalette

このプロパティは、シーンのデフォルトパレットを保持します。

このプロパティは、シーンのパレットを提供します。シーンパレットのデフォルトは、QApplication::palette である。

シーンのパレットが、setPalette() を通して直接、またはアプリケーションパレットが変更されたときに間接的に変更された場合、QGraphicsScene は、最初にそれ自身にPaletteChange イベントを送信し、次にシーン内のすべてのトップレベルのウィジェットアイテムにPaletteChange イベントを送信します。これらのアイテムは、自身のパレットをシーンに解決することによって応答し、次に、子アイテムに通知し、子アイテムは再び子アイテムに通知するなど、すべてのウィジェット・アイテムがパレットを更新するまで続きます。

シーンパレットを変更すると、(直接またはQApplication::setPalette ()を通して間接的に)自動的にシーン全体の再描画がスケジュールされる。

アクセス関数:

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

QWidget::paletteQApplication::setPalette()、fontstyle()も参照

sceneRect : QRectF

このプロパティはシーンの矩形を保持する。

シーン矩形は、シーンの範囲を定義する。これは主に、QGraphicsView 、ビューのデフォルトのスクロール可能領域を決定するために使用され、QGraphicsScene 、アイテムのインデックスを管理するために使用される。

未設定の場合、またはNULLQRectF に設定された場合、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

このプロパティは、シーン背景をクリックするとフォーカスがクリアされるかどうかを保持します。

stickyFocusがtrueに設定されたQGraphicsScene 、ユーザがシーンの背景やフォーカスを受け付けないアイテムをクリックしても、フォーカスは変更されません。そうでない場合、フォーカスはクリアされます。

デフォルトでは、このプロパティは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) で指定された矩形と、指定されたwidthheight をシーンの矩形に使用して、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 で定義され、そのペンとブラシはpenbrush で初期化されます。

アイテムのジオメトリはアイテム座標で提供され、その位置は (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() が真を返す)、QGraphicsScene は、制御がイベントループに戻ると、changed() を発する。

アイテムがすでに別のシーンにある場合は、まずその古いシーンから削除され、それからトップレベルとしてこのシーンに追加される。

QGraphicsScene がシーンに追加されている間、 にItemSceneChange通知を送る。アイテムが現在シーンに属していない場合、1つの通知のみが送られる。アイテムが既にシーンに属している場合(つまり、このシーンに移動された場合)、 は、アイテムがその前のシーンから削除される間、追加通知を送る。item 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 で定義され、そのペンとブラシはpenbrush で初期化されます。

アイテムのジオメトリはアイテム座標で提供され、その位置は (0, 0) に初期化されることに注意してください。

アイテムが表示されている場合(すなわち、QGraphicsItem::isVisible() がtrue を返す場合)、QGraphicsScene は、制御がイベントループに戻ると、changed() を発行します。

addEllipse(),addLine(),addPixmap(),addRect(),addText(),addItem(),addWidget()も参照

QGraphicsPixmapItem *QGraphicsScene::addPixmap(const QPixmap &pixmap)

pixmap アイテムを作成してシーンに追加し、アイテムのポインタを返す。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 で定義され、ペンとブラシはpenbrush で初期化されます。

アイテムのジオメトリはアイテム座標で提供され、その位置は (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 で定義され、そのペンとブラシはpenbrush で初期化されます。

アイテムのジオメトリはアイテム座標で提供され、その位置は (0, 0) に初期化されることに注意してください。た と えば、QRect(50, 50, 100, 100) が追加 さ れた場合、 その左上隅は、 アイテムの座標系の原点に対 し て相対的に (50, 50) の位置にな り ます。

アイテムが表示されている場合(すなわち、QGraphicsItem::isVisible() がtrue を返す場合)、QGraphicsScene は、制御がイベントループに戻ると、changed() を発行します。

addEllipse()、addLine()、addPixmap()、addPixmap()、addText()、addItem()、addWidget()も参照

QGraphicsRectItem *QGraphicsScene::addRect(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush())

この便利関数は、addRect(QRectF(x,y,w,h),pen,brush) を呼び出すのと同じです。

QGraphicsSimpleTextItem *QGraphicsScene::addSimpleText(const QString &text, const QFont &font = QFont())

QGraphicsSimpleTextItem を作成してシーンに追加し、アイテム・ポインタを返します。テ キ ス ト 文字列はtext に初期化 さ れ、 その フ ォ ン ト はfont に初期化 さ れます。

アイテムの位置は (0, 0) に初期化される。

アイテムが表示されている場合(すなわち、QGraphicsItem::isVisible() がtrue を返す場合)、QGraphicsScene は、制御がイベントループに戻ると、changed() を発行します。

addEllipse()、addLine()、addPixmap()、addPixmap()、addRect()、addItem()、addWidget()も参照

QGraphicsTextItem *QGraphicsScene::addText(const QString &text, const QFont &font = QFont())

テキスト・アイテムを作成してシーンに追加し、アイテム・ポインタを返します。テキスト文字列はtext に初期化され、そのフォントはfont に初期化される。

アイテムの位置は (0, 0) に初期化される。

アイテムが表示されている場合(すなわち、QGraphicsItem::isVisible() がtrue を返す場合)、QGraphicsScene は、制御がイベントループに戻ると、changed() を発行します。

addEllipse()、addLine()、addPixmap()、addPixmap()、addRect()、addItem()、addWidget()も参照

QGraphicsProxyWidget *QGraphicsScene::addWidget(QWidget *widget, Qt::WindowFlags wFlags = Qt::WindowFlags())

widget の新しいQGraphicsProxyWidget を作成し、シーンに追加し、プロキシへのポインタを返します。wFlags は、埋め込みプロキシウィジェットのデフォルトウィンドウフラグを設定します。

アイテムの位置は (0, 0) に初期化されます。

アイテムが表示されている場合(すなわち、QGraphicsItem::isVisible() は、true を返す)、QGraphicsScene は、制御がイベントループに戻ると、changed() を発行します。

Qt::WA_PaintOnScreen ウィジェット属性が設定されたウィジェットや、外部アプリケーションやコントローラをラップするウィジェットはサポートされていないことに注意してください。例として、QOpenGLWidget と QAxWidget があります。

addEllipse(),addLine(),addPixmap(),addPixmap(),addRect(),addText(),addSimpleText(),addItem()も参照してください

[slot] void QGraphicsScene::advance()

このスロットは、シーン上のすべてのアイテムに対してQGraphicsItem::advance() を呼び出すことで、シーンを1ステップ進めます。これは2つのフェーズで行われます。最初のフェーズでは、すべてのアイテムにシーンが変化しようとしていることを通知し、2番目のフェーズでは、すべてのアイテムに移動できることを通知します。最初のフェーズでは、QGraphicsItem::advance() が引数として 0 を渡して呼び出され、2 番目のフェーズでは 1 が渡されます。

アニメーションのためにアニメーションフレームワークを使用することもできます。

QGraphicsItem::advance() およびQTimeLineも参照して ください。

[signal] void QGraphicsScene::changed(const QList<QRectF> &region)

このシグナルは、制御がイベントループに達したとき、シーンの内容が変化すると、QGraphicsSceneregion パラメータには、変更された領域を示すシーン矩形のリストが含まれます。

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 newFocusItem は、入力フォーカスを得たアイテムへのポインターで、フォーカスが失われた場合は になります。 は、フォーカスが変更された理由です(例えば、入力フィールドにフォーカスがある間にシーンが非アクティブになった場合、 は入力フィールドのアイテムを指し、 は になり、 は になります)。nullptr reason oldFocusItem newFocusItem nullptr reason Qt::ActiveWindowFocusReason

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

TabとShift+Tabに適切なように、キーボード・フォーカスを与える新しいウィジェットを見つけ、新しいウィジェットが見つかればtrue 、見つからなければfalseを返す。next が真なら、この関数は前方を検索し、next が偽なら、後方を検索する。

この関数を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)

シーン上のrectlayers を無効にして、再描画をスケジュールする。layers にキャッシュされたコンテンツは、無条件に無効化され、再描画されます。

この関数のオーバーロードを使用して、シーンの背景または前景の変更をQGraphicsScene に通知することができます。この関数は、QGraphicsViewCacheBackground を有効にしたときに変更を通知するために、タイルベースの背景を持つシーンに一般的に使用されます。

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() を呼び出すのと同じです。

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

シーンがアクティブである場合(例えば、アクティブである少なくとも1つの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

order を使用してソートされたリストで、mode に応じて、指定されたpos にあるすべての可視アイテムを返します。この場合、"visible" は、isVisible() がtrue を返し、effectiveOpacity() が 0.0 より大きい値 (これは完全に透明です) を返し、親アイテムがそれをクリップしないアイテムを定義します。

mode のデフ ォ ル ト 値はQt::IntersectsItemShape です。pos と正確な形状が交差するすべてのアイテムが返されます。

deviceTransform はビューに適用されるトランスフォームで、シーンにトランスフォームを無視するアイテムが含まれている場合は提供する必要があります。

itemAt() およびSortingも参照してください

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 を使用してソートされたリストで返します。こ の場合、 "visible" は、 isVisible() がtrue を返 し 、 effectiveOpacity() が 0.0 よ り 大 き い値 (完全透過) を返 し 、 親ア イ テ ムがそれを ク リ ッ プ し ないア イ テ ム を定義 し ます。

mode のデフ ォ ル ト 値はQt::IntersectsItemShape です。path と正確な形状が交差するか、 または に含まれるすべてのアイテムが返されます。

deviceTransform はビューに適用されるトランスフォームであり、シーンにトランスフォームを無視するアイテムが含まれている場合は提供する必要があります。

itemAt() およびSortingも参照してください

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 を使用してソートされたリストで返します。こ の場合、 "visible" は、 isVisible() がtrue を返 し 、 effectiveOpacity() が 0.0 よ り 大 き い値 (完全透過) を返 し 、 親ア イ テ ムがそれを ク リ ッ プ し ないア イ テ ム を定義 し ます。

mode のデフ ォ ル ト 値はQt::IntersectsItemShape です。polygon と正確な形状が交差するか、 または に含まれるすべてのアイテムが返されます。

deviceTransform はビューに適用されるトランスフォームであり、シーンにトランスフォームを無視するアイテムが含まれている場合は提供する必要があります。

itemAt() およびSortingも参照してください

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 を使用してソートされたリストで返します。こ の場合、 "visible" は、 isVisible() がtrue を返 し 、 effectiveOpacity() が 0.0 よ り 大 き い値 (完全透過) を返 し 、 親ア イ テ ムがそれを ク リ ッ プ し ないア イ テ ム を定義 し ます。

mode のデフ ォ ル ト 値はQt::IntersectsItemShape です。rect と正確な形状が交差するか、 または に含まれるすべてのアイテムが返されます。

deviceTransform はビューに適用されるトランスフォームであり、シーンにトランスフォームを無視するアイテムが含まれている場合は提供する必要があります。

itemAt() およびSortingも参照してください

QList<QGraphicsItem *> QGraphicsScene::items(qreal x, qreal y, qreal w, qreal h, Qt::ItemSelectionMode mode, Qt::SortOrder order, const QTransform &deviceTransform = QTransform()) const

これはオーバーロードされた関数です。

mode に応じて、xywh で定義された矩形の内側にあるか、または矩形と交差しているすべての可視アイテムを、order を使用してソートされたリストで返します。この場合、"visible" は、isVisible() がtrue を返し、effectiveOpacity() が 0.0 より大きい値(これは完全に透明である)を返し、親アイテムがそれをクリップしないアイテムを定義する。

deviceTransform は、ビューに適用されるトランスフォームで、シーンにトランスフォームを無視するアイテムが含まれている場合は、提供する必要があります。

QRectF QGraphicsScene::itemsBoundingRect() const

シーン上のすべてのアイテムのバウンディング rect を計算して返します。この関数は、すべてのアイテムを繰り返し処理することによって動作し、このため、大きなシーンでは時間がかかることがあります。

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 を使用して、シーンからtargetsource rect をレンダリングします。この関数は、QImage のようなペイントデバイスにシーンの内容をキャプチャしたり(例えば、スクリーンショットを撮る)、QPrinter で印刷したりするのに便利です。例えば

QGraphicsScene scene;
scene.addItem(...
...
QPrinter printer(QPrinter::HighResolution);
printer.setPaperSize(QPrinter::A4);

QPainter painter(&printer);
scene.render(&painter);

source が null rect の場合、この関数はsceneRect() を使用してレンダリングを決定します。target が null rect の場合、painter のペイントデバイスの寸法が使用されます。

ソース rect の内容は,aspectRatioMode に従って変換され,ターゲット rect に収まるようになります。デフォルトでは、縦横比は維持され、sourcetarget に収まるように拡大縮小されます。

QGraphicsView::render()も参照してください

[signal] void QGraphicsScene::sceneRectChanged(const QRectF &rect)

このシグナルは、シーン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 は、グループ選択操作に対して1度だけこのシグナルを発する。例えば、選択領域を設定したり、 を選択または選択解除したり、選択された複数のアイテムを含む親アイテムをシーンに追加またはシーンから削除した場合、selectionChanged() は、操作が完了した後に(各アイテムに対して1回ではなく)1回だけ発せられます。QGraphicsItemGroup

setSelectionArea(),selectedItems(),QGraphicsItem::setSelected()も参照してください

bool QGraphicsScene::sendEvent(QGraphicsItem *item, QEvent *event)

可能なイベント・フィルタを通して、イベントevent をアイテムitem に送ります。

イベントは、アイテムが有効になっている場合にのみ送信されます。

イベントがフィルタリングされた場合、またはアイテムが無効な場合はfalse を返します。そうでない場合は、イベント・ハンドラから返された値を返します。

QGraphicsItem::sceneEvent() およびQGraphicsItem::sceneEventFilter()も参照してください

void QGraphicsScene::setActivePanel(QGraphicsItem *item)

このシーンのアイテムでなければならないitem をアクティブにする。itemこの場合、QGraphicsScene は、現在アクティブなパネルを非アクティブにします。

シーンが現在非アクティブの場合、item は、シーンがアクティブになるまで非アクティブのままです(または、itemnullptr の場合、アイテムはアクティブになりません)。

activePanel ()、isActive ()、QGraphicsItem::isActive)も参照

void QGraphicsScene::setActiveWindow(QGraphicsWidget *widget)

このシーンのウィジェットでなければならないwidget をアクティブにする。widgetこの場合、QGraphicsScene は、現在アクティブなウィンドウを非アクティブにします。

activeWindow() およびQGraphicsWidget::isActiveWindow()も参照してください

void QGraphicsScene::setFocus(Qt::FocusReason focusReason = Qt::OtherFocusReason)

シーンにQFocusEvent を送り、理由としてfocusReason を渡すことで、シーンにフォーカスを設定します。あるアイテムがフォーカスを持つ間にシーンがフォーカスを失った後、再びフォーカスを得た場合、最後にフォーカスを得たアイテムがfocusReason を理由としてフォーカスを受け取ります。

シーンにすでにフォーカスがある場合、この関数は何もしない。

hasFocus ()、clearFocus ()、setFocusItem)も参照

void QGraphicsScene::setFocusItem(QGraphicsItem *item, Qt::FocusReason focusReason = Qt::OtherFocusReason)

focusReasonフォーカスを持つ可能性のある以前のアイテムからフォーカスを取り除いた後、シーンのフォーカスアイテムをitem に設定する。

itemnullptr である場合、またはフォーカスを受け入れない(すなわち、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() を間接的に呼び出すことによってスタイルを変更すると、スタイルが明示的に割り当てられていないシーン内のすべてのウィジェットのスタイルが自動的に更新されます。

stylenullptr の場合、QGraphicsSceneQApplication::style() に戻ります。

style()も参照してください

QStyle *QGraphicsScene::style() const

シーンのスタイル、またはシーンにスタイルが明示的に割り当てられていない場合はQApplication::style() と同じものを返します。

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)) を呼び出すのと同じです;

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() も参照して ください。

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。