Qt グラフィックス ビュー フレームワーク: QGraphicsWidget、QGraphicsLayoutItem

Qグラフィックウィジェット

1. 説明

1. QGraphicsWidget は、QGraphicsItem に追加機能を提供する拡張された基本アイテムです。これは多くの点で QWidget に似ています。

パレット、フォント、スタイルを提供します。

geometry()があります。

レイアウトは、setLayout() およびlayout() を使用してサポートされます。

grabShortcut() と insertAction() を使用したショートカットと QAction がサポートされています。

QGraphicsItem とは異なり、QGraphicsWidget は抽象クラスではありません。

2. QGraphicsWidget は QWidget に似ており、同様の API を備えているため、QGraphicsItem よりも QWidget から QGraphicsWidget にウィジェットを移植する方が簡単です。

3. QGraphicsWidget によってデフォルトでサポートされる Qt ウィジェットのプロパティは次のとおりです。

  • Qt::WA_RightToLeft: ウィジェットのレイアウト方向が右から左であることを示します。
  • Qt::WA_SetStyle: ウィジェットに独自のスタイルがあることを示します。このプロパティが設定されている場合 (setStyle() によって設定されている場合)、ウィジェットには明示的にスタイルが割り当てられています。設定されていない場合、ウィジェットはシーンまたはアプリケーションのスタイルを使用します。
  • Qt::WA_Resize: ウィジェットに明示的なサイズがあることを示します。
  • Qt::WA_SetPalette: ウィジェットに独自のパレットがあることを示します。
  • Qt::WA_SetFont: ウィジェットに独自のフォントがあることを示します。
  • Qt::WA_WindowPropagation: トップレベルのウィンドウが親からフォント、パレット、ロケールを継承するようにします。

4. QGraphicsWidget は QObject と QGraphicsItem (どちらも子を管理するための独自のシステムを持っています) を継承しますが、親項目と子項目の間の関係を管理するには、(QObject の代わりに) QGraphicsItem によって提供される関数を使用する必要があります。グラフィックス項目のスタック順序とその所有権は、QGraphicsItem の関数によって制御されます。

2、属性メンバー

1、autoFillBackground : bool

ウィジェットの背景を自動入力するかどうか。このプロパティを有効にすると、Qt は、paint() メソッドを呼び出す前にウィジェットの背景を塗りつぶします。使用される色は、ウィジェット パレットの QPalette::Window 色の役割によって定義されます。WA_OpaquePaintEvent 属性 (プロパティ) が設定されていない限り、QGraphicsWidget は常に QPalette::Window で埋められます。デフォルトでは、このプロパティは false です。

2、フォーカスポリシー : Qt::FocusPolicy

キーボード フォーカスを受け入れるためのポリシー (フォーカス ポリシー Qt::FocusPolicy)。

ウィジェットがキーボード イベントを処理する場合、ウィジェットに対してキーボード フォーカスを有効にする必要があります。たとえば、QLineEdit コンストラクターは setFocusPolicy(Qt::StrongFocus) を呼び出します。

フォーカス ポリシーを有効にした場合 (つまり、Qt::NoFocus ではなかった場合)、QGraphicsWidget は自動的に ItemsIsFocusable フラグ (グラフィック アイテム フラグ) を有効にします。ウィジェットに Qt::NoFocus を設定すると、ItemIsFocusable フラグがクリアされます。

3、フォント: QFont

ウィジェットのフォント。このプロパティは、明示的に定義されたフォント プロパティと、ウィジェットの親から暗黙的に継承されたプロパティで構成されます。したがって、font() は、setFont() で設定されたフォントとは異なるフォントを返すことができます。このスキームを使用すると、フォントの継承されたエントリに影響を与えることなく、フォント内の単一エントリを定義できます。

ウィジェットのフォントが変更されると、その親ウィジェットに対してエントリが解決されます。ウィジェットに親がない場合は、シーンに基づいてエントリを解決します。次に、ウィジェットはそれ自体に FontChange() イベントを送信し、そのすべての子孫に通知して、子孫もフォントを解決できるようにします。デフォルトでは、このプロパティにはアプリケーションのデフォルトのフォントが含まれています。

