QWidgetAction Class

QWidgetAction クラスは、カスタムウィジェットをツールバーなどのアクションベースのコンテナに挿入するためのインターフェイスによってQAction を拡張します。詳細...

Header: #include <QWidgetAction>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Inherits: QAction

パブリック関数

QWidgetAction(QObject *parent)
virtual ~QWidgetAction()
QWidget *defaultWidget() const
void releaseWidget(QWidget *widget)
QWidget *requestWidget(QWidget *parent)
void setDefaultWidget(QWidget *widget)

保護された関数

virtual QWidget *createWidget(QWidget *parent)
QList<QWidget *> createdWidgets() const
virtual void deleteWidget(QWidget *widget)

再実装された保護された関数

virtual bool event(QEvent *event) override
virtual bool eventFilter(QObject *obj, QEvent *event) override

詳細説明

アプリケーションのほとんどのアクションは、メニューの項目やツールバーのボタンとして表現されます。しかし、時にはもっと複雑なウィジェットが必要になることもあります。例えば、ワープロのズーム・アクションは、QToolBarQComboBox を使って実現されるかもしれません。QToolBar は、単一のウィジェットを挿入するための便利な関数としてQToolBar::insertWidget() を提供します。しかし、複数のコンテナで視覚化するためにカスタムウィジェットを使用するアクションを実装したい場合は、QWidgetActionをサブクラス化する必要があります。

QWidgetActionが例えばQToolBar に追加されると、QWidgetAction::createWidget()が呼び出されます。この関数の再実装は、指定された親を持つ新しいカスタムウィジェットを作成する必要があります。

アクションがコンテナウィジェットから削除された場合、QWidgetAction::deleteWidget() が、以前に作成されたカスタムウィジェットを引数として呼び出されます。デフォルトの実装では、ウィジェットは非表示になり、QObject::deleteLater() を使用して削除されます。

カスタム・ウィジェットが 1 つしかない場合は、setDefaultWidget() を使用して、そのウィジェットをデフォルト・ウィジェットに設定できます。そのウィジェットは、アクションがQToolBar 、または一般的にQWidgetActionをサポートするアクションコンテナに追加された場合に使用されます。デフォルト・ウィジェットのみを持つQWidgetActionが同時に2つのツールバーに追加された場合、デフォルト・ウィジェットは、アクションが追加された最初のツールバーだけに表示されます。QWidgetActionは、デフォルト・ウィジェットの所有権を引き継ぎます。

例えば、マウスイベントハンドラを再実装し、QAction::trigger() を呼び出すなどして、アクションをアクティブにするのはウィジェット次第であることに注意してください。

macOS: macOS上でアプリケーションのメニューバーのメニューにウィジェットを追加すると、ウィジェットが追加され、機能しますが、いくつかの制限があります:

  1. ウィジェットは、QMenu からネイティブ・メニュー・ビューに再配置されます。他の場所(例えばポップアップメニュー)にメニューを表示すると、ウィジェットはそこに存在しません。
  2. ウィジェットのフォーカス/キーボード処理はできません。
  3. Appleの設計により、ウィジェットのマウストラッキングは現在動作しません。
  4. モーダルダイアログを開くスロットにtriggered() シグナルを接続すると、macOS 10.4 でクラッシュします (Apple が認めた既知のバグ)。

QActionQActionGroupQWidgetも参照してください

メンバ関数のドキュメント

[explicit] QWidgetAction::QWidgetAction(QObject *parent)

parent でアクションを構築する。

[virtual noexcept] QWidgetAction::~QWidgetAction()

オブジェクトを破棄し、割り当てられたリソースを解放します。

[virtual protected] QWidget *QWidgetAction::createWidget(QWidget *parent)

この関数は、カスタムウィジェットをサポートするコンテナウィジェットにアクションが追加 されるたびに呼び出されます。指定されたparent ウィジェットでアクションの表現としてカスタムウィジェットを使用したくない場合は、0 を返す必要があります。

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

[protected] QList<QWidget *> QWidgetAction::createdWidgets() const

createWidget() を使用していて、アクションが追加されたウィジェットで現在使用されているウィジェットのリストを返します。

QWidget *QWidgetAction::defaultWidget() const

デフォルトのウィジェットを返します。

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

[virtual protected] void QWidgetAction::deleteWidget(QWidget *widget)

この関数は、createWidget() を使用して作成されたカスタムwidget を使用してアクションを表示するコンテナウィジェットからアクションが削除されるたびに呼び出されます。デフォルトの実装では、widget を非表示にし、QObject::deleteLater() を使用して削除をスケジュールします。

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

[override virtual protected] bool QWidgetAction::event(QEvent *event)

再実装:QAction::event(QEvent *e)。

[override virtual protected] bool QWidgetAction::eventFilter(QObject *obj, QEvent *event)

再リプリメント:QObject::eventFilter(QObject *watched, QEvent *event)。

void QWidgetAction::releaseWidget(QWidget *widget)

指定されたwidget を解放します。

アクションをサポートするコンテナウィジェットは、ウィジェットのアクションが削除されると、この関数を呼び出します。

requestWidget()、deleteWidget()、defaultWidget()も参照してください

QWidget *QWidgetAction::requestWidget(QWidget *parent)

指定されたparent で、アクションを表すウィジェットを返します。

アクションをサポートするコンテナウィジェットは、アクションの視覚表現としてウィジェットを要求するために、この関数を呼び出すことができます。

releaseWidget(),createWidget(),defaultWidget()も参照してください

void QWidgetAction::setDefaultWidget(QWidget *widget)

widget をデフォルトのウィジェットに設定します。QWidgetAction新しいウィジェットを返すためにcreateWidget() がサブクラスによって再実装されない限り、 コンテナウィジェットがrequestWidget() を通してウィジェットを要求するとき、 デフォルトのウィジェットが使用されます。

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

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