QGraphicsLayout Class
QGraphicsLayoutクラスは、グラフィックス・ビューのすべてのレイアウトの基本クラスです。詳細...
Header: | #include <QGraphicsLayout> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake: | QT += widgets |
Inherits: | QGraphicsLayoutItem |
Inherited By: | QGraphicsAnchorLayout, QGraphicsGridLayout, and QGraphicsLinearLayout |
パブリック関数
QGraphicsLayout(QGraphicsLayoutItem *parent = nullptr) | |
virtual | ~QGraphicsLayout() |
void | activate() |
virtual int | count() const = 0 |
virtual void | invalidate() |
bool | isActivated() const |
virtual QGraphicsLayoutItem * | itemAt(int i) const = 0 |
virtual void | removeAt(int index) = 0 |
void | setContentsMargins(qreal left, qreal top, qreal right, qreal bottom) |
virtual void | widgetEvent(QEvent *e) |
再実装パブリック関数
virtual void | getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const override |
virtual void | updateGeometry() override |
保護された関数
void | addChildLayoutItem(QGraphicsLayoutItem *layoutItem) |
詳細説明
QGraphicsLayout は、QGraphicsWidget の子オブジェクトやQGraphicsLayoutItem オブジェクトをQGraphicsWidget に配置するための仮想 API を定義する抽象クラスです。QGraphicsWidget は、QGraphicsWidget::setLayout() を通じて QGraphicsLayout に責任を割り当てます。ウィジェットのサイズが変更されると、レイアウトは自動的にウィジェットの子を配置します。QGraphicsLayout はQGraphicsLayoutItem を継承しているため、自身のサブクラスを含め、どのレイアウトでも管理できます。
カスタムレイアウトの記述
QGraphicsLayoutをベースとして、独自のカスタムレイアウト(フローレイアウトなど)を記述することもできますが、その代わりにQGraphicsLayoutのサブクラス(QGraphicsLinearLayout またはQGraphicsGridLayout )を使用するのが一般的です。カスタムレイアウトを作成する場合、最低限、以下の関数を再実装する必要があります:
関数 | 説明 |
---|---|
QGraphicsLayoutItem::setGeometry() | レイアウトのジオメトリが設定されると通知します。この関数を再実装することで、独自のレイアウト・クラスにジオメトリを格納することができます。 |
QGraphicsLayoutItem::sizeHint() | レイアウトのサイズヒントを返します。 |
QGraphicsLayout::count() | レイアウトのアイテム数を返します。 |
QGraphicsLayout::itemAt() | レイアウト内の項目へのポインタを返します。 |
QGraphicsLayout::removeAt() | アイテムを破棄せずにレイアウトから削除します。 |
各関数の実装方法の詳細については、各関数のドキュメントを参照してください。
各レイアウトは、ウィジェットとレイアウト・アイテムを配置するための独自のAPIを定義します。例えば、グリッドレイアウトでは、行と列のインデックスが必要で、オプションで行と列のスパン、アライメント、スペーシングなどが必要です。一方、リニアレイアウトでは、1つの行または列インデックスでアイテムを配置します。グリッドレイアウトの場合、挿入順序はレイアウトに何の影響も与えませんが、リニアレイアウトの場合、順序は不可欠です。独自のレイアウト・サブクラスを記述する場合、レイアウトに最も適したAPIを自由に選択できます。
QGraphicsLayoutは、カスタムレイアウトにレイアウト項目を追加するための便利な関数addChildLayoutItem ()を提供します。この関数は、必要に応じてグラフィック・アイテムを自動的に再ペアレントします。
レイアウトのアクティブ化
レイアウトのジオメトリが変更されると、QGraphicsLayout は各アイテムに対してsetGeometry() を呼び出すことで、管理しているすべてのアイテムを直ちに再配置します。この再配置をレイアウトのアクティブ化と呼びます。
QGraphicsLayout は、管理しているQGraphicsLayoutItem のcontentsRect() と一致するように、自身のジオメトリを更新します。したがって、ウィジェットのサイズが変更されると、自動的にすべてのアイテムの配置が変更されます。QGraphicsLayout は、setGeometry() を頻繁に呼び出さないように、管理しているすべてのアイテムのサイズをキャッシュします。
注意: QGraphicsLayoutは、割り当てられたウィジェット(レイアウトではない)のcontentsRect ()と同じジオメトリを持ちます。
暗黙的にレイアウトをアクティブにする
レイアウトは、activate ()を呼び出すか、invalidate ()を呼び出すか、2つの方法のいずれかを使用して暗黙的にアクティブにすることができます。activate() を呼び出すと、レイアウトは即座にアクティブになります。一方、invalidate ()を呼び出すと、LayoutRequest イベントが管理ウィジェットにポストされるため、遅延が発生します。イベント圧縮のため、activate ()は、制御がイベント・ループに戻った後に一度だけ呼び出されます。これをレイアウトの無効化と呼びます。レイアウトの無効化は、キャッシュされた情報も無効にします。また、invalidate ()関数は仮想関数です。そのため、QGraphicsLayoutのサブクラスでこの関数を再実装することで、独自のキャッシュを無効にすることができます。
イベント処理
QGraphicsLayoutは、仮想のwidgetEvent ()イベント・ハンドラを通して、管理しているウィジェットのイベントをリッスンします。レイアウトがウィジェットに割り当てられると、ウィジェットに配信されるすべてのイベントはまずwidgetEvent() によって処理されます。これにより、レイアウトは、可視性の変更やレイアウト方向の変更など、ウィジェットの関連する状態変化を認識できます。
マージン処理
QGraphicsLayout のマージンは、setContentsMargins() とgetContentsMargins() を再実装することで変更できます。
メンバ関数ドキュメント
QGraphicsLayout::QGraphicsLayout(QGraphicsLayoutItem *parent = nullptr)
QGraphicsLayoutオブジェクトを構築します。
parent は のコンストラクタに渡され、 の isLayout 引数はQGraphicsLayoutItem QGraphicsLayoutItemtrue に設定されます。
parent がQGraphicsWidget の場合、レイアウトはそのウィジェットにインストールされます。(レイアウトをインストールすると、インストールされた古いレイアウトは削除されることに注意してください)。
[virtual noexcept]
QGraphicsLayout::~QGraphicsLayout()
QGraphicsLayout オブジェクトを破棄します。
void QGraphicsLayout::activate()
レイアウトをアクティブにし、レイアウト内のすべてのアイテムを直ちに再配置させます。この関数は、count ()とitemAt ()を呼び出した後、すべてのアイテムに対してsetGeometry ()を順次呼び出すことを基本としています。アクティブになると、レイアウトはそのジオメトリを親のcontentsRect ()に合わせます。その後、親はそれ自身のレイアウトを無効にします。
配置されたアイテムのサイズが変更された場合など、順次または再帰的に呼び出された場合、この関数は何もしません。
レイアウトは、この処理を最適化するためにジオメトリキャッシングを自由に使用できることに注意してください。そのようなキャッシュを強制的に無効にするには、 activate() を呼び出す前にinvalidate() を呼び出します。
invalidate()も参照 。
[protected]
void QGraphicsLayout::addChildLayoutItem(QGraphicsLayoutItem *layoutItem)
この関数は、カスタムレイアウトのために提供される便利な関数で、レイアウト内のすべてのアイテムを調べ、そのグラフィックスアイテムをレイアウトの最も近いQGraphicsWidget 先祖に再ペアレントします。
layoutItem がすでに別のレイアウトにある場合は、そのレイアウトから削除されます。
カスタムレイアウトが特別な振る舞いを望む場合、この関数の使用を無視し、独自の振る舞いを実装することができます。
graphicsItem()も参照してください 。
[pure virtual]
int QGraphicsLayout::count() const
この純粋仮想関数は、レイアウト内のアイテム数を返すために、QGraphicsLayout のサブクラスで再実装する必要があります。
アイテムをどのように格納するかは、サブクラスが自由に決めることができます。
itemAt() およびremoveAt()も参照して ください。
[override virtual]
void QGraphicsLayout::getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const
再実装:QGraphicsLayoutItem::getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const.
[virtual]
void QGraphicsLayout::invalidate()
レイアウト内のキャッシュされたジオメトリおよびサイズヒント情報をクリアし、LayoutRequest イベントを管理された親QGraphicsLayoutItem にポストします。
activate() およびsetGeometry()も参照してください 。
bool QGraphicsLayout::isActivated() const
レイアウトが現在アクティブ化されている場合はtrue
を返し、そうでない場合はfalse
を返します。レイアウトがアクティブ化されている場合、これは現在アイテムの再配置中であることを意味します(すなわち、activate ()関数が呼び出され、まだ返されていない)。
activate() およびinvalidate()も参照のこと 。
[pure virtual]
QGraphicsLayoutItem *QGraphicsLayout::itemAt(int i) const
この純粋仮想関数は、インデックスi の項目へのポインタを返すように、QGraphicsLayout のサブクラスで再実装されなければならない。この再実装は、i が有効である(つまり、count() の値を尊重する)と仮定することができる。count() と共に、レイアウト内の全アイテムを反復処理する手段として提供されます。
アイテムをどのように格納するかはサブクラスが自由に決めることができ、視覚的な配置をこの関数に反映させる必要はありません。
count() およびremoveAt()も参照してください 。
[pure virtual]
void QGraphicsLayout::removeAt(int index)
indexこの純粋仮想関数は、QGraphicsLayout のサブクラスで再実装されなければならない。この再実装は、index が有効である(つまり、count ()の値を尊重する)と仮定することができる。
アイテムはレイアウト階層から削除されたとみなされるため、実装は、削除されたアイテムのparentLayoutItem ()がこのレイアウトを指していないことを保証しなければなりません。
レイアウトがアプリケーション間で再利用される場合、レイアウトはアイテムを削除することを推奨しますが、グラフィクス・ビュー・フレームワークはこれに依存しません。
アイテムをどのように保存するかは、サブクラスが自由に決めることができます。
itemAt() およびcount()も参照してください 。
void QGraphicsLayout::setContentsMargins(qreal left, qreal top, qreal right, qreal bottom)
コンテンツの余白をleft 、top 、right 、bottom に設定します。トップレベルレイアウトのデフォルトの余白は、スタイルに依存します(QStyle::PM_LayoutLeftMargin 、QStyle::PM_LayoutTopMargin 、QStyle::PM_LayoutRightMargin 、QStyle::PM_LayoutBottomMargin の pixelMetric をクエリします)。
サブレイアウトのデフォルトの余白は0です。
コンテンツの余白を変更すると、レイアウトは自動的に無効になります。
invalidate()も参照してください 。
[override virtual]
void QGraphicsLayout::updateGeometry()
再実装:QGraphicsLayoutItem::updateGeometry().
[virtual]
void QGraphicsLayout::widgetEvent(QEvent *e)
この仮想イベントハンドラは、管理対象ウィジェットのすべてのイベントを受け取ります。QGraphicsLayout は、このイベントハンドラを使用して、ジオメトリの変更、レイアウトの変更、レイアウトの方向の変更などのレイアウト関連イベントを待ち受けます。
e はイベントへのポインタです。
このイベントハンドラを再実装して、独自のカスタムレイアウトの同様のイベントを追跡することができます。
QGraphicsWidget::event() およびQGraphicsItem::sceneEvent()も参照してください 。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。