4、ジオメトリ:QRectF

ウィジェットのジオメトリ。グラフィックス項目のジオメトリを長方形に設定します。この関数を呼び出すと、グラフィック項目の位置とサイズが変更されます。グラフィックアイテムは最初に移動され、次にサイズが変更されます。この関数を呼び出すことの副作用として、ウィジェットが移動イベントとサイズ変更イベントを受け取ることになります。また、ウィジェットにレイアウトが割り当てられている場合、そのレイアウトがアクティブになります。

5、レイアウト: QGraphicsLayout*

ウィジェットのレイアウト。QGraphicsWidget はレイアウトの所有権を取得します。

6、maximumSize : const QSizeF / minimumSize : const QSizeF /preferredSize : const QSizeF

ウィジェットの最大/最小/推奨サイズ。

7、パレット:Qパレット

ウィジェットのパレット。パレットは、カラー グループの色とブラシを提供し、ウィジェットとその子の全体的な外観を定義します。QPalette は、明示的に定義されたカラー グループと、ウィジェットの親から暗黙的に継承されたグループで構成されます。したがって、palette() は、setPalette() で設定されたものとは異なるパレットを返す可能性があります。ウィジェットのパレットが変更されると、その親ウィジェットに対して、または親ウィジェットがない場合はシーンに対してエントリが解決されます。次に、それ自体に PaletteChange() イベントを送信し、すべての子孫に通知して、子孫もパレットを解決できるようにします。デフォルトでは、このプロパティにはアプリケーションのデフォルトのパレットが含まれています。

8、サイズ: QサイズF

ウィジェットのサイズ。このプロパティは、ウィジェットの幅と高さにのみ影響します。ウィジェットの位置と左上隅は影響を受けません。ウィジェットのサイズを変更すると、GraphicsSceneResize() イベントがトリガーされます。

9、サイズポリシー : QSizePolicy

サイズ戦略。

10、windowFlags : Qt::WindowFlags

窓の看板。ウィンドウ フラグは、ウィンドウ タイプ (Qt::Dialog など) と、ウィンドウの動作に関するヒントを提供するいくつかのフラグを組み合わせたものです。デフォルトでは、このプロパティにはウィンドウ フラグは含まれません。ウィンドウはパネルであり、Qt::Window フラグが設定されている場合、ItemIsPanel (グラフィック アイテム フラグ) フラグが自動的に設定されます。Qt::Window フラグがクリアされると、ItemIsPanel フラグもクリアされます。ItemIsPanel フラグは Qt::Window とは独立して設定できることに注意してください。

11、ウィンドウタイトル:QString

ウィンドウのタイトル。このプロパティは Windows でのみ使用されます。

3. メンバー関数

1、void addAction(QAction *action) / void addActions(QList<QAction *> アクション)

QAction リストにアクションを追加します。QGraphicsWidgets には QAction のリストがあります。

2、voidAdjustSize()

ウィジェットのサイズを有効な優先サイズ (EffectiveSizeHint(Qt::PreferredSize)(QGraphicsLayoutItem)) に変更します。この関数は、グラフィックス項目が初めて表示されるときに暗黙的に呼び出されます。

3、ブールクローズ()

ウィジェットを閉じます。ウィジェットが正常に閉じられた場合は true を返し、それ以外の場合は false を返します。まず、QCloseEvent をウィジェットに送信します。ウィジェットはイベントを受け入れる場合と受け入れない場合があります。イベントが無視された場合は何も行いません。イベントが受け入れられると、ウィジェットが閉じられます。ウィジェットに Qt::WA_DeleteOnClose 属性が設定されている場合、ウィジェットは削除されます。

4. [仮想関数] bool focusNextPrevChild(bool next)

Tab キーと Shift+Tab キーを押すと、キーボード フォーカスを与える新しいウィジェットが検索され、新しいウィジェットが見つかった場合は true が返され、見つからない場合は false が返されます。next が true の場合は前方検索、そうでない場合は後方検索します。

5、QGraphicsWidget *focusWidget()

このウィジェット、このウィジェットの子または子孫が現在入力フォーカスを持っている場合、この関数はウィジェットへのポインターを返します。

6. [シグナル] void geometryChanged()

このシグナルは、setGeometry() でジオメトリが変更されるたびに発行されます。

7、void getWindowFrameMargins(qreal *left, qreal *top, qreal *right, qreal *bottom)

ウィジェットのウィンドウの余白を取得します。

8、intgrabShortcut(const QKeySequence &sequence, Qt::ShortcutContext context = Qt::WindowShortcut)

Qt のショートカット システム (QKeySequence はショートカット キー情報をカプセル化するクラス) にショートカット キーを追加します。このシステムは、特定の環境で特定のキー シーケンスを監視します (パラメーター 2)。

  • Qt::ShortcutContext: ショートカット キーが配置されている環境。
  • Qt::WidgetShortcut: ショートカットは、親ウィジェットにフォーカスがあるときにアクティブになります。
  • Qt::WidgetWithChildrenShortcut: ショートカットは、親ウィジェットまたはその子ウィジェットにフォーカスがあるときにアクティブになります。
  • Qt::WindowShortcut: ウィンドウの一部ではないウィジェット (つまり、トップレベルのウィジェットとその子) の場合、ショートカット キーはシーンに適用されます。
  • Qt::ApplicationShortcut: ショートカットはアプリケーション全体に適用されます。

9、void initStyleOption(QStyleOption *オプション)

スタイル設定オブジェクト(QStyleOption)に従って、QGraphicsWidgetオブジェクトのウィジェットスタイルを設定します。QStyleOption オブジェクトには次のメンバーがあります。

 

デフォルトでは、これらのメンバーは QGraphicsWidget の次のプロパティを設定するために使用されます。

  • 状態 & QStyle::State_Enabled:isEnabled()
  • 状態 & QStyle::State_HasFocus:hasFocus()
  • 状態 & QStyle::State_MouseOver:isUnderMouse()
  • 方向:layoutDirection()
  • rect:rect().toRect()
  • パレット:パレット()
  • fontMetrics:QFontMetrics(font())

10、void insertAction(QAction *before, QAction *action) / void insertActions(QAction *before, QList<QAction *> アクション)

パラメータ 1 のアクションの前にパラメータ 2 のアクションを挿入します。before == nullptr または before が現在のウィジェットのアクションではない場合、アクション リストの後に追加します。

11、bool isActiveWindow()

ウィジェットのウィンドウがアクティブ ウィンドウ内にある場合、またはウィジェットにウィンドウがなくアクティブ シーン (つまり、現在フォーカスがあるシーン) 内にある場合は true を返します。(アクティブなウィンドウとは、現在入力フォーカスがある子ウィジェット、またはそれ自体が入力フォーカスを持つ子ウィジェットを含むウィンドウです)

 

12. [仮想関数] voidPaintWindowFrame(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr)

ローカル座標でウィンドウのウィンドウ境界を描画するためにシーンによって呼び出されます。基本的な実装では、現在のスタイルを使用して境界線とタイトル バーをレンダリングします。

13、voidremoveAction(QAction *action)

アクションを削除します。

14、voidリサイズ(qreal w, qreal h)

幅と高さをリセットします。

15、void setAttribute(Qt::WidgetAttribute 属性、bool on = true)

on が true の場合、この関数はプロパティを有効にし、それ以外の場合、プロパティは無効になります。実用的な属性

16、void setContentsMargins(qreal 左、qreal 上、qreal 右、qreal 底)

コンテンツの左、上、右、下の余白を設定します。レイアウトでは、コンテンツの余白を使用して、子ウィジェットとレイアウトの配置を定義します。

17、void setLayout(QGraphicsLayout *layout)

レイアウトを設定します。既存のレイアウト マネージャーは、新しいレイアウトが割り当てられる前に削除されます。QGraphicsWidget はレイアウトの所有権を取得します。

18、[静的] void setTabOrder(QGraphicsWidget * A, QGraphicsWidget * B)

Tabキーを押したときにフォーカスがAからBに移動するように設定します。

フォーカスを a->b->c->d に設定して移動します。

setTabOrder(a, b); // a -> b
setTabOrder(b, c); // a -> b -> c
setTabOrder(c, d); // a -> b -> c -> d

19、void setWindowFrameMargins(QMarginsFマージン)

ウィジェットウィンドウの余白を設定します。デフォルトのマージンは、現在のウィンドウ フラグに応じてスタイルによって提供されます。独自のウィンドウ スタイルを描画したい場合は、独自のフレーム マージンを設定してデフォルトのマージンをオーバーライドできます。

20、bool testAttribute(Qt::WidgetAttribute 属性)

属性がウィジェットに対して有効かどうかを返します。

21、void unsetWindowFrameMargins()

境界線の余白をスタイルによって提供されるデフォルト値にリセットします。

4番目、イベントメンバー関数

1、void changeEvent(QEvent *event)

状態変化イベント。含む:

  • QEvent::ActivationChange
  • QEvent::EnabledChange
  • QEvent::FontChange
  • QEvent::StyleChange
  • QEvent::PaletteChange
  • QEvent::ParentChange
  • QEvent::LayoutDirectionChange
  • QEvent::ContentsRectChange

2、void closeEvent(QCloseEvent *event)

ウィジェットを閉じるイベント。デフォルトの実装はイベントを受け入れます。

3、ブールイベント(QEvent *event)

イベントを処理します。次のイベントを処理できます。

  • Qイベント::ポーランド語
  • QEvent::GraphicsSceneMove: シーン内の位置が変更されます。
  • QEvent::GraphicsSceneResize: シ​​ーンのサイズが変更されます。
  • QEvent::Show: ウィジェットが画面に表示されます。
  • QEvent::Hide: ウィジェットは非表示になります。
  • QEvent::PaletteChange: パレットが変更されます。
  • QEvent::FontChange: フォントが変更されました。
  • QEvent::EnabledChange: 状態変更を有効にします。
  • QEvent::StyleChange: スタイルが変更されました。
  • QEvent::LayoutDirectionChange: レイアウトの方向が変更されます。
  • QEvent::ContentsRectChange: コンテンツのマージン/範囲の変更。

4、voidgrabKeyboardEvent(QEvent *event)

QEvent::GrabKeyboard (グラフィックアイテムがキーボードを取得する) イベントを処理します。

5、voidgrabMouseEvent(QEvent *event)

QEvent::GrabMouse (グラフィックアイテムがマウスを掴む) イベントを処理します。

6、void HideEvent(QHideEvent *event)

イベントを非表示にします。イベントに対して QEvent::accept() または QEvent::ignore() を呼び出しても効果はありません。

7、void moveEvent(QGraphicsSceneMoveEvent *event)

モバイルイベント。このイベントは、グラフィックス項目自体が移動された場合にのみ配信されます。setTransform() を呼び出したり、グラフィックス項目の祖先を移動したりしても、グラフィックス項目のローカル位置には影響しません。イベントに対して QEvent::accept() または QEvent::ignore() を呼び出しても効果はありません。

8、void PolishEvent()

このイベントは、グラフィック アイテムが構築された後の特定の時点で、シーンによってグラフィック アイテムに渡されます。このイベントの機能は、グラフィック アイテムが表示前に最終的な初期化操作を実行することです。

9、void ResizeEvent(QGraphicsSceneResizeEvent *event)

サイズ変更イベント。このイベントは、ウィジェットがローカルでサイズ変更された場合にのみ配信されます。ウィジェットまたはその祖先またはビューで setTransform() を呼び出しても、ウィジェットのネイティブ サイズには影響しません。イベントに対して QEvent::accept() または QEvent::ignore() を呼び出しても効果はありません。

10、bool sceneEvent(QEvent *event)

QGraphicsItem::sceneEvent() から再実装されました。QGraphicsWidget の sceneEvent() 実装は、単にイベントを QGraphicsWidget::event() に渡します。この関数は QGraphicsWidget のサブクラスで再実装しないでください。

11、void showEvent(QShowEvent *event)

イベントを表示します。このイベントは、ウィジェットが表示される前に渡されます。イベントに対して QEvent::accept() または QEvent::ignore() を呼び出しても効果はありません。

12、void ungrabKeyboardEvent(QEvent *event)

失われたキーボード取得イベント QEvent::UngrabKeyboard を処理します。

13、void ungrabMouseEvent(QEvent *event)

失われたマウス グラブ イベント QEvent::UngrabMouse を処理します。

14、bool windowFrameEvent(QEvent *event)

ウィンドウ フレームのイベントを処理します。その基本的な実装では、移動やサイズ変更などのデフォルトのウィンドウ フレーム操作のサポートが提供されます。

この記事の利点は、Qt 開発学習教材パッケージ、技術ビデオ (C++ 言語基礎、Qt プログラミング入門、QT シグナルおよびスロット メカニズム、QT インターフェイス開発イメージ描画、QT ネットワーク、QT データベース プログラミング、 QTプロジェクトコンバット、QT組込み開発、Quickモジュール等) ↓↓↓↓下記参照↓↓料金受け取りは記事下部をクリック↓↓

QGraphicsLayoutItem (レイアウト項目)

1. 説明

1. グラフィックスビューフレームレイアウト項目 QGraphicsLayoutItem は、QGraphicsLayout によって配置されたオブジェクトのサイズ、サイズポリシー、およびサイズヒントを記述するための仮想関数のセットを定義する抽象クラスです。

2. QGraphicsLayoutItem のサブクラス化: QGraphicsLayoutItem のサブクラスを作成し、その仮想関数を再実装すると、レイアウトを有効にして、項目および QGraphicsWidget や QGraphicsLayout を含む他の QGraphicsLayoutItem のサイズと位置を調整できます。

3. ネストされた QGraphicsLayout アイテム: サブレイアウトを含めることができるレイアウトと同様に、QGraphicsLayoutItem を他の QGraphicsLayoutItem にネストすることができます。これは、QGraphicsLayoutItem ポインターを QGraphicsLayoutItem のコンストラクターに渡すか、setParentLayoutItem() を呼び出すことによって行われます。

2. メンバー関数

1、QRectFの内容Rect()

コンテキスト四角形の範囲をローカル座標で返します。この機能を使用して、レイアウト項目をレイアウトするときに長方形の範囲を定義します。

2、QSizeF activeSizeHint(Qt::SizeHint that, const QSizeF &constraint = QSizeF())

このレイアウト項目の有効なサイズのヒントを返します。

3、QRectFジオメトリ()

レイアウト項目のジオメトリを返します。この関数は QRectF(pos(), size()) と同等です。

4、[仮想] void getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom)

コンテンツの左、上、右、下の余白を取得します。デフォルトの実装では、すべてのコンテンツの余白が 0 であると想定されます。

5、QGraphicsItem *graphicsItem() / void setGraphicsItem(QGraphicsItem *item)

このレイアウト項目によって表される QGraphicsItem。

6、ブール isLayout()

この QGraphicsLayoutItem がレイアウトの場合は true を返します (QGraphicsLayout も QGraphicsLayoutItem を継承します)。

7、boolownedByLayout() / void setOwnedByLayout(boolオーナーシップ)

レイアウトがデストラクター内の現在のレイアウト項目を削除するかどうか。

true の場合、レイアウトはそれを削除します。false の場合、別のオブジェクトがそのオブジェクトの所有権を持っているとみなされ、レイアウトはレイアウト項目を削除しません。

レイアウト項目が QGraphicsItem と QGraphicsLayoutItem (QGraphicsWidget など) の両方を継承する場合、レイアウト項目は実際には 2 つの所有権階層に含まれており、誰がレイアウト項目を破棄するかをユーザーがカスタマイズできます。このプロパティは、レイアウトが破棄されたときにその子に対して何を行うべきかを通知します。QGraphicsWidget の場合、レイアウトが削除されるときにその子が削除されないことが望ましいです (子もグラフィックス項目階層の一部であるため)。

デフォルトでは、この値は QGraphicsLayoutItem で false に初期化されますが、QGraphicsLayout によってオーバーライドされて true が返されます。これは、QGraphicsLayout が通常 QGraphicsItem 階層の一部ではないため (QGraphicsItem 階層の外でグラフィックス項目を管理する)、親レイアウトでそれを削除する必要があるためです。

8、QGraphicsLayoutItem *parentLayoutItem() / void setParentLayoutItem(QGraphicsLayoutItem *parent)

この QGraphicsLayoutItem の親を返します。親がない場合、または親が QGraphicsLayoutItem から継承していない場合は nullptr を返します。

9、[仮想] void setGeometry(const QRectF &rect)

レイアウト項目のジオメトリを設定します。それは親座標内にあります (たとえば、四角形の左上隅は親座標内の項目の位置に相当します)。この関数は QGraphicsLayoutItem のサブクラスで再実装する必要があります。レイアウトは再配置時にこの関数を呼び出します。四角形が minimumSize と minimumSize の範囲外にある場合は、正当な範囲内になるように最も近いサイズにサイズ変更されます。

10、set最大高さ()、セット最大サイズ()、セット最大幅()、セット最小高さ()、セット最小サイズ()、セット最小幅()

レイアウト項目の最大寸法と最小寸法を設定します。

最小サイズは sizeHint(Qt::MinimumSize) をオーバーライドし、EffectiveSizeHint(Qt::MinimumSize) のデフォルト値を提供します。最小サイズの設定を解除するには、無効なサイズ (-1) を使用します。

最大サイズは sizeHint(Qt::MinimumSize) をオーバーライドし、effectiveSizeHint(Qt::MinimumSize) のデフォルト値を提供します。最大サイズの設定を解除するには、無効なサイズ (-1) を使用します。

11、setPreferredHeight()、setPreferredSize()、setPreferredWidth()

レイアウト項目の優先サイズを設定します。推奨サイズは sizeHint(Qt::PreferredSize) をオーバーライドし、EffectiveSizeHint(Qt::PreferredSize) のデフォルト値を提供します。優先サイズの設定を解除するには、無効なサイズ (-1) を使用します。

12、void setSizePolicy(const QSizePolicy &policy) / QSizePolicy sizePolicy()

サイズポリシーをポリシーに設定します。サイズ ポリシーは、レイアウト内に配置されたときに項目が水平方向および垂直方向にどのように拡大されるかを記述します。

レイアウト項目のデフォルトのサイズポリシーは (QSizePolicy::Fixed、QSizePolicy::Fixed) です。

13. [純粋仮想関数] QSizeF sizeHint(Qt::SizeHint that, const QSizeF &constraint = QSizeF())

幅と高さの制約を使用して、レイアウト項目のサイズのヒントを返します。

この記事の利点は、Qt 開発学習教材パッケージ、技術ビデオ (C++ 言語基礎、Qt プログラミング入門、QT シグナルおよびスロット メカニズム、QT インターフェイス開発イメージ描画、QT ネットワーク、QT データベース プログラミング、 QTプロジェクトコンバット、QT組込み開発、Quickモジュール等) ↓↓↓↓下記参照↓↓料金受け取りは記事下部をクリック↓↓

著作権表示: この記事は CSDN ブロガー「Friendly, friends」のオリジナル記事です。

元のリンク: https://blog.csdn.net/kenfan1647/article/details/117403792

おすすめ

転載: blog.csdn.net/hw5230/article/details/131872